@ -6930,15 +6930,15 @@ SetConfigOption(const char *name, const char *value,
* this cannot be distinguished from a string variable with a NULL value ! ) ,
* otherwise throw an ereport and don ' t return .
*
* If restrict_superuser is true , we also enforce that only superusers c an
* see GUC_SUPERUSER_ONLY variables . This should only be passed as true
* in user - driven calls .
* If restrict_privileged is true , we also enforce that only superusers and
* members of the pg_read_all_settings role can see GUC_SUPERUSER_ONLY
* variables . This should only be passed as true in user - driven calls .
*
* The string is * not * allocated for modification and is really only
* valid until the next call to configuration related functions .
*/
const char *
GetConfigOption ( const char * name , bool missing_ok , bool restrict_superuser )
GetConfigOption ( const char * name , bool missing_ok , bool restrict_privileged )
{
struct config_generic * record ;
static char buffer [ 256 ] ;
@ -6953,7 +6953,7 @@ GetConfigOption(const char *name, bool missing_ok, bool restrict_superuser)
errmsg ( " unrecognized configuration parameter \" %s \" " ,
name ) ) ) ;
}
if ( restrict_superuser & &
if ( restrict_privileged & &
( record - > flags & GUC_SUPERUSER_ONLY ) & &
! is_member_of_role ( GetUserId ( ) , DEFAULT_ROLE_READ_ALL_SETTINGS ) )
ereport ( ERROR ,
@ -8242,7 +8242,6 @@ ShowGUCConfigOption(const char *name, DestReceiver *dest)
static void
ShowAllGUCConfig ( DestReceiver * dest )
{
bool am_superuser = superuser ( ) ;
int i ;
TupOutputState * tstate ;
TupleDesc tupdesc ;
@ -8267,7 +8266,8 @@ ShowAllGUCConfig(DestReceiver *dest)
char * setting ;
if ( ( conf - > flags & GUC_NO_SHOW_ALL ) | |
( ( conf - > flags & GUC_SUPERUSER_ONLY ) & & ! am_superuser ) )
( ( conf - > flags & GUC_SUPERUSER_ONLY ) & &
! is_member_of_role ( GetUserId ( ) , DEFAULT_ROLE_READ_ALL_SETTINGS ) ) )
continue ;
/* assign to the values array */
@ -8593,9 +8593,10 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
/*
* If the setting came from a config file , set the source location . For
* security reasons , we don ' t show source file / line number for
* non - super users.
* insufficiently - privileged users .
*/
if ( conf - > source = = PGC_S_FILE & & superuser ( ) )
if ( conf - > source = = PGC_S_FILE & &
is_member_of_role ( GetUserId ( ) , DEFAULT_ROLE_READ_ALL_SETTINGS ) )
{
values [ 14 ] = conf - > sourcefile ;
snprintf ( buffer , sizeof ( buffer ) , " %d " , conf - > sourceline ) ;