32
32
33
33
#define UINT32_ACCESS_ONCE (var ) ((uint32)(*((volatile uint32 *)&(var))))
34
34
35
+ #define HAS_PGSTAT_PERMISSIONS (role ) (is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))
36
+
35
37
/* Global bgwriter statistics, from bgwriter.c */
36
38
extern PgStat_MsgBgWriter bgwriterStats ;
37
39
@@ -513,7 +515,7 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
513
515
values [1 ]= ObjectIdGetDatum (beentry -> st_databaseid );
514
516
515
517
/* show rest of the values including relid only to role members */
516
- if (has_privs_of_role ( GetUserId (), beentry -> st_userid ))
518
+ if (HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
517
519
{
518
520
values [2 ]= ObjectIdGetDatum (beentry -> st_progress_command_target );
519
521
for (i = 0 ;i < PGSTAT_NUM_PROGRESS_PARAM ;i ++ )
@@ -661,8 +663,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
661
663
}
662
664
663
665
/* Values only available to role member or pg_read_all_stats */
664
- if (has_privs_of_role (GetUserId (),beentry -> st_userid )||
665
- is_member_of_role (GetUserId (),DEFAULT_ROLE_READ_ALL_STATS ))
666
+ if (HAS_PGSTAT_PERMISSIONS (beentry -> st_userid ))
666
667
{
667
668
SockAddr zero_clientaddr ;
668
669
char * clipped_activity ;
@@ -932,7 +933,7 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
932
933
933
934
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
934
935
activity = "<backend information not available>" ;
935
- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
936
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
936
937
activity = "<insufficient privilege>" ;
937
938
else if (* (beentry -> st_activity_raw )== '\0' )
938
939
activity = "<command string not enabled>" ;
@@ -956,7 +957,7 @@ pg_stat_get_backend_wait_event_type(PG_FUNCTION_ARGS)
956
957
957
958
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
958
959
wait_event_type = "<backend information not available>" ;
959
- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
960
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
960
961
wait_event_type = "<insufficient privilege>" ;
961
962
else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
962
963
wait_event_type = pgstat_get_wait_event_type (proc -> wait_event_info );
@@ -977,7 +978,7 @@ pg_stat_get_backend_wait_event(PG_FUNCTION_ARGS)
977
978
978
979
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
979
980
wait_event = "<backend information not available>" ;
980
- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
981
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
981
982
wait_event = "<insufficient privilege>" ;
982
983
else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
983
984
wait_event = pgstat_get_wait_event (proc -> wait_event_info );
@@ -999,7 +1000,7 @@ pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
999
1000
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
1000
1001
PG_RETURN_NULL ();
1001
1002
1002
- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1003
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
1003
1004
PG_RETURN_NULL ();
1004
1005
1005
1006
result = beentry -> st_activity_start_timestamp ;
@@ -1025,7 +1026,7 @@ pg_stat_get_backend_xact_start(PG_FUNCTION_ARGS)
1025
1026
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
1026
1027
PG_RETURN_NULL ();
1027
1028
1028
- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1029
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
1029
1030
PG_RETURN_NULL ();
1030
1031
1031
1032
result = beentry -> st_xact_start_timestamp ;
@@ -1047,7 +1048,7 @@ pg_stat_get_backend_start(PG_FUNCTION_ARGS)
1047
1048
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
1048
1049
PG_RETURN_NULL ();
1049
1050
1050
- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1051
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
1051
1052
PG_RETURN_NULL ();
1052
1053
1053
1054
result = beentry -> st_proc_start_timestamp ;
@@ -1071,7 +1072,7 @@ pg_stat_get_backend_client_addr(PG_FUNCTION_ARGS)
1071
1072
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
1072
1073
PG_RETURN_NULL ();
1073
1074
1074
- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1075
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
1075
1076
PG_RETURN_NULL ();
1076
1077
1077
1078
/* A zeroed client addr means we don't know */
@@ -1118,7 +1119,7 @@ pg_stat_get_backend_client_port(PG_FUNCTION_ARGS)
1118
1119
if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
1119
1120
PG_RETURN_NULL ();
1120
1121
1121
- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1122
+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
1122
1123
PG_RETURN_NULL ();
1123
1124
1124
1125
/* A zeroed client addr means we don't know */