Skip to content

Commit

Permalink
Merge pull request #204 from zalando/fix-pg-cron-default-nodename
Browse files Browse the repository at this point in the history
Raise an exception when the scheduling role cannot log in
  • Loading branch information
avaczi committed Jan 11, 2018
2 parents 8fcddb1 + d44f292 commit cfbde09
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions postgres-appliance/post_init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@ CREATE ROLE $1;
CREATE ROLE robot_zmon;
CREATE EXTENSION pg_cron;
ALTER TABLE cron.job ALTER COLUMN nodename SET DEFAULT '/var/run/postgresql';
ALTER POLICY cron_job_policy ON cron.job USING (username = current_user OR pg_has_role(current_user, 'admin', 'MEMBER') AND pg_has_role(username, 'admin', 'MEMBER') AND NOT EXISTS(SELECT 1 FROM pg_roles WHERE rolname = username AND rolsuper));
ALTER POLICY cron_job_policy ON cron.job USING (username = current_user OR
(pg_has_role(current_user, 'admin', 'MEMBER')
AND pg_has_role(username, 'admin', 'MEMBER')
AND NOT EXISTS(SELECT 1 FROM pg_roles WHERE rolname = username AND rolsuper)
));
REVOKE SELECT ON cron.job FROM public;
GRANT SELECT ON cron.job TO admin;
GRANT UPDATE (database) ON cron.job TO admin;
GRANT UPDATE (database, nodename) ON cron.job TO admin;
CREATE OR REPLACE FUNCTION cron.schedule(p_schedule text, p_database text, p_command text)
RETURNS bigint
Expand All @@ -18,8 +22,12 @@ AS \$function\$
DECLARE
l_jobid bigint;
BEGIN
IF NOT (SELECT rolcanlogin FROM pg_roles WHERE rolname = current_user)
THEN RAISE 'You cannot create a job using a role that cannot log in';
END IF;
SELECT schedule INTO l_jobid FROM cron.schedule(p_schedule, p_command);
UPDATE cron.job SET database = p_database WHERE jobid = l_jobid;
UPDATE cron.job SET database = p_database, nodename = '' WHERE jobid = l_jobid;
RETURN l_jobid;
END;
\$function\$;
Expand Down

0 comments on commit cfbde09

Please sign in to comment.