Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 505d903

Browse files
committed
Upgraded code to use the current version 1 calling conventions.
1 parent 2ba4826 commit 505d903

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+
Datum chkpass_in(PG_FUNCTION_ARGS);
42+
Datum chkpass_out(PG_FUNCTION_ARGS);
43+
Datum chkpass_rout(PG_FUNCTION_ARGS);
4444

4545
/* Only equal or not equal make sense */
46-
bool chkpass_eq(chkpass * a1, text * a2);
47-
bool chkpass_ne(chkpass * a1, text * a2);
46+
Datum chkpass_eq(PG_FUNCTION_ARGS);
47+
Datum chkpass_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
char mysalt[4];
6568
static bool random_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+
return PointerGetDatum(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-
return NULL;
85+
return PointerGetDatum(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+
return PointerGetDatum(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+
return PointerGetDatum(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+
return PointerGetDatum(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-
char str[10];
154-
int sz = 8;
161+
chkpass *a1 = (chkpass *) PG_GETARG_POINTER(0);
162+
text *a2 = (text *) PG_GETARG_TEXT_P(1);
163+
char str[10];
164+
int sz = 8;
165+
166+
if (!a1 || !a2)
167+
PG_RETURN_BOOL(0);
155168

156-
if (!a1 || !a2) return 0;
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-
char str[10];
167-
int sz = 8;
179+
chkpass *a1 = (chkpass *) PG_GETARG_POINTER(0);
180+
text *a2 = (text *) PG_GETARG_TEXT_P(1);
181+
char str[10];
182+
int sz = 8;
168183

169184
if (!a1 || !a2) return 0;
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)