Commit d365ce1f authored by Alvaro Herrera's avatar Alvaro Herrera

Avoid emitting empty role names in the GRANTED BY clause of GRANT ROLE

when the grantor has been dropped.  This is a workaround for the fact
that we don't track the grantor as a shared dependency.
parent 0f77636c
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* *
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.90 2007/02/10 14:58:55 petere Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.91 2007/05/15 20:20:21 alvherre Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -702,8 +702,8 @@ dumpRoleMembership(PGconn *conn) ...@@ -702,8 +702,8 @@ dumpRoleMembership(PGconn *conn)
res = executeQuery(conn, "SELECT ur.rolname AS roleid, " res = executeQuery(conn, "SELECT ur.rolname AS roleid, "
"um.rolname AS member, " "um.rolname AS member, "
"ug.rolname AS grantor, " "a.admin_option, "
"a.admin_option " "ug.rolname AS grantor "
"FROM pg_auth_members a " "FROM pg_auth_members a "
"LEFT JOIN pg_authid ur on ur.oid = a.roleid " "LEFT JOIN pg_authid ur on ur.oid = a.roleid "
"LEFT JOIN pg_authid um on um.oid = a.member " "LEFT JOIN pg_authid um on um.oid = a.member "
...@@ -717,14 +717,24 @@ dumpRoleMembership(PGconn *conn) ...@@ -717,14 +717,24 @@ dumpRoleMembership(PGconn *conn)
{ {
char *roleid = PQgetvalue(res, i, 0); char *roleid = PQgetvalue(res, i, 0);
char *member = PQgetvalue(res, i, 1); char *member = PQgetvalue(res, i, 1);
char *grantor = PQgetvalue(res, i, 2); char *option = PQgetvalue(res, i, 2);
char *option = PQgetvalue(res, i, 3);
fprintf(OPF, "GRANT %s", fmtId(roleid)); fprintf(OPF, "GRANT %s", fmtId(roleid));
fprintf(OPF, " TO %s", fmtId(member)); fprintf(OPF, " TO %s", fmtId(member));
if (*option == 't') if (*option == 't')
fprintf(OPF, " WITH ADMIN OPTION"); fprintf(OPF, " WITH ADMIN OPTION");
fprintf(OPF, " GRANTED BY %s;\n", fmtId(grantor));
/*
* We don't track the grantor very carefully in the backend, so cope
* with the possibility that it has been dropped.
*/
if (!PQgetisnull(res, i, 3))
{
char *grantor = PQgetvalue(res, i, 3);
fprintf(OPF, " GRANTED BY %s", fmtId(grantor));
}
fprintf(OPF, ";\n");
} }
PQclear(res); PQclear(res);
......
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