21
21
*
22
22
*
23
23
* 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 $
25
25
*
26
26
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
27
27
*
79
79
#include "pg_dump.h"
80
80
81
81
static void dumpSequence (FILE * fout , TableInfo tbinfo );
82
+ static void dumpACL (FILE * fout , TableInfo tbinfo );
82
83
static void
83
84
dumpTriggers (FILE * fout , const char * tablename ,
84
85
TableInfo * tblinfo , int numTables );
@@ -2291,21 +2292,22 @@ GetPrivledges(char *s)
2291
2292
{
2292
2293
char * acls = NULL ;
2293
2294
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 */
2299
2300
2300
2301
if (strstr (s , "arwR" ))
2301
2302
return (strdup ("ALL" ));
2302
2303
2303
- if (strstr (s , "ar" ))
2304
+ if (strchr (s , 'a' ))
2304
2305
acls = AddAcl (acls , "INSERT" );
2305
2306
2306
- if (strstr (s , "rw" ))
2307
+ if (strchr (s , 'w' ))
2307
2308
acls = AddAcl (acls , "UPDATE,DELETE" );
2308
- else if (strchr (s , 'r' ))
2309
+
2310
+ if (strchr (s , 'r' ))
2309
2311
acls = AddAcl (acls , "SELECT" );
2310
2312
2311
2313
if (strchr (s , 'R' ))
@@ -2378,6 +2380,44 @@ ParseACL(const char *acls, int *count)
2378
2380
* count = NumAcls ;
2379
2381
return (ParsedAcl );
2380
2382
}
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
+
2381
2421
2382
2422
/*
2383
2423
* dumpTables:
@@ -2392,13 +2432,11 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
2392
2432
{
2393
2433
int i ,
2394
2434
j ,
2395
- k ,
2396
- l ;
2435
+ k ;
2397
2436
char q [MAXQUERYLEN ];
2398
2437
char * * parentRels ; /* list of names of parent relations */
2399
2438
int numParents ;
2400
2439
int actual_atts ; /* number of attrs in this CREATE statment */
2401
- ACL * ACLlist ;
2402
2440
2403
2441
/* First - dump SEQUENCEs */
2404
2442
for (i = 0 ; i < numTables ; i ++ )
@@ -2409,6 +2447,8 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
2409
2447
{
2410
2448
fprintf (fout , "\\connect - %s\n" , tblinfo [i ].usename );
2411
2449
dumpSequence (fout , tblinfo [i ]);
2450
+ if (acls )
2451
+ dumpACL (fout , tblinfo [i ]);
2412
2452
}
2413
2453
}
2414
2454
@@ -2505,36 +2545,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
2505
2545
}
2506
2546
strcat (q , ";\n" );
2507
2547
fputs (q , fout );
2508
-
2509
2548
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 ]);
2523
2550
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
- }
2538
2551
}
2539
2552
}
2540
2553
}
0 commit comments