@@ -111,6 +111,19 @@ CREATE TYPE schedule.cron_job AS(
111
111
-- FUNCTIONS --
112
112
-- -------------
113
113
114
+ CREATE FUNCTION schedule .onlySuperUser() RETURNSboolean AS
115
+ $BODY$
116
+ DECLARE
117
+ is_superuserboolean ;
118
+ BEGIN
119
+ EXECUTE' SELECT rolsuper FROM pg_roles WHERE rolname = session_user'
120
+ INTO is_superuser;
121
+ IF NOT is_superuser THEN
122
+ RAISE EXCEPTION' access denied' ;
123
+ END IF;
124
+ END
125
+ $BODY$ LANGUAGE plpgsql;
126
+
114
127
CREATE FUNCTION schedule .on_cron_update() RETURNS TRIGGER
115
128
AS $BODY$
116
129
DECLARE
@@ -148,8 +161,8 @@ BEGIN
148
161
RAISE EXCEPTION' there is no such job with id %' , jobId;
149
162
WHEN TOO_MANY_ROWS THEN
150
163
RAISE EXCEPTION' there are more than one job with id %' , jobId;
151
- END;
152
- EXECUTE' SELECTusesuper FROMpg_user WHEREusename = session_user'
164
+ END;
165
+ EXECUTE' SELECTrolsuper FROMpg_roles WHERErolname = session_user'
153
166
INTO is_superuser;
154
167
IF is_superuser THEN
155
168
RETURN true;
@@ -306,7 +319,7 @@ BEGIN
306
319
IF params?' run_as' AND params- >> ' run_as' <> session_user THEN
307
320
executor := params- >> ' run_as' ;
308
321
BEGIN
309
- SELECT * INTO STRICT recFROM pg_user WHERE usename = executor;
322
+ SELECT * INTO STRICT recFROM pg_roles WHERE rolname = executor;
310
323
EXCEPTION
311
324
WHEN NO_DATA_FOUND THEN
312
325
RAISE EXCEPTION' there is no such user %' , executor;
@@ -703,14 +716,9 @@ LANGUAGE plpgsql;
703
716
CREATE FUNCTION schedule .clean_log() RETURNSINT AS
704
717
$BODY$
705
718
DECLARE
706
- is_superuserboolean ;
707
719
cntinteger ;
708
720
BEGIN
709
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
710
- INTO is_superuser;
711
- IF NOT is_superuser THEN
712
- RAISE EXCEPTION' access denied' ;
713
- END IF;
721
+ SELECT onlySuperUser();
714
722
715
723
WITH aAS (DELETE FROM schedule .log RETURNING1 )
716
724
SELECT count (* ) INTO cntFROM a;
@@ -742,13 +750,8 @@ $BODY$
742
750
DECLARE
743
751
iischedule .cron ;
744
752
ooschedule .cron_rec ;
745
- is_superuserboolean ;
746
753
BEGIN
747
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
748
- INTO is_superuser;
749
- IF NOT is_superuser THEN
750
- RAISE EXCEPTION' access denied: only superuser allowed' ;
751
- END IF;
754
+ SELECT onlySuperUser();
752
755
753
756
FOR iiIN SELECT * FROM schedule .cron LOOP
754
757
oo := schedule ._make_cron_rec (ii);
@@ -781,14 +784,9 @@ $BODY$
781
784
DECLARE
782
785
iischedule .cron ;
783
786
ooschedule .cron_rec ;
784
- is_superuserboolean ;
785
787
BEGIN
786
788
IF usename<> session_user THEN
787
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
788
- INTO is_superuser;
789
- IF NOT is_superuser THEN
790
- RAISE EXCEPTION' access denied' ;
791
- END IF;
789
+ SELECT onlySuperUser();
792
790
END IF;
793
791
794
792
FOR iiIN SELECT * FROM schedule .cron WHERE owner= usename LOOP
@@ -822,14 +820,9 @@ $BODY$
822
820
DECLARE
823
821
iischedule .cron ;
824
822
ooschedule .cron_rec ;
825
- is_superuserboolean ;
826
823
BEGIN
827
824
IF usename<> session_user THEN
828
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
829
- INTO is_superuser;
830
- IF NOT is_superuser THEN
831
- RAISE EXCEPTION' access denied' ;
832
- END IF;
825
+ SELECT onlySuperUser();
833
826
END IF;
834
827
835
828
FOR iiIN SELECT * FROM schedule .cron WHERE executor= usename LOOP
@@ -847,7 +840,6 @@ $BODY$
847
840
DECLARE
848
841
ii record;
849
842
ooschedule .cron_job ;
850
- is_superuserboolean ;
851
843
BEGIN
852
844
FOR iiIN SELECT * FROM schedule .at as at,schedule .cron as cronWHERE cron .executor = session_user AND cron .id = at .cron AND at .active LOOP
853
845
oo .cron = ii .id ;
@@ -882,13 +874,8 @@ $BODY$
882
874
DECLARE
883
875
ii record;
884
876
ooschedule .cron_job ;
885
- is_superuserboolean ;
886
877
BEGIN
887
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
888
- INTO is_superuser;
889
- IF NOT is_superuser THEN
890
- RAISE EXCEPTION' access denied' ;
891
- END IF;
878
+ SELECT onlySuperUser();
892
879
FOR iiIN SELECT * FROM schedule .at as at,schedule .cron as cronWHERE cron .id = at .cron AND at .active LOOP
893
880
oo .cron = ii .id ;
894
881
oo .node = ii .node ;
@@ -922,14 +909,9 @@ $BODY$
922
909
DECLARE
923
910
ii record;
924
911
ooschedule .cron_job ;
925
- is_superuserboolean ;
926
912
BEGIN
927
913
IF usename<> session_user THEN
928
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
929
- INTO is_superuser;
930
- IF NOT is_superuser THEN
931
- RAISE EXCEPTION' access denied' ;
932
- END IF;
914
+ SELECT onlySuperUser();
933
915
END IF;
934
916
935
917
FOR iiIN SELECT * FROM schedule .at as at,schedule .cron as cronWHERE cron .executor = usenameAND cron .id = at .cron AND at .active LOOP
@@ -983,15 +965,10 @@ $BODY$
983
965
DECLARE
984
966
ii record;
985
967
ooschedule .cron_job ;
986
- is_superuserboolean ;
987
968
sql_cmdtext ;
988
969
BEGIN
989
970
IF usename<> session_user THEN
990
- EXECUTE' SELECT usesuper FROM pg_user WHERE usename = session_user'
991
- INTO is_superuser;
992
- IF NOT is_superuser THEN
993
- RAISE EXCEPTION' access denied' ;
994
- END IF;
971
+ SELECT onlySuperUser();
995
972
END IF;
996
973
997
974
IF usename= ' ___all___' THEN