]> granicus.if.org Git - postgresql/commitdiff
Re-add pg_dump fix.
authorBruce Momjian <bruce@momjian.us>
Tue, 7 Apr 1998 22:36:38 +0000 (22:36 +0000)
committerBruce Momjian <bruce@momjian.us>
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 - dave@bensoft.com - 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);
-                               }
-                       }
                }
        }
 }