Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit bf7b721

Browse files
committed
Re-add pg_dump fix.
1 parent e83621a commit bf7b721

File tree

1 file changed

+53
-40
lines changed

1 file changed

+53
-40
lines changed

src/bin/pg_dump/pg_dump.c

Lines changed: 53 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*
2222
*
2323
* IDENTIFICATION
24-
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.69 1998/04/07 22:00:37 momjian Exp $
24+
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.70 1998/04/07 22:36:38 momjian Exp $
2525
*
2626
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
2727
*
@@ -79,6 +79,7 @@
7979
#include "pg_dump.h"
8080

8181
static void dumpSequence(FILE *fout, TableInfo tbinfo);
82+
static void dumpACL(FILE *fout, TableInfo tbinfo);
8283
static void
8384
dumpTriggers(FILE *fout, const char *tablename,
8485
TableInfo *tblinfo, int numTables);
@@ -2291,21 +2292,22 @@ GetPrivledges(char *s)
22912292
{
22922293
char *acls = NULL;
22932294

2294-
/* Grant All == arwR */
2295-
/* INSERT == ar */
2296-
/* UPDATE/DELETE == rw */
2297-
/* SELECT == r */
2298-
/* RULE == R */
2295+
/* Grant All == arwR */
2296+
/* INSERT == a */
2297+
/* UPDATE/DELETE == w */
2298+
/* SELECT == r */
2299+
/* RULE == R */
22992300

23002301
if (strstr(s, "arwR"))
23012302
return (strdup("ALL"));
23022303

2303-
if (strstr(s, "ar"))
2304+
if (strchr(s, 'a'))
23042305
acls = AddAcl(acls, "INSERT");
23052306

2306-
if (strstr(s, "rw"))
2307+
if (strchr(s, 'w'))
23072308
acls = AddAcl(acls, "UPDATE,DELETE");
2308-
else if (strchr(s, 'r'))
2309+
2310+
if (strchr(s, 'r'))
23092311
acls = AddAcl(acls, "SELECT");
23102312

23112313
if (strchr(s, 'R'))
@@ -2378,6 +2380,44 @@ ParseACL(const char *acls, int *count)
23782380
*count = NumAcls;
23792381
return (ParsedAcl);
23802382
}
2383+
/*
2384+
* dumpACL:
2385+
* Write out grant/revoke information
2386+
* Called for sequences and tables
2387+
*/
2388+
2389+
void
2390+
dumpACL(FILE *fout, TableInfo tbinfo)
2391+
{
2392+
int k, l;
2393+
ACL *ACLlist;
2394+
2395+
ACLlist = ParseACL(tbinfo.relacl, &l);
2396+
if (ACLlist == (ACL *) NULL)
2397+
if (l == 0)
2398+
return;
2399+
else
2400+
{
2401+
fprintf(stderr, "Could not parse ACL list for %s...Exiting!\n",
2402+
tbinfo.relname);
2403+
exit_nicely(g_conn);
2404+
}
2405+
2406+
/* Revoke Default permissions for PUBLIC */
2407+
fprintf(fout,
2408+
"REVOKE ALL on %s from PUBLIC;\n",
2409+
tbinfo.relname);
2410+
2411+
for (k = 0; k < l; k++)
2412+
{
2413+
if (ACLlist[k].privledges != (char *) NULL)
2414+
fprintf(fout,
2415+
"GRANT %s on %s to %s;\n",
2416+
ACLlist[k].privledges, tbinfo.relname,
2417+
ACLlist[k].user);
2418+
}
2419+
}
2420+
23812421

23822422
/*
23832423
* dumpTables:
@@ -2392,13 +2432,11 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
23922432
{
23932433
int i,
23942434
j,
2395-
k,
2396-
l;
2435+
k;
23972436
char q[MAXQUERYLEN];
23982437
char **parentRels; /* list of names of parent relations */
23992438
int numParents;
24002439
int actual_atts; /* number of attrs in this CREATE statment */
2401-
ACL *ACLlist;
24022440

24032441
/* First - dump SEQUENCEs */
24042442
for (i = 0; i < numTables; i++)
@@ -2409,6 +2447,8 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
24092447
{
24102448
fprintf(fout, "\\connect - %s\n", tblinfo[i].usename);
24112449
dumpSequence(fout, tblinfo[i]);
2450+
if (acls)
2451+
dumpACL(fout, tblinfo[i]);
24122452
}
24132453
}
24142454

@@ -2505,36 +2545,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
25052545
}
25062546
strcat(q, ";\n");
25072547
fputs(q, fout);
2508-
25092548
if (acls)
2510-
{
2511-
ACLlist = ParseACL(tblinfo[i].relacl, &l);
2512-
if (ACLlist == (ACL *) NULL)
2513-
{
2514-
if (l == 0)
2515-
continue;
2516-
else
2517-
{
2518-
fprintf(stderr, "Could not parse ACL list for %s...Exiting!\n",
2519-
tblinfo[i].relname);
2520-
exit_nicely(g_conn);
2521-
}
2522-
}
2549+
dumpACL(fout, tblinfo[i]);
25232550

2524-
/* Revoke Default permissions for PUBLIC */
2525-
fprintf(fout,
2526-
"REVOKE ALL on %s from PUBLIC;\n",
2527-
tblinfo[i].relname);
2528-
2529-
for (k = 0; k < l; k++)
2530-
{
2531-
if (ACLlist[k].privledges != (char *) NULL)
2532-
fprintf(fout,
2533-
"GRANT %s on %s to %s;\n",
2534-
ACLlist[k].privledges, tblinfo[i].relname,
2535-
ACLlist[k].user);
2536-
}
2537-
}
25382551
}
25392552
}
25402553
}

0 commit comments

Comments
 (0)