3 #include <libpq/password.h>
4 #include <libpq/libpq.h>
5 #include <storage/fd.h>
13 verify_password(char *auth_arg, char *user, char *password)
15 char *pw_file_fullname;
18 pw_file_fullname = (char *) palloc(strlen(DataDir) + strlen(auth_arg) + 2);
19 strcpy(pw_file_fullname, DataDir);
20 strcat(pw_file_fullname, "/");
21 strcat(pw_file_fullname, auth_arg);
23 pw_file = AllocateFile(pw_file_fullname, "r");
27 "verify_password: couldn't open password file '%s'\n",
29 fputs(PQerrormsg, stderr);
30 pqdebug("%s", PQerrormsg);
32 pfree(pw_file_fullname);
37 while (!feof(pw_file))
39 char pw_file_line[255], *p, *test_user, *test_pw;
41 fgets(pw_file_line, sizeof (pw_file_line), pw_file);
44 test_user = strtok(p, ":");
45 test_pw = strtok(NULL, ":");
46 if (!test_user || !test_pw ||
47 test_user[0] == '\0' || test_pw[0] == '\0')
52 /* kill the newline */
53 if (test_pw[strlen(test_pw) - 1] == '\n')
54 test_pw[strlen(test_pw) - 1] = '\0';
56 if (strcmp(user, test_user) == 0)
58 /* we're outta here one way or the other. */
61 if (strcmp(crypt(password, test_pw), test_pw) == 0)
65 pfree(pw_file_fullname);
71 "verify_password: password mismatch for '%s'.\n",
73 fputs(PQerrormsg, stderr);
74 pqdebug("%s", PQerrormsg);
76 pfree(pw_file_fullname);
83 "verify_password: user '%s' not found in password file.\n",
85 fputs(PQerrormsg, stderr);
86 pqdebug("%s", PQerrormsg);
88 pfree(pw_file_fullname);