8000 Avoid emitting empty role names in the GRANTED BY clause of GRANT ROLE · postgrespro/postgres@d365ce1 · GitHub
[go: up one dir, main page]

Skip to content
  • Commit d365ce1

    Browse files
    committed
    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.
    1 parent 0f77636 commit d365ce1

    File tree

    1 file changed

    +16
    -6
    lines changed

    1 file changed

    +16
    -6
    lines changed

    src/bin/pg_dump/pg_dumpall.c

    Lines changed: 16 additions & 6 deletions
    Original file line numberDiff line numberDiff line change
    @@ -6,7 +6,7 @@
    66
    * Portions Copyright (c) 1994, Regents of the University of California
    77
    *
    88
    *
    9-
    * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.90 2007/02/10 14:58:55 petere Exp $
    9+
    * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.91 2007/05/15 20:20:21 alvherre Exp $
    1010
    *
    1111
    *-------------------------------------------------------------------------
    1212
    */
    @@ -702,8 +702,8 @@ dumpRoleMembership(PGconn *conn)
    702702

    703703
    res = executeQuery(conn, "SELECT ur.rolname AS roleid, "
    704704
    "um.rolname AS member, "
    705-
    "ug.rolname AS grantor, "
    706-
    "a.admin_option "
    705+
    "a.admin_option, "
    706+
    "ug.rolname AS grantor "
    707707
    "FROM pg_auth_members a "
    708708
    "LEFT JOIN pg_authid ur on ur.oid = a.roleid "
    709709
    "LEFT JOIN pg_authid um on um.oid = a.member "
    @@ -717,14 +717,24 @@ dumpRoleMembership(PGconn *conn)
    717717
    {
    718718
    char *roleid = PQgetvalue(res, i, 0);
    719719
    char *member = PQgetvalue(res, i, 1);
    720-
    char *grantor = PQgetvalue(res, i, 2);
    721-
    char *option = PQgetvalue(res, i, 3);
    720+
    char *option = PQgetvalue(res, i, 2);
    722721

    723722
    fprintf(OPF, "GRANT %s", fmtId(roleid));
    724723
    fprintf(OPF, " TO %s", fmtId(member));
    725724
    if (*option == 't')
    726725
    fprintf(OPF, " WITH ADMIN OPTION");
    727-
    fprintf(OPF, " GRANTED BY %s;\n", fmtId(grantor));
    726+
    727+
    /*
    728+
    * We don't track the grantor very carefully in the backend, so cope
    729+
    * with the possibility that it has been dropped.
    730+
    */
    731+
    if (!PQgetisnull(res, i, 3))
    732+
    {
    733+
    char *grantor = PQgetvalue(res, i, 3);
    734+
    735+
    fprintf(OPF, " GRANTED BY %s", fmtId(grantor));
    736+
    }
    737+
    fprintf(OPF, ";\n");
    728738
    }
    729739

    730740
    PQclear(res);

    0 commit comments

    Comments
     (0)
    0