@@ -113,6 +113,7 @@ static AclMode convert_role_priv_string(text *priv_type_text);
113113static AclResult pg_role_aclcheck (Oid role_oid , Oid roleid , AclMode mode );
114114
115115static void RoleMembershipCacheCallback (Datum arg , int cacheid , ItemPointer tuplePtr );
116+ static Oid get_role_oid_or_public (const char * rolname );
116117
117118
118119/*
@@ -1791,7 +1792,7 @@ has_table_privilege_name_name(PG_FUNCTION_ARGS)
17911792 AclMode mode ;
17921793 AclResult aclresult ;
17931794
1794- roleid = get_role_oid (NameStr (* rolename ), false );
1795+ roleid = get_role_oid_or_public (NameStr (* rolename ));
17951796 tableoid = convert_table_name (tablename );
17961797 mode = convert_table_priv_string (priv_type_text );
17971798
@@ -1840,7 +1841,7 @@ has_table_privilege_name_id(PG_FUNCTION_ARGS)
18401841 AclMode mode ;
18411842 AclResult aclresult ;
18421843
1843- roleid = get_role_oid (NameStr (* username ), false );
1844+ roleid = get_role_oid_or_public (NameStr (* username ));
18441845 mode = convert_table_priv_string (priv_type_text );
18451846
18461847 if (!SearchSysCacheExists1 (RELOID , ObjectIdGetDatum (tableoid )))
@@ -1998,7 +1999,7 @@ has_sequence_privilege_name_name(PG_FUNCTION_ARGS)
19981999 AclMode mode ;
19992000 AclResult aclresult ;
20002001
2001- roleid = get_role_oid (NameStr (* rolename ), false );
2002+ roleid = get_role_oid_or_public (NameStr (* rolename ));
20022003 mode = convert_sequence_priv_string (priv_type_text );
20032004 sequenceoid = convert_table_name (sequencename );
20042005 if (get_rel_relkind (sequenceoid ) != RELKIND_SEQUENCE )
@@ -2058,7 +2059,7 @@ has_sequence_privilege_name_id(PG_FUNCTION_ARGS)
20582059 AclResult aclresult ;
20592060 char relkind ;
20602061
2061- roleid = get_role_oid (NameStr (* username ), false );
2062+ roleid = get_role_oid_or_public (NameStr (* username ));
20622063 mode = convert_sequence_priv_string (priv_type_text );
20632064 relkind = get_rel_relkind (sequenceoid );
20642065 if (relkind == '\0' )
@@ -2209,7 +2210,7 @@ has_any_column_privilege_name_name(PG_FUNCTION_ARGS)
22092210 AclMode mode ;
22102211 AclResult aclresult ;
22112212
2212- roleid = get_role_oid (NameStr (* rolename ), false );
2213+ roleid = get_role_oid_or_public (NameStr (* rolename ));
22132214 tableoid = convert_table_name (tablename );
22142215 mode = convert_column_priv_string (priv_type_text );
22152216
@@ -2266,7 +2267,7 @@ has_any_column_privilege_name_id(PG_FUNCTION_ARGS)
22662267 AclMode mode ;
22672268 AclResult aclresult ;
22682269
2269- roleid = get_role_oid (NameStr (* username ), false );
2270+ roleid = get_role_oid_or_public (NameStr (* username ));
22702271 mode = convert_column_priv_string (priv_type_text );
22712272
22722273 if (!SearchSysCacheExists1 (RELOID , ObjectIdGetDatum (tableoid )))
@@ -2451,7 +2452,7 @@ has_column_privilege_name_name_name(PG_FUNCTION_ARGS)
24512452 AclMode mode ;
24522453 int privresult ;
24532454
2454- roleid = get_role_oid (NameStr (* rolename ), false );
2455+ roleid = get_role_oid_or_public (NameStr (* rolename ));
24552456 tableoid = convert_table_name (tablename );
24562457 colattnum = convert_column_name (tableoid , column );
24572458 mode = convert_column_priv_string (priv_type_text );
@@ -2479,7 +2480,7 @@ has_column_privilege_name_name_attnum(PG_FUNCTION_ARGS)
24792480 AclMode mode ;
24802481 int privresult ;
24812482
2482- roleid = get_role_oid (NameStr (* rolename ), false );
2483+ roleid = get_role_oid_or_public (NameStr (* rolename ));
24832484 tableoid = convert_table_name (tablename );
24842485 mode = convert_column_priv_string (priv_type_text );
24852486
@@ -2506,7 +2507,7 @@ has_column_privilege_name_id_name(PG_FUNCTION_ARGS)
25062507 AclMode mode ;
25072508 int privresult ;
25082509
2509- roleid = get_role_oid (NameStr (* username ), false );
2510+ roleid = get_role_oid_or_public (NameStr (* username ));
25102511 colattnum = convert_column_name (tableoid , column );
25112512 mode = convert_column_priv_string (priv_type_text );
25122513
@@ -2532,7 +2533,7 @@ has_column_privilege_name_id_attnum(PG_FUNCTION_ARGS)
25322533 AclMode mode ;
25332534 int privresult ;
25342535
2535- roleid = get_role_oid (NameStr (* username ), false );
2536+ roleid = get_role_oid_or_public (NameStr (* username ));
25362537 mode = convert_column_priv_string (priv_type_text );
25372538
25382539 privresult = column_privilege_check (tableoid , colattnum , roleid , mode );
@@ -2823,7 +2824,7 @@ has_database_privilege_name_name(PG_FUNCTION_ARGS)
28232824 AclMode mode ;
28242825 AclResult aclresult ;
28252826
2826- roleid = get_role_oid (NameStr (* username ), false );
2827+ roleid = get_role_oid_or_public (NameStr (* username ));
28272828 databaseoid = convert_database_name (databasename );
28282829 mode = convert_database_priv_string (priv_type_text );
28292830
@@ -2872,7 +2873,7 @@ has_database_privilege_name_id(PG_FUNCTION_ARGS)
28722873 AclMode mode ;
28732874 AclResult aclresult ;
28742875
2875- roleid = get_role_oid (NameStr (* username ), false );
2876+ roleid = get_role_oid_or_public (NameStr (* username ));
28762877 mode = convert_database_priv_string (priv_type_text );
28772878
28782879 if (!SearchSysCacheExists1 (DATABASEOID , ObjectIdGetDatum (databaseoid )))
@@ -3021,7 +3022,7 @@ has_foreign_data_wrapper_privilege_name_name(PG_FUNCTION_ARGS)
30213022 AclMode mode ;
30223023 AclResult aclresult ;
30233024
3024- roleid = get_role_oid (NameStr (* username ), false );
3025+ roleid = get_role_oid_or_public (NameStr (* username ));
30253026 fdwid = convert_foreign_data_wrapper_name (fdwname );
30263027 mode = convert_foreign_data_wrapper_priv_string (priv_type_text );
30273028
@@ -3070,7 +3071,7 @@ has_foreign_data_wrapper_privilege_name_id(PG_FUNCTION_ARGS)
30703071 AclMode mode ;
30713072 AclResult aclresult ;
30723073
3073- roleid = get_role_oid (NameStr (* username ), false );
3074+ roleid = get_role_oid_or_public (NameStr (* username ));
30743075 mode = convert_foreign_data_wrapper_priv_string (priv_type_text );
30753076
30763077 aclresult = pg_foreign_data_wrapper_aclcheck (fdwid , roleid , mode );
@@ -3203,7 +3204,7 @@ has_function_privilege_name_name(PG_FUNCTION_ARGS)
32033204 AclMode mode ;
32043205 AclResult aclresult ;
32053206
3206- roleid = get_role_oid (NameStr (* username ), false );
3207+ roleid = get_role_oid_or_public (NameStr (* username ));
32073208 functionoid = convert_function_name (functionname );
32083209 mode = convert_function_priv_string (priv_type_text );
32093210
@@ -3252,7 +3253,7 @@ has_function_privilege_name_id(PG_FUNCTION_ARGS)
32523253 AclMode mode ;
32533254 AclResult aclresult ;
32543255
3255- roleid = get_role_oid (NameStr (* username ), false );
3256+ roleid = get_role_oid_or_public (NameStr (* username ));
32563257 mode = convert_function_priv_string (priv_type_text );
32573258
32583259 if (!SearchSysCacheExists1 (PROCOID , ObjectIdGetDatum (functionoid )))
@@ -3403,7 +3404,7 @@ has_language_privilege_name_name(PG_FUNCTION_ARGS)
34033404 AclMode mode ;
34043405 AclResult aclresult ;
34053406
3406- roleid = get_role_oid (NameStr (* username ), false );
3407+ roleid = get_role_oid_or_public (NameStr (* username ));
34073408 languageoid = convert_language_name (languagename );
34083409 mode = convert_language_priv_string (priv_type_text );
34093410
@@ -3452,7 +3453,7 @@ has_language_privilege_name_id(PG_FUNCTION_ARGS)
34523453 AclMode mode ;
34533454 AclResult aclresult ;
34543455
3455- roleid = get_role_oid (NameStr (* username ), false );
3456+ roleid = get_role_oid_or_public (NameStr (* username ));
34563457 mode = convert_language_priv_string (priv_type_text );
34573458
34583459 if (!SearchSysCacheExists1 (LANGOID , ObjectIdGetDatum (languageoid )))
@@ -3594,7 +3595,7 @@ has_schema_privilege_name_name(PG_FUNCTION_ARGS)
35943595 AclMode mode ;
35953596 AclResult aclresult ;
35963597
3597- roleid = get_role_oid (NameStr (* username ), false );
3598+ roleid = get_role_oid_or_public (NameStr (* username ));
35983599 schemaoid = convert_schema_name (schemaname );
35993600 mode = convert_schema_priv_string (priv_type_text );
36003601
@@ -3643,7 +3644,7 @@ has_schema_privilege_name_id(PG_FUNCTION_ARGS)
36433644 AclMode mode ;
36443645 AclResult aclresult ;
36453646
3646- roleid = get_role_oid (NameStr (* username ), false );
3647+ roleid = get_role_oid_or_public (NameStr (* username ));
36473648 mode = convert_schema_priv_string (priv_type_text );
36483649
36493650 if (!SearchSysCacheExists1 (NAMESPACEOID , ObjectIdGetDatum (schemaoid )))
@@ -3787,7 +3788,7 @@ has_server_privilege_name_name(PG_FUNCTION_ARGS)
37873788 AclMode mode ;
37883789 AclResult aclresult ;
37893790
3790- roleid = get_role_oid (NameStr (* username ), false );
3791+ roleid = get_role_oid_or_public (NameStr (* username ));
37913792 serverid = convert_server_name (servername );
37923793 mode = convert_server_priv_string (priv_type_text );
37933794
@@ -3836,7 +3837,7 @@ has_server_privilege_name_id(PG_FUNCTION_ARGS)
38363837 AclMode mode ;
38373838 AclResult aclresult ;
38383839
3839- roleid = get_role_oid (NameStr (* username ), false );
3840+ roleid = get_role_oid_or_public (NameStr (* username ));
38403841 mode = convert_server_priv_string (priv_type_text );
38413842
38423843 aclresult = pg_foreign_server_aclcheck (serverid , roleid , mode );
@@ -3969,7 +3970,7 @@ has_tablespace_privilege_name_name(PG_FUNCTION_ARGS)
39693970 AclMode mode ;
39703971 AclResult aclresult ;
39713972
3972- roleid = get_role_oid (NameStr (* username ), false );
3973+ roleid = get_role_oid_or_public (NameStr (* username ));
39733974 tablespaceoid = convert_tablespace_name (tablespacename );
39743975 mode = convert_tablespace_priv_string (priv_type_text );
39753976
@@ -4018,7 +4019,7 @@ has_tablespace_privilege_name_id(PG_FUNCTION_ARGS)
40184019 AclMode mode ;
40194020 AclResult aclresult ;
40204021
4021- roleid = get_role_oid (NameStr (* username ), false );
4022+ roleid = get_role_oid_or_public (NameStr (* username ));
40224023 mode = convert_tablespace_priv_string (priv_type_text );
40234024
40244025 aclresult = pg_tablespace_aclcheck (tablespaceoid , roleid , mode );
@@ -4821,3 +4822,16 @@ get_role_oid(const char *rolname, bool missing_ok)
48214822 errmsg ("role \"%s\" does not exist" , rolname )));
48224823 return oid ;
48234824}
4825+
4826+ /*
4827+ * get_role_oid_or_public - As above, but return ACL_ID_PUBLIC if the
4828+ * role name is "public".
4829+ */
4830+ static Oid
4831+ get_role_oid_or_public (const char * rolname )
4832+ {
4833+ if (strcmp (rolname , "public" ) == 0 )
4834+ return ACL_ID_PUBLIC ;
4835+
4836+ return get_role_oid (rolname , false);
4837+ }
0 commit comments