Tom Lane wrote:
> Magnus Hagander <[EMAIL PROTECTED]> writes:
>> Tom Lane wrote:
>>> It would be seriously messy to try to make the parse-error code know
>>> about things like that.  Better would be to keep the GUC variable in
>>> existence always and have an assign hook to throw the error.
> 
>> Um, no, it wouldn't :-) At least that's my impression. We're only
>> talking a bout the pg_hba code.
> 
> Oh, sorry, for some reason I read this as postgresql.conf parsing.
> Too early in the morning, need more caffeine ;-)

:-) THat's what I was guessing.

Anyway, here's what I intended:

//Magnus

*** a/src/backend/libpq/hba.c
--- b/src/backend/libpq/hba.c
***************
*** 637,644 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  #ifdef USE_SSL
  			parsedline->conntype = ctHostSSL;
  #else
! 			/* We don't accept this keyword at all if no SSL support */
! 			goto hba_syntax;
  #endif
  		}
  #ifdef USE_SSL
--- 637,649 ----
  #ifdef USE_SSL
  			parsedline->conntype = ctHostSSL;
  #else
! 			ereport(LOG,
! 					(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 					 errmsg("hostssl not supported on this platform"),
! 					 errhint("compile with --enable-ssl to use SSL connections"),
! 					 errcontext("line %d of configuration file \"%s\"",
! 							line_num, HbaFileName)));
! 			return false;
  #endif
  		}
  #ifdef USE_SSL
***************
*** 654,671 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  		}
  	} /* record type */
  	else
! 		goto hba_syntax;
  
  	/* Get the database. */
  	line_item = lnext(line_item);
  	if (!line_item)
! 		goto hba_syntax;
  	parsedline->database = pstrdup(lfirst(line_item));
  
  	/* Get the role. */
  	line_item = lnext(line_item);
  	if (!line_item)
! 		goto hba_syntax;
  	parsedline->role = pstrdup(lfirst(line_item));
  
  	if (parsedline->conntype != ctLocal)
--- 659,698 ----
  		}
  	} /* record type */
  	else
! 	{
! 		ereport(LOG,
! 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 				 errmsg("invalid connection type \"%s\"",
! 						token),
! 				 errcontext("line %d of configuration file \"%s\"",
! 						line_num, HbaFileName)));
! 		return false;
! 	}
  
  	/* Get the database. */
  	line_item = lnext(line_item);
  	if (!line_item)
! 	{
! 		ereport(LOG,
! 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 				 errmsg("end-of-line before database specification"),
! 				 errcontext("line %d of configuration file \"%s\"",
! 						line_num, HbaFileName)));
! 		return false;
! 	}
  	parsedline->database = pstrdup(lfirst(line_item));
  
  	/* Get the role. */
  	line_item = lnext(line_item);
  	if (!line_item)
! 	{
! 		ereport(LOG,
! 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 				 errmsg("end-of-line before role specification"),
! 				 errcontext("line %d of configuration file \"%s\"",
! 						line_num, HbaFileName)));
! 		return false;
! 	}
  	parsedline->role = pstrdup(lfirst(line_item));
  
  	if (parsedline->conntype != ctLocal)
***************
*** 673,679 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  		/* Read the IP address field. (with or without CIDR netmask) */
  		line_item = lnext(line_item);
  		if (!line_item)
! 			goto hba_syntax;
  		token = pstrdup(lfirst(line_item));
  
  		/* Check if it has a CIDR suffix and if so isolate it */
--- 700,713 ----
  		/* Read the IP address field. (with or without CIDR netmask) */
  		line_item = lnext(line_item);
  		if (!line_item)
! 		{
! 			ereport(LOG,
! 					(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 					 errmsg("end-of-line before ip address specification"),
! 					 errcontext("line %d of configuration file \"%s\"",
! 							line_num, HbaFileName)));
! 			return false;
! 		}
  		token = pstrdup(lfirst(line_item));
  
  		/* Check if it has a CIDR suffix and if so isolate it */
***************
*** 718,731 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  		{
  			if (pg_sockaddr_cidr_mask(&parsedline->mask, cidr_slash + 1,
  									  parsedline->addr.ss_family) < 0)
! 				goto hba_syntax;
  		}
  		else
  		{
  			/* Read the mask field. */
  			line_item = lnext(line_item);
  			if (!line_item)
! 				goto hba_syntax;
  			token = lfirst(line_item);
  
  			ret = pg_getaddrinfo_all(token, NULL, &hints, &gai_result);
--- 752,780 ----
  		{
  			if (pg_sockaddr_cidr_mask(&parsedline->mask, cidr_slash + 1,
  									  parsedline->addr.ss_family) < 0)
! 			{
! 				ereport(LOG,
! 						(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 						 errmsg("invalid CIDR mask in address \"%s\"",
! 								token),
! 						 errcontext("line %d of configuration file \"%s\"",
! 							line_num, HbaFileName)));
! 				return false;
! 			}
  		}
  		else
  		{
  			/* Read the mask field. */
  			line_item = lnext(line_item);
  			if (!line_item)
! 			{
! 				ereport(LOG,
! 						(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 						 errmsg("end-of-line before netmask specification"),
! 						 errcontext("line %d of configuration file \"%s\"",
! 								line_num, HbaFileName)));
! 				return false;
! 			}
  			token = lfirst(line_item);
  
  			ret = pg_getaddrinfo_all(token, NULL, &hints, &gai_result);
***************
*** 759,765 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  	/* Get the authentication method */
  	line_item = lnext(line_item);
  	if (!line_item)
! 		goto hba_syntax;
  	token = lfirst(line_item);
  
  	unsupauth = NULL;
--- 808,821 ----
  	/* Get the authentication method */
  	line_item = lnext(line_item);
  	if (!line_item)
! 	{
! 		ereport(LOG,
! 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
! 				 errmsg("end-of-line before authentication method"),
! 				 errcontext("line %d of configuration file \"%s\"",
! 						line_num, HbaFileName)));
! 		return false;
! 	}
  	token = lfirst(line_item);
  
  	unsupauth = NULL;
***************
*** 937,959 **** parse_hba_line(List *line, int line_num, HbaLine *parsedline)
  	}
  	
  	return true;
- 
- hba_syntax:
- 	if (line_item)
- 		ereport(LOG,
- 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
- 				 errmsg("invalid token \"%s\"",
- 						(char *) lfirst(line_item)),
- 				 errcontext("line %d of configuration file \"%s\"",
- 						line_num, HbaFileName)));
- 	else
- 		ereport(LOG,
- 				(errcode(ERRCODE_CONFIG_FILE_ERROR),
- 				 errmsg("missing field at end of line"),
- 				 errcontext("line %d of configuration file \"%s\"",
- 						line_num, HbaFileName)));
- 
- 	return false;
  }
  
  
--- 993,998 ----
-- 
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to