BIG grant problem

Started by Terry Mackintoshabout 27 years ago8 messages
#1Terry Mackintosh
terry@terrym.com

Hi all

Minor detail, but when I did 'pg_dump -z -f dump.file dbname' and then
went to restore it, I found that the grant statments are like:
GRANT ALL on "tablename" to "tablename";
instead of
GRANT ALL on "tablename" to "username";

I used vim to edit the dump file, so am ok.
Just thought you might want to know.
Oh, ya, that is the release version 6.4, just downloaded this afternoon.

Have a great night
Terry Mackintosh <terry@terrym.com> http://www.terrym.com
sysadmin/owner Please! No MIME encoded or HTML mail, unless needed.

Proudly powered by R H Linux 4.2, Apache 1.3, PHP 3, PostgreSQL 6.3
-------------------------------------------------------------------
Success Is A Choice ... book by Rick Patino, get it, read it!

#2Bruce Momjian
maillist@candle.pha.pa.us
In reply to: Terry Mackintosh (#1)
Re: [HACKERS] BIG grant problem

Hi all

Minor detail, but when I did 'pg_dump -z -f dump.file dbname' and then
went to restore it, I found that the grant statments are like:
GRANT ALL on "tablename" to "tablename";
instead of
GRANT ALL on "tablename" to "username";

I used vim to edit the dump file, so am ok.
Just thought you might want to know.
Oh, ya, that is the release version 6.4, just downloaded this afternoon.

Yikes, confirmed here. We need to know how this got into the tree
without showing up on our tests, are there any more pg_dump bugs we have
not found, and a fix.

This is our first major 6.4 bug, aside from large objects!
Congradulations.

-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#2)
Re: [HACKERS] BIG grant problem

Bruce Momjian <maillist@candle.pha.pa.us> writes:

Terry Mackintosh wrote:

Minor detail, but when I did 'pg_dump -z -f dump.file dbname' and then
went to restore it, I found that the grant statments are like:
GRANT ALL on "tablename" to "tablename";
instead of
GRANT ALL on "tablename" to "username";

Yikes, confirmed here. We need to know how this got into the tree
without showing up on our tests,

Well, that's easy --- there are no regression tests that test pg_dump
at all, nor any that test multiple table owners and permissions.

FWIW, pg_dump -z works correctly for GRANT to PUBLIC --- otherwise
I would've noticed some time ago. But I hadn't had occasion
to check granting permission to specific users :-( ... and I don't
think most of the rest of the developers work with databases that
even have multiple users, let alone put access restrictions on
individual tables.

It's certainly true that pg_dump is pretty weak in the area of
table ownerships and permissions. We have fixed several bugs
in that area since 6.3.2, and I'm not particularly surprised to
hear of another one. We need someone who actually has occasion
to work with access-restricted databases to pound on pg_dump for
a while and flush out the bugs. (Terry, can you volunteer?)
I don't think the bugs will be hard to fix, it's just a matter
of not having done enough testing.

regards, tom lane

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#3)
Re: [HACKERS] BIG grant problem

I said:

I don't think the bugs will be hard to fix,

And, indeed, this bug is pretty trivial. Fix will be applied
momentarily.

regards, tom lane

#5Terry Mackintosh
terry@terrym.com
In reply to: Tom Lane (#3)
Re: [HACKERS] BIG grant problem

Hi

On Sun, 15 Nov 1998, Tom Lane wrote:

hear of another one. We need someone who actually has occasion
to work with access-restricted databases to pound on pg_dump for
a while and flush out the bugs. (Terry, can you volunteer?)

Sure.

I don't think the bugs will be hard to fix, it's just a matter
of not having done enough testing.

I started to look at it last night, found where the line is created in the
pg_dump.c file, looks ok there, so the problem is a little deeper then
just an easy typo.

Should be able to look at it today.

Have a great day
Terry Mackintosh <terry@terrym.com> http://www.terrym.com
sysadmin/owner Please! No MIME encoded or HTML mail, unless needed.

Proudly powered by R H Linux 4.2, Apache 1.3, PHP 3, PostgreSQL 6.3
-------------------------------------------------------------------
Success Is A Choice ... book by Rick Patino, get it, read it!

#6Terry Mackintosh
terry@terrym.com
In reply to: Tom Lane (#4)
Re: [HACKERS] BIG grant problem

Hi Tom

On Sun, 15 Nov 1998, Tom Lane wrote:

I said:

I don't think the bugs will be hard to fix,

And, indeed, this bug is pretty trivial. Fix will be applied
momentarily.

regards, tom lane

Oh good, will there be a loose patch? so I and others don't have to
download the whole source again?

Thanks
Terry Mackintosh <terry@terrym.com> http://www.terrym.com
sysadmin/owner Please! No MIME encoded or HTML mail, unless needed.

Proudly powered by R H Linux 4.2, Apache 1.3, PHP 3, PostgreSQL 6.3
-------------------------------------------------------------------
Success Is A Choice ... book by Rick Patino, get it, read it!

#7Bruce Momjian
maillist@candle.pha.pa.us
In reply to: Terry Mackintosh (#6)
Re: [HACKERS] BIG grant problem

Hi Tom

On Sun, 15 Nov 1998, Tom Lane wrote:

I said:

I don't think the bugs will be hard to fix,

And, indeed, this bug is pretty trivial. Fix will be applied
momentarily.

regards, tom lane

Oh good, will there be a loose patch? so I and others don't have to
download the whole source again?

I think I can say it will be in 6.4,1, which should be released in a
week or so. Hopefully, we can generate a 6.4.1, and a 6.4_to_6.4.1
patch.

-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#7)
Re: [HACKERS] BIG grant problem

Terry Mackintosh <terry@terrym.com> writes:

Oh good, will there be a loose patch? so I and others don't have to
download the whole source again?

If you need it here's the patch. (I already checked this into both
6.4 and 6.5 trees.) I found a second place that had the same problem,
btw. Calling fmtID() twice in one expression is no good 'cuz it uses
a static result area...

regards, tom lane

*** pg_dump.c.orig	Fri Nov  6 10:56:42 1998
--- pg_dump.c	Sun Nov 15 02:11:29 1998
***************
*** 2563,2577 ****
  	{
  		if (ACLlist[k].privledges != (char *) NULL)
  		{
  			if (ACLlist[k].user == (char *) NULL)
! 				fprintf(fout,
! 						"GRANT %s on %s to PUBLIC;\n",
! 						ACLlist[k].privledges, fmtId(tbinfo.relname));
  			else
! 				fprintf(fout,
! 						"GRANT %s on %s to %s;\n",
! 						ACLlist[k].privledges, fmtId(tbinfo.relname),
! 						fmtId(ACLlist[k].user));
  		}
  	}
  }
--- 2563,2578 ----
  	{
  		if (ACLlist[k].privledges != (char *) NULL)
  		{
+ 			/* If you change this code, bear in mind fmtId() can be
+ 			 * used only once per printf() call...
+ 			 */
+ 			fprintf(fout,
+ 					"GRANT %s on %s to ",
+ 					ACLlist[k].privledges, fmtId(tbinfo.relname));
  			if (ACLlist[k].user == (char *) NULL)
! 				fprintf(fout, "PUBLIC;\n");
  			else
! 				fprintf(fout, "%s;\n", fmtId(ACLlist[k].user));
  		}
  	}
  }
***************
*** 2851,2873 ****

strcpy(id1, fmtId(indinfo[i].indexrelname));
strcpy(id2, fmtId(indinfo[i].indrelname));
! sprintf(q, "CREATE %s INDEX %s on %s using %s (",
(strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "",
id1,
id2,
indinfo[i].indamname);
if (funcname)
{
! sprintf(q, "%s %s (%s) %s );\n",
! q, fmtId(funcname), attlist, fmtId(classname[0]));
free(funcname);
free(classname[0]);
}
else
! sprintf(q, "%s %s );\n",
! q, attlist);
!
! fputs(q, fout);
}
}

--- 2852,2872 ----

strcpy(id1, fmtId(indinfo[i].indexrelname));
strcpy(id2, fmtId(indinfo[i].indrelname));
! fprintf(fout, "CREATE %s INDEX %s on %s using %s (",
(strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "",
id1,
id2,
indinfo[i].indamname);
if (funcname)
{
! /* need 2 printf's here cuz fmtId has static return area */
! fprintf(fout, " %s", fmtId(funcname));
! fprintf(fout, " (%s) %s );\n", attlist, fmtId(classname[0]));
free(funcname);
free(classname[0]);
}
else
! fprintf(fout, " %s );\n", attlist);
}
}