import patch to fix euid_set bug in shepherd

This commit is contained in:
Kasper D. Fischer 2021-05-25 11:26:32 +02:00
parent 28da7979a1
commit a5963b445b

View File

@ -0,0 +1,33 @@
diff --git a/source/daemons/shepherd/shepherd.c b/source/daemons/shepherd/shepherd.c
index 5af1463..e7b2831 100644
--- a/source/daemons/shepherd/shepherd.c
+++ b/source/daemons/shepherd/shepherd.c
@@ -299,17 +299,24 @@ static int handle_io_file(const char* file, const char* owner, bool rw) {
}
}
- /* reset egid and euid to the stored values */
- if (sge_seteuid(old_euid) != 0) {
- shepherd_trace("Cannot reset euid %s due to %s", owner, strerror(errno));
- SGE_CLOSE(fd);
+ /* set effective user-id to root again, because only root is allowed to change
+ * the euid to any other than the current user-id. */
+ if (sge_seteuid(SGE_SUPERUSER_UID) != 0) {
+ shepherd_trace("Cannot become root due to %s", strerror(errno));
return -1;
}
+
+ /* reset egid and euid to the stored values (e.g. those of the sgeadmin user) */
if (sge_setegid(old_egid) != 0) {
shepherd_trace("Cannot reset egid %s due to %s", owner, strerror(errno));
SGE_CLOSE(fd);
return -1;
}
+ if (sge_seteuid(old_euid) != 0) {
+ shepherd_trace("Cannot reset euid %s due to %s", owner, strerror(errno));
+ SGE_CLOSE(fd);
+ return -1;
+ }
return fd;
}