ecpg - GRANT bug

Lee Kindness <lkindness@csl.co.uk>

From: Lee Kindness <lkindness@csl.co.uk>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Lee Kindness <lkindness@csl.co.uk>, pgsql-hackers@postgresql.org, Michael Meskes <meskes@postgresql.org>, Bruce Momjian <pgman@candle.pha.pa.us>
Date: 2001-10-15T09:09:03Z
Lists: pgsql-bugs, pgsql-hackers
Tom Lane writes:
 > Uh, isn't the correct fix
 > ! $$ = cat_str(8, make_str("grant"), $2, make_str("on"), $4, $5,
 > make_str("to"), $7, $8);
 > ISTM your patch loses the opt_with_grant clause.  (Of course the
 > backend doesn't currently accept that clause anyway, but that's no
 > reason for ecpg to drop it.)

My patch doesn't loose the option, it's never been passed on anyway:

 opt_with_grant:  WITH GRANT OPTION
				{
					mmerror(ET_ERROR, "WITH GRANT OPTION is not supported.  Only relation owners can set privileges");
				 }
		| /*EMPTY*/ 
		;

The existing code in ecpg/preproc/preproc.y to handle the WITH option
simply throws an error and aborts the processing... The patch below
prevents the segfault and also passes on the WITH option to the
backend, probably a better fix.

Regards, Lee.

Index: interfaces/ecpg/preproc/preproc.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/interfaces/ecpg/preproc/preproc.y,v
retrieving revision 1.159
diff -c -r1.159 preproc.y
*** interfaces/ecpg/preproc/preproc.y	2001/10/14 12:07:57	1.159
--- interfaces/ecpg/preproc/preproc.y	2001/10/15 09:06:29
***************
*** 1693,1699 ****
  
  GrantStmt:  GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
  				{
! 					$$ = cat_str(7, make_str("grant"), $2, make_str("on"), $4, $5, make_str("to"), $7);
  				}
  		;
  
--- 1693,1699 ----
  
  GrantStmt:  GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
  				{
! 					$$ = cat_str(8, make_str("grant"), $2, make_str("on"), $4, $5, make_str("to"), $7, $8);
  				}
  		;
  
***************
*** 1769,1779 ****
  		| grantee_list ',' grantee 	{ $$ = cat_str(3, $1, make_str(","), $3); }
  		;
  
! opt_with_grant:  WITH GRANT OPTION
! 				{
! 					mmerror(ET_ERROR, "WITH GRANT OPTION is not supported.  Only relation owners can set privileges");
! 				 }
! 		| /*EMPTY*/ 
  		;
  
  
--- 1769,1776 ----
  		| grantee_list ',' grantee 	{ $$ = cat_str(3, $1, make_str(","), $3); }
  		;
  
! opt_with_grant:  WITH GRANT OPTION { $$ = make_str("with grant option"); }
! 		| /*EMPTY*/ { $$ = EMPTY; }
  		;