Files
galaxy/scripts/drmaa_external_killer.py
Nicola Soranzo 26a4e146e0 Fix UP031 errors
reported by ruff 0.8.0 .
2024-11-24 21:35:23 +00:00

61 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python
"""
Terminates a DRMAA job if given a job id and (appropriate) user id.
"""
import errno
import os
import pwd
import sys
import drmaa
def validate_parameters():
if len(sys.argv) < 3:
sys.stderr.write(f"usage: {sys.argv[0]} [job ID] [user uid]\n")
exit(1)
jobID = sys.argv[1]
uid = int(sys.argv[2])
return jobID, uid
def set_user(uid: int):
try:
gid = pwd.getpwuid(uid).pw_gid
os.setgid(gid)
os.setuid(uid)
except OSError as e:
if e.errno == errno.EPERM:
sys.stderr.write(
f"error: setuid({uid}) failed: permission denied. Did you setup 'sudo' correctly for this script?\n"
)
exit(1)
else:
pass
if os.getuid() == 0:
sys.stderr.write(
"error: UID is 0 (root) after changing user. This script should not be run as root. aborting.\n"
)
exit(1)
if os.geteuid() == 0:
sys.stderr.write(
"error: EUID is 0 (root) after changing user. This script should not be run as root. aborting.\n"
)
exit(1)
def main():
jobID, uid = validate_parameters()
set_user(uid)
s = drmaa.Session()
s.initialize()
s.control(jobID, drmaa.JobControlAction.TERMINATE)
s.exit()
if __name__ == "__main__":
main()