From 6cdba03d38a71e58576dd2615dc6897bbfdb133d Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 25 Apr 2002 00:56:36 +0000
Subject: [PATCH] Fix password code to deal with new quoting code.

---
 src/backend/libpq/crypt.c | 24 ++++++++++++++++--------
 src/backend/libpq/hba.c   | 10 +++++-----
 2 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c
index 7c665300c85..304f557c319 100644
--- a/src/backend/libpq/crypt.c
+++ b/src/backend/libpq/crypt.c
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/libpq/crypt.c,v 1.45 2002/04/04 04:25:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/crypt.c,v 1.46 2002/04/25 00:56:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,18 +31,26 @@
 int
 md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
 {
-	char	   *passwd,
-			   *valuntil,
+	char	   *passwd = NULL,
+			   *valuntil = NULL,
 			   *crypt_pwd;
 	int			retval = STATUS_ERROR;
 	List	   **line;
-
+	List		*token;
+	
 	if ((line = get_user_line(user)) == NULL)
 		return STATUS_ERROR;
 
-	passwd = lfirst(lnext(lnext(*line)));
-	valuntil = lfirst(lnext(lnext(lnext(*line))));
-
+	/* Skip over line number and username */
+	token = lnext(lnext(*line));
+	if (token)
+	{
+		passwd = lfirst(token);
+		token = lnext(token);
+		if (token)
+			valuntil = lfirst(token);
+	}
+	
 	if (passwd == NULL || *passwd == '\0')
 	{
 		if (passwd)
@@ -120,7 +128,7 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
 		AbsoluteTime vuntil,
 					current;
 
-		if (!valuntil || strcmp(valuntil, "\\N") == 0)
+		if (!valuntil)
 			vuntil = INVALID_ABSTIME;
 		else
 			vuntil = DatumGetAbsoluteTime(DirectFunctionCall1(nabstimein,
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index fce63ab2436..5e97d132b2a 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.81 2002/04/04 04:25:47 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.82 2002/04/25 00:56:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -109,9 +109,6 @@ next_token(FILE *fp, char *buf, const int bufsz)
 		while (c != EOF && c != '\n' &&
 			   (!isblank(c) || in_quote == true))
 		{
-			if (c == '"')
-				in_quote = !in_quote;
-
 			/* skip comments to EOL */
 			if (c == '#' && !in_quote)
 			{
@@ -138,11 +135,14 @@ next_token(FILE *fp, char *buf, const int bufsz)
 				break;
 
 			/* Literal double-quote is two double-quotes */
-			if (c == '"')
+			if (in_quote && c == '"')
 				was_quote = !was_quote;
 			else
 				was_quote = false;
 
+			if (c == '"')
+				in_quote = !in_quote;
+
 			c = getc(fp);
 		}
 
-- 
GitLab