@@ -18,18 +18,23 @@ extern char *crypt(const char *, const char *);
18
18
19
19
#endif
20
20
21
- char * comname ;
22
- static void usage (FILE * stream );
21
+ #define PG_PASSWD_LEN 13 /* not including null */
22
+
23
+ const char * progname ;
24
+
25
+ static void usage (void );
23
26
static void read_pwd_file (char * filename );
24
27
static void write_pwd_file (char * filename , char * bkname );
25
- static void encrypt_pwd (char key [9 ], char salt [3 ], char passwd [14 ]);
28
+ static void encrypt_pwd (char key [9 ], char salt [3 ], char passwd [PG_PASSWD_LEN + 1 ]);
26
29
static void prompt_for_username (char * username );
27
30
static void prompt_for_password (char * prompt , char * password );
28
31
29
32
static void
30
- usage (FILE * stream )
33
+ usage (void )
31
34
{
32
- fprintf (stream , "Usage: %s <password file>\n" , comname );
35
+ printf ("%s manipulates flat text password files for PostgreSQL.\n\n" , progname );
36
+ printf ("Usage:\n %s PASSWORD-FILE\n\n" , progname );
37
+ printf ("Report bugs to <pgsql-bugs@postgresql.org>.\n" );
33
38
}
34
39
35
40
typedef struct
@@ -97,8 +102,8 @@ read_pwd_file(char *filename)
97
102
if (line [l - 1 ] == '\n' )
98
103
line [l - 1 ] = '\0' ;
99
104
else
100
- { /* too long */
101
- fprintf (stderr , "%s: line %d: line too long. \n" ,
105
+ {
106
+ fprintf (stderr , "%s:%d: line too long\n" ,
102
107
filename , npwds + 1 );
103
108
exit (1 );
104
109
}
@@ -110,7 +115,7 @@ read_pwd_file(char *filename)
110
115
111
116
if (strlen (p ) == 0 )
112
117
{
113
- fprintf (stderr , "%s: line %d: null user name. \n" ,
118
+ fprintf (stderr , "%s:%d: null user name\n" ,
114
119
filename , npwds + 1 );
115
120
exit (1 );
116
121
}
@@ -121,7 +126,8 @@ read_pwd_file(char *filename)
121
126
{
122
127
if (strcmp (pwds [i ].uname , pwds [npwds ].uname ) == 0 )
123
128
{
124
- fprintf (stderr , "%s: duplicated entry.\n" , pwds [npwds ].uname );
129
+ fprintf (stderr , "Duplicated entry: %s\n" ,
130
+ pwds [npwds ].uname );
125
131
exit (1 );
126
132
}
127
133
}
@@ -135,9 +141,9 @@ read_pwd_file(char *filename)
135
141
if (q != NULL )
136
142
* (q ++ ) = '\0' ;
137
143
138
- if (strlen (p ) != 13 && strcmp (p , "+" )!= 0 )
144
+ if (strlen (p ) != PG_PASSWD_LEN && strcmp (p , "+" )!= 0 )
139
145
{
140
- fprintf (stderr , "WARNING: %s: line %d: invalid password length. \n" ,
146
+ fprintf (stderr , "%s:%d: warning: invalid password length\n" ,
141
147
filename , npwds + 1 );
142
148
}
143
149
pwds [npwds ].pwd = strdup (p );
@@ -201,7 +207,7 @@ write_pwd_file(char *filename, char *bkname)
201
207
}
202
208
203
209
static void
204
- encrypt_pwd (char key [9 ], char salt [3 ], char passwd [14 ])
210
+ encrypt_pwd (char key [9 ], char salt [3 ], char passwd [PG_PASSWD_LEN + 1 ])
205
211
{
206
212
int n ;
207
213
@@ -233,17 +239,17 @@ encrypt_pwd(char key[9], char salt[3], char passwd[14])
233
239
234
240
#ifdef NOT_USED
235
241
static int
236
- check_pwd (char key [9 ], char passwd [14 ])
242
+ check_pwd (char key [9 ], char passwd [PG_PASSWD_LEN + 1 ])
237
243
{
238
- char shouldbe [14 ];
244
+ char shouldbe [PG_PASSWD_LEN + 1 ];
239
245
char salt [3 ];
240
246
241
247
salt [0 ] = passwd [0 ];
242
248
salt [1 ] = passwd [1 ];
243
249
salt [2 ] = '\0' ;
244
250
encrypt_pwd (key , salt , shouldbe );
245
251
246
- return strncmp (shouldbe , passwd , 13 ) == 0 ? 1 : 0 ;
252
+ return strncmp (shouldbe , passwd , PG_PASSWD_LEN ) == 0 ? 1 : 0 ;
247
253
}
248
254
249
255
#endif
@@ -314,32 +320,53 @@ prompt_for_password(char *prompt, char *password)
314
320
int
315
321
main (int argc , char * argv [])
316
322
{
317
- static char bkname [512 ];
323
+ static char bkname [MAXPGPATH ];
324
+ char * filename ;
318
325
char username [9 ];
319
326
char salt [3 ];
320
327
char key [9 ],
321
328
key2 [9 ];
322
- char e_passwd [14 ];
329
+ char e_passwd [PG_PASSWD_LEN + 1 ];
323
330
int i ;
324
331
325
- comname = argv [0 ];
332
+ progname = argv [0 ];
333
+
326
334
if (argc != 2 )
327
335
{
328
- usage (stderr );
336
+ fprintf (stderr , "%s: too %s arguments\nTry '%s -?' for help.\n" ,
337
+ progname , argc > 2 ? "many" : "few" , progname );
338
+ exit (1 );
339
+ }
340
+
341
+ if (strcmp (argv [1 ], "--help" ) == 0 || strcmp (argv [1 ], "-?" ) == 0 )
342
+ {
343
+ usage ();
344
+ exit (0 );
345
+ }
346
+ if (strcmp (argv [1 ], "--version" ) == 0 || strcmp (argv [1 ], "-V" ) == 0 )
347
+ {
348
+ puts ("pg_passwd (PostgreSQL) " PG_VERSION );
349
+ exit (0 );
350
+ }
351
+ if (argv [1 ][0 ] == '-' )
352
+ {
353
+ fprintf (stderr , "%s: invalid option: %s\nTry '%s -?' for help.\n" ,
354
+ progname , argv [1 ], progname );
329
355
exit (1 );
330
356
}
331
357
358
+ filename = argv [1 ];
332
359
333
360
/* open file */
334
- read_pwd_file (argv [ 1 ] );
361
+ read_pwd_file (filename );
335
362
336
363
/* ask for the user name and the password */
337
364
prompt_for_username (username );
338
365
prompt_for_password ("New password: " , key );
339
366
prompt_for_password ("Re-enter new password: " , key2 );
340
367
if (strncmp (key , key2 , 8 ) != 0 )
341
368
{
342
- fprintf (stderr , "Password mismatch. \n" );
369
+ fprintf (stderr , "Password mismatch\n" );
343
370
exit (1 );
344
371
}
345
372
salt [0 ] = '\0' ;
@@ -358,7 +385,7 @@ main(int argc, char *argv[])
358
385
{ /* did not exist */
359
386
if (npwds == MAXPWDS )
360
387
{
361
- fprintf (stderr , "%s: cannot handle so may entries. \n" , comname );
388
+ fprintf (stderr , "Cannot handle so may entries\n" );
362
389
exit (1 );
363
390
}
364
391
pwds [npwds ].uname = strdup (username );
@@ -368,8 +395,8 @@ main(int argc, char *argv[])
368
395
}
369
396
370
397
/* write back the file */
371
- sprintf (bkname , "%s.bk" , argv [ 1 ] );
372
- write_pwd_file (argv [ 1 ] , bkname );
398
+ sprintf (bkname , "%s.bk" , filename );
399
+ write_pwd_file (filename , bkname );
373
400
374
401
return 0 ;
375
402
}
0 commit comments