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.
This commit is contained in:
parent
0f77636c2e
commit
d365ce1f5c
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user