Commit d8319901 authored by Tom Lane's avatar Tom Lane

verify_password() leaked a file descriptor if it failed to find the given

userid in the flat password file.  Do it enough times and the postmaster
panicked :-(
parent 90e0b668
/* /*
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: password.c,v 1.26 1999/10/23 03:13:21 tgl Exp $ * $Id: password.c,v 1.27 1999/11/23 01:04:38 tgl Exp $
* *
*/ */
...@@ -45,6 +45,8 @@ verify_password(char *auth_arg, char *user, char *password) ...@@ -45,6 +45,8 @@ verify_password(char *auth_arg, char *user, char *password)
return STATUS_ERROR; return STATUS_ERROR;
} }
pfree(pw_file_fullname);
while (!feof(pw_file)) while (!feof(pw_file))
{ {
char pw_file_line[255], char pw_file_line[255],
...@@ -67,15 +69,12 @@ verify_password(char *auth_arg, char *user, char *password) ...@@ -67,15 +69,12 @@ verify_password(char *auth_arg, char *user, char *password)
if (strcmp(user, test_user) == 0) if (strcmp(user, test_user) == 0)
{ {
/* we're outta here one way or the other. */ /* we're outta here one way or the other, so close file */
FreeFile(pw_file); FreeFile(pw_file);
if (strcmp(crypt(password, test_pw), test_pw) == 0) if (strcmp(crypt(password, test_pw), test_pw) == 0)
{ {
/* it matched. */ /* it matched. */
pfree(pw_file_fullname);
return STATUS_OK; return STATUS_OK;
} }
...@@ -85,19 +84,17 @@ verify_password(char *auth_arg, char *user, char *password) ...@@ -85,19 +84,17 @@ verify_password(char *auth_arg, char *user, char *password)
fputs(PQerrormsg, stderr); fputs(PQerrormsg, stderr);
pqdebug("%s", PQerrormsg); pqdebug("%s", PQerrormsg);
pfree(pw_file_fullname);
return STATUS_ERROR; return STATUS_ERROR;
} }
} }
FreeFile(pw_file);
snprintf(PQerrormsg, PQERRORMSG_LENGTH, snprintf(PQerrormsg, PQERRORMSG_LENGTH,
"verify_password: user '%s' not found in password file.\n", "verify_password: user '%s' not found in password file.\n",
user); user);
fputs(PQerrormsg, stderr); fputs(PQerrormsg, stderr);
pqdebug("%s", PQerrormsg); pqdebug("%s", PQerrormsg);
pfree(pw_file_fullname);
return STATUS_ERROR; return STATUS_ERROR;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment