~ubuntu-branches/ubuntu/trusty/postgresql-8.4/trusty

« back to all changes in this revision

Viewing changes to src/backend/utils/adt/acl.c

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-07-11 16:59:35 UTC
  • mfrom: (5.1.1 karmic)
  • Revision ID: james.westby@ubuntu.com-20090711165935-jfwin6gfrxf0gfsi
Tags: 8.4.0-2
* debian/libpq-dev.install: Ship catalog/genbki.h. (Closes: #536139)
* debian/rules: Drop --enable-cassert for final release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 *
9
9
 *
10
10
 * IDENTIFICATION
11
 
 *        $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.147 2009/02/06 21:15:11 tgl Exp $
 
11
 *        $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.148 2009/06/11 14:49:03 momjian Exp $
12
12
 *
13
13
 *-------------------------------------------------------------------------
14
14
 */
84
84
 
85
85
static AclMode convert_priv_string(text *priv_type_text);
86
86
static AclMode convert_any_priv_string(text *priv_type_text,
87
 
                                                                           const priv_map *privileges);
 
87
                                                const priv_map *privileges);
88
88
 
89
89
static Oid      convert_table_name(text *tablename);
90
90
static AclMode convert_table_priv_string(text *priv_type_text);
386
386
Acl *
387
387
aclcopy(const Acl *orig_acl)
388
388
{
389
 
        Acl *result_acl;
 
389
        Acl                *result_acl;
390
390
 
391
391
        result_acl = allocacl(ACL_NUM(orig_acl));
392
392
 
406
406
Acl *
407
407
aclconcat(const Acl *left_acl, const Acl *right_acl)
408
408
{
409
 
        Acl *result_acl;
 
409
        Acl                *result_acl;
410
410
 
411
411
        result_acl = allocacl(ACL_NUM(left_acl) + ACL_NUM(right_acl));
412
412
 
1682
1682
convert_table_priv_string(text *priv_type_text)
1683
1683
{
1684
1684
        static const priv_map table_priv_map[] = {
1685
 
                { "SELECT", ACL_SELECT },
1686
 
                { "SELECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_SELECT) },
1687
 
                { "INSERT", ACL_INSERT },
1688
 
                { "INSERT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_INSERT) },
1689
 
                { "UPDATE", ACL_UPDATE },
1690
 
                { "UPDATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_UPDATE) },
1691
 
                { "DELETE", ACL_DELETE },
1692
 
                { "DELETE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_DELETE) },
1693
 
                { "TRUNCATE", ACL_TRUNCATE },
1694
 
                { "TRUNCATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_TRUNCATE) },
1695
 
                { "REFERENCES", ACL_REFERENCES },
1696
 
                { "REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES) },
1697
 
                { "TRIGGER", ACL_TRIGGER },
1698
 
                { "TRIGGER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_TRIGGER) },
1699
 
                { "RULE", 0 },                  /* ignore old RULE privileges */
1700
 
                { "RULE WITH GRANT OPTION", 0 },
1701
 
                { NULL, 0 }
 
1685
                {"SELECT", ACL_SELECT},
 
1686
                {"SELECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_SELECT)},
 
1687
                {"INSERT", ACL_INSERT},
 
1688
                {"INSERT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_INSERT)},
 
1689
                {"UPDATE", ACL_UPDATE},
 
1690
                {"UPDATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_UPDATE)},
 
1691
                {"DELETE", ACL_DELETE},
 
1692
                {"DELETE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_DELETE)},
 
1693
                {"TRUNCATE", ACL_TRUNCATE},
 
1694
                {"TRUNCATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_TRUNCATE)},
 
1695
                {"REFERENCES", ACL_REFERENCES},
 
1696
                {"REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES)},
 
1697
                {"TRIGGER", ACL_TRIGGER},
 
1698
                {"TRIGGER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_TRIGGER)},
 
1699
                {"RULE", 0},                    /* ignore old RULE privileges */
 
1700
                {"RULE WITH GRANT OPTION", 0},
 
1701
                {NULL, 0}
1702
1702
        };
1703
1703
 
1704
1704
        return convert_any_priv_string(priv_type_text, table_priv_map);
1928
1928
         * existence of the pg_class row before risking calling pg_class_aclcheck.
1929
1929
         * Note: it might seem there's a race condition against concurrent DROP,
1930
1930
         * but really it's safe because there will be no syscache flush between
1931
 
         * here and there.  So if we see the row in the syscache, so will
 
1931
         * here and there.      So if we see the row in the syscache, so will
1932
1932
         * pg_class_aclcheck.
1933
1933
         */
1934
1934
        if (!SearchSysCacheExists(RELOID,
2314
2314
convert_column_priv_string(text *priv_type_text)
2315
2315
{
2316
2316
        static const priv_map column_priv_map[] = {
2317
 
                { "SELECT", ACL_SELECT },
2318
 
                { "SELECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_SELECT) },
2319
 
                { "INSERT", ACL_INSERT },
2320
 
                { "INSERT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_INSERT) },
2321
 
                { "UPDATE", ACL_UPDATE },
2322
 
                { "UPDATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_UPDATE) },
2323
 
                { "REFERENCES", ACL_REFERENCES },
2324
 
                { "REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES) },
2325
 
                { NULL, 0 }
 
2317
                {"SELECT", ACL_SELECT},
 
2318
                {"SELECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_SELECT)},
 
2319
                {"INSERT", ACL_INSERT},
 
2320
                {"INSERT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_INSERT)},
 
2321
                {"UPDATE", ACL_UPDATE},
 
2322
                {"UPDATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_UPDATE)},
 
2323
                {"REFERENCES", ACL_REFERENCES},
 
2324
                {"REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES)},
 
2325
                {NULL, 0}
2326
2326
        };
2327
2327
 
2328
2328
        return convert_any_priv_string(priv_type_text, column_priv_map);
2524
2524
convert_database_priv_string(text *priv_type_text)
2525
2525
{
2526
2526
        static const priv_map database_priv_map[] = {
2527
 
                { "CREATE", ACL_CREATE },
2528
 
                { "CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
2529
 
                { "TEMPORARY", ACL_CREATE_TEMP },
2530
 
                { "TEMPORARY WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP) },
2531
 
                { "TEMP", ACL_CREATE_TEMP },
2532
 
                { "TEMP WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP) },
2533
 
                { "CONNECT", ACL_CONNECT },
2534
 
                { "CONNECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CONNECT) },
2535
 
                { NULL, 0 }
 
2527
                {"CREATE", ACL_CREATE},
 
2528
                {"CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
2529
                {"TEMPORARY", ACL_CREATE_TEMP},
 
2530
                {"TEMPORARY WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP)},
 
2531
                {"TEMP", ACL_CREATE_TEMP},
 
2532
                {"TEMP WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP)},
 
2533
                {"CONNECT", ACL_CONNECT},
 
2534
                {"CONNECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CONNECT)},
 
2535
                {NULL, 0}
2536
2536
        };
2537
2537
 
2538
2538
        return convert_any_priv_string(priv_type_text, database_priv_map);
2713
2713
convert_foreign_data_wrapper_priv_string(text *priv_type_text)
2714
2714
{
2715
2715
        static const priv_map foreign_data_wrapper_priv_map[] = {
2716
 
                { "USAGE", ACL_USAGE },
2717
 
                { "USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE) },
2718
 
                { NULL, 0 }
 
2716
                {"USAGE", ACL_USAGE},
 
2717
                {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)},
 
2718
                {NULL, 0}
2719
2719
        };
2720
2720
 
2721
2721
        return convert_any_priv_string(priv_type_text, foreign_data_wrapper_priv_map);
2919
2919
convert_function_priv_string(text *priv_type_text)
2920
2920
{
2921
2921
        static const priv_map function_priv_map[] = {
2922
 
                { "EXECUTE", ACL_EXECUTE },
2923
 
                { "EXECUTE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_EXECUTE) },
2924
 
                { NULL, 0 }
 
2922
                {"EXECUTE", ACL_EXECUTE},
 
2923
                {"EXECUTE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_EXECUTE)},
 
2924
                {NULL, 0}
2925
2925
        };
2926
2926
 
2927
2927
        return convert_any_priv_string(priv_type_text, function_priv_map);
3125
3125
convert_language_priv_string(text *priv_type_text)
3126
3126
{
3127
3127
        static const priv_map language_priv_map[] = {
3128
 
                { "USAGE", ACL_USAGE },
3129
 
                { "USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE) },
3130
 
                { NULL, 0 }
 
3128
                {"USAGE", ACL_USAGE},
 
3129
                {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)},
 
3130
                {NULL, 0}
3131
3131
        };
3132
3132
 
3133
3133
        return convert_any_priv_string(priv_type_text, language_priv_map);
3331
3331
convert_schema_priv_string(text *priv_type_text)
3332
3332
{
3333
3333
        static const priv_map schema_priv_map[] = {
3334
 
                { "CREATE", ACL_CREATE },
3335
 
                { "CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3336
 
                { "USAGE", ACL_USAGE },
3337
 
                { "USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE) },
3338
 
                { NULL, 0 }
 
3334
                {"CREATE", ACL_CREATE},
 
3335
                {"CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3336
                {"USAGE", ACL_USAGE},
 
3337
                {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)},
 
3338
                {NULL, 0}
3339
3339
        };
3340
3340
 
3341
3341
        return convert_any_priv_string(priv_type_text, schema_priv_map);
3515
3515
convert_server_priv_string(text *priv_type_text)
3516
3516
{
3517
3517
        static const priv_map server_priv_map[] = {
3518
 
                { "USAGE", ACL_USAGE },
3519
 
                { "USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE) },
3520
 
                { NULL, 0 }
 
3518
                {"USAGE", ACL_USAGE},
 
3519
                {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)},
 
3520
                {NULL, 0}
3521
3521
        };
3522
3522
 
3523
3523
        return convert_any_priv_string(priv_type_text, server_priv_map);
3705
3705
convert_tablespace_priv_string(text *priv_type_text)
3706
3706
{
3707
3707
        static const priv_map tablespace_priv_map[] = {
3708
 
                { "CREATE", ACL_CREATE },
3709
 
                { "CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3710
 
                { NULL, 0 }
 
3708
                {"CREATE", ACL_CREATE},
 
3709
                {"CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3710
                {NULL, 0}
3711
3711
        };
3712
3712
 
3713
3713
        return convert_any_priv_string(priv_type_text, tablespace_priv_map);
3881
3881
convert_role_priv_string(text *priv_type_text)
3882
3882
{
3883
3883
        static const priv_map role_priv_map[] = {
3884
 
                { "USAGE", ACL_USAGE },
3885
 
                { "MEMBER", ACL_CREATE },
3886
 
                { "USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3887
 
                { "USAGE WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3888
 
                { "MEMBER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3889
 
                { "MEMBER WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE) },
3890
 
                { NULL, 0 }
 
3884
                {"USAGE", ACL_USAGE},
 
3885
                {"MEMBER", ACL_CREATE},
 
3886
                {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3887
                {"USAGE WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3888
                {"MEMBER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3889
                {"MEMBER WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)},
 
3890
                {NULL, 0}
3891
3891
        };
3892
3892
 
3893
3893
        return convert_any_priv_string(priv_type_text, role_priv_map);