import patch to fix euid_set bug in shepherd
This commit is contained in:
parent
28da7979a1
commit
a5963b445b
33
patch/fix_euid_set_bug.patch
Normal file
33
patch/fix_euid_set_bug.patch
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user