Re-add pg_dump fix.
authorBruce Momjian
Tue, 7 Apr 1998 22:36:38 +0000 (22:36 +0000)
committerBruce Momjian
Tue, 7 Apr 1998 22:36:38 +0000 (22:36 +0000)
src/bin/pg_dump/pg_dump.c

index 6ca2301c6452eafd6f3d7645b1c027087a4ade75..50b4b99514b08b07e0c522ba8d101f4c6bb7521b 100644 (file)
@@ -21,7 +21,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.69 1998/04/07 22:00:37 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.70 1998/04/07 22:36:38 momjian Exp $
  *
  * Modifications - 6/10/96 - [email protected] - version 1.13.dhb
  *
@@ -79,6 +79,7 @@
 #include "pg_dump.h"
 
 static void dumpSequence(FILE *fout, TableInfo tbinfo);
+static void dumpACL(FILE *fout, TableInfo tbinfo);
 static void
 dumpTriggers(FILE *fout, const char *tablename,
             TableInfo *tblinfo, int numTables);
@@ -2291,21 +2292,22 @@ GetPrivledges(char *s)
 {
    char       *acls = NULL;
 
-   /* Grant All           == arwR */
-   /* INSERT        == ar   */
-   /* UPDATE/DELETE ==  rw  */
-   /* SELECT        ==  r   */
-   /* RULE          ==    R */
+   /* Grant All     == arwR */
+   /* INSERT        == a   */
+   /* UPDATE/DELETE ==   */
+   /* SELECT        == r   */
+   /* RULE          == R   */
 
    if (strstr(s, "arwR"))
        return (strdup("ALL"));
 
-   if (strstr(s, "ar"))
+   if (strchr(s, 'a'))
        acls = AddAcl(acls, "INSERT");
 
-   if (strstr(s, "rw"))
+   if (strchr(s, 'w'))
        acls = AddAcl(acls, "UPDATE,DELETE");
-   else if (strchr(s, 'r'))
+
+   if (strchr(s, 'r'))
        acls = AddAcl(acls, "SELECT");
 
    if (strchr(s, 'R'))
@@ -2378,6 +2380,44 @@ ParseACL(const char *acls, int *count)
    *count = NumAcls;
    return (ParsedAcl);
 }
+/*
+ * dumpACL:
+ *    Write out grant/revoke information
+ *    Called for sequences and tables
+ */
+
+void
+dumpACL(FILE *fout, TableInfo tbinfo)
+{
+   int k, l;
+   ACL        *ACLlist;
+
+   ACLlist = ParseACL(tbinfo.relacl, &l);
+   if (ACLlist == (ACL *) NULL)
+       if (l == 0)
+           return;
+       else
+       {
+           fprintf(stderr, "Could not parse ACL list for %s...Exiting!\n",
+                   tbinfo.relname);
+           exit_nicely(g_conn);
+       }
+
+   /* Revoke Default permissions for PUBLIC */
+   fprintf(fout,
+           "REVOKE ALL on %s from PUBLIC;\n",
+           tbinfo.relname);
+
+   for (k = 0; k < l; k++)
+   {
+       if (ACLlist[k].privledges != (char *) NULL)
+           fprintf(fout,
+                   "GRANT %s on %s to %s;\n",
+                   ACLlist[k].privledges, tbinfo.relname,
+                   ACLlist[k].user);
+   }
+}
+
 
 /*
  * dumpTables:
@@ -2392,13 +2432,11 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 {
    int         i,
                j,
-               k,
-               l;
+               k;
    char        q[MAXQUERYLEN];
    char      **parentRels;     /* list of names of parent relations */
    int         numParents;
    int         actual_atts;    /* number of attrs in this CREATE statment */
-   ACL        *ACLlist;
 
    /* First - dump SEQUENCEs */
    for (i = 0; i < numTables; i++)
@@ -2409,6 +2447,8 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
        {
            fprintf(fout, "\\connect - %s\n", tblinfo[i].usename);
            dumpSequence(fout, tblinfo[i]);
+           if (acls)
+               dumpACL(fout, tblinfo[i]);
        }
    }
 
@@ -2505,36 +2545,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
            }
            strcat(q, ";\n");
            fputs(q, fout);
-
            if (acls)
-           {
-               ACLlist = ParseACL(tblinfo[i].relacl, &l);
-               if (ACLlist == (ACL *) NULL)
-               {
-                   if (l == 0)
-                       continue;
-                   else
-                   {
-                       fprintf(stderr, "Could not parse ACL list for %s...Exiting!\n",
-                               tblinfo[i].relname);
-                       exit_nicely(g_conn);
-                   }
-               }
+               dumpACL(fout, tblinfo[i]);
 
-               /* Revoke Default permissions for PUBLIC */
-               fprintf(fout,
-                       "REVOKE ALL on %s from PUBLIC;\n",
-                       tblinfo[i].relname);
-
-               for (k = 0; k < l; k++)
-               {
-                   if (ACLlist[k].privledges != (char *) NULL)
-                       fprintf(fout,
-                               "GRANT %s on %s to %s;\n",
-                               ACLlist[k].privledges, tblinfo[i].relname,
-                               ACLlist[k].user);
-               }
-           }
        }
    }
 }