Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit505d903

Browse files
committed
Upgraded code to use the current version 1 calling conventions.
1 parent2ba4826 commit505d903

File tree

1 file changed

+47
-32
lines changed

1 file changed

+47
-32
lines changed

‎contrib/chkpass/chkpass.c

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* darcy@druid.net
55
* http://www.druid.net/darcy/
66
*
7-
* $Header: /cvsroot/pgsql/contrib/chkpass/chkpass.c,v 1.2 2001/05/27 19:06:20 darcy Exp $
7+
* $Id:chkpass.c,v 1.3 2001/05/28 15:34:27 darcy Exp $
88
* best viewed with tabs set to 4
99
*/
1010

@@ -14,7 +14,7 @@
1414
#include<unistd.h>
1515

1616
#include<postgres.h>
17-
#include<utils/palloc.h>
17+
#include<fmgr.h>
1818

1919
/*
2020
* This type encrypts it's input unless the first character is a colon.
@@ -38,13 +38,14 @@ typedef struct chkpass
3838
* Various forward declarations:
3939
*/
4040

41-
chkpass*chkpass_in(char*str);
42-
char*chkpass_out(chkpass*addr);
43-
text*chkpass_rout(chkpass*addr);
41+
Datumchkpass_in(PG_FUNCTION_ARGS);
42+
Datumchkpass_out(PG_FUNCTION_ARGS);
43+
Datumchkpass_rout(PG_FUNCTION_ARGS);
4444

4545
/* Only equal or not equal make sense */
46-
boolchkpass_eq(chkpass*a1,text*a2);
47-
boolchkpass_ne(chkpass*a1,text*a2);
46+
Datumchkpass_eq(PG_FUNCTION_ARGS);
47+
Datumchkpass_ne(PG_FUNCTION_ARGS);
48+
4849

4950
/* This function checks that the password is a good one
5051
* It's just a placeholder for now */
@@ -57,9 +58,11 @@ verify_pass(const char *str)
5758
/*
5859
* CHKPASS reader.
5960
*/
60-
chkpass*
61-
chkpass_in(char*str)
61+
PG_FUNCTION_INFO_V1(chkpass_in)
62+
Datum
63+
chkpass_in(PG_FUNCTION_ARGS)
6264
{
65+
char*str=PG_GETARG_CSTRING(0);
6366
chkpass*result;
6467
charmysalt[4];
6568
staticboolrandom_initialized= false;
@@ -72,14 +75,14 @@ chkpass_in(char *str)
7275
result= (chkpass*)palloc(sizeof(chkpass));
7376
strncpy(result->password,str+1,13);
7477
result->password[13]=0;
75-
return (result);
78+
returnPointerGetDatum(result);
7679
}
7780

7881
if (verify_pass(str)!=0)
7982
{
8083
elog(ERROR,"chkpass_in: purported CHKPASS \"%s\" is a weak password",
8184
str);
82-
returnNULL;
85+
returnPointerGetDatum(NULL);
8386
}
8487

8588
result= (chkpass*)palloc(sizeof(chkpass));
@@ -95,81 +98,93 @@ chkpass_in(char *str)
9598
mysalt[2]=0;/* technically the terminator is not
9699
* necessary but I like to play safe */
97100
strcpy(result->password,crypt(str,mysalt));
98-
return (result);
101+
returnPointerGetDatum(result);
99102
}
100103

101104
/*
102105
* CHKPASS output function.
103106
* Just like any string but we know it is max 15 (13 plus colon and terminator.)
104107
*/
105108

106-
char*
107-
chkpass_out(chkpass*password)
109+
PG_FUNCTION_INFO_V1(chkpass_out)
110+
Datum
111+
chkpass_out(PG_FUNCTION_ARGS)
108112
{
113+
chkpass*password= (chkpass*)PG_GETARG_POINTER(0);
109114
char*result;
110115

111116
if (password==NULL)
112-
return (NULL);
117+
returnPointerGetDatum(NULL);
113118

114119
if ((result= (char*)palloc(16))!=NULL)
115120
{
116121
result[0]=':';
117122
strcpy(result+1,password->password);
118123
}
119124

120-
return(result);
125+
PG_RETURN_CSTRING(result);
121126
}
122127

123128

124129
/*
125130
* special output function that doesn't output the colon
126131
*/
127132

128-
text*
129-
chkpass_rout(chkpass*password)
133+
PG_FUNCTION_INFO_V1(chkpass_rout)
134+
Datum
135+
chkpass_rout(PG_FUNCTION_ARGS)
130136
{
137+
chkpass*password= (chkpass*)PG_GETARG_POINTER(0);
131138
text*result=NULL;
132139

133140
if (password==NULL)
134-
return (NULL);
141+
returnPointerGetDatum(NULL);
135142

136143
if ((result= (text*)palloc(VARHDRSZ+16))!=NULL)
137144
{
138145
result->vl_len=VARHDRSZ+strlen(password->password);
139-
memcpy(result->vl_dat,password->password,strlen(password->pass
146+
memcpy(result->vl_dat,password->password,strlen(password->password));
140147
}
141148

142-
return(result);
149+
PG_RETURN_CSTRING(result);
143150
}
144151

145152

146153
/*
147154
* Boolean tests
148155
*/
149156

150-
bool
151-
chkpass_eq(chkpass*a1,text*a2)
157+
PG_FUNCTION_INFO_V1(chkpass_eq)
158+
Datum
159+
chkpass_eq(PG_FUNCTION_ARGS)
152160
{
153-
charstr[10];
154-
intsz=8;
161+
chkpass*a1= (chkpass*)PG_GETARG_POINTER(0);
162+
text*a2= (text*)PG_GETARG_TEXT_P(1);
163+
charstr[10];
164+
intsz=8;
165+
166+
if (!a1|| !a2)
167+
PG_RETURN_BOOL(0);
155168

156-
if (!a1|| !a2)return0;
157169
if (a2->vl_len<12)sz=a2->vl_len-4;
158170
strncpy(str,a2->vl_dat,sz);
159171
str[sz]=0;
160-
return (strcmp(a1->password,crypt(str,a1->password))==0);
172+
PG_RETURN_BOOL (strcmp(a1->password,crypt(str,a1->password))==0);
161173
}
162174

163-
bool
164-
chkpass_ne(chkpass*a1,text*a2)
175+
PG_FUNCTION_INFO_V1(chkpass_ne)
176+
Datum
177+
chkpass_ne(PG_FUNCTION_ARGS)
165178
{
166-
charstr[10];
167-
intsz=8;
179+
chkpass*a1= (chkpass*)PG_GETARG_POINTER(0);
180+
text*a2= (text*)PG_GETARG_TEXT_P(1);
181+
charstr[10];
182+
intsz=8;
168183

169184
if (!a1|| !a2)return0;
170185
if (a2->vl_len<12)sz=a2->vl_len-4;
171186
strncpy(str,a2->vl_dat,sz);
172187
str[sz]=0;
173-
return (strcmp(a1->password,crypt(str,a1->password))!=0);
188+
PG_RETURN_BOOL (strcmp(a1->password,crypt(str,a1->password))!=0);
174189
}
175190

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp