diff --git a/Src/options.c b/Src/options.c index 590652ea9..e085af796 100644 --- a/Src/options.c +++ b/Src/options.c @@ -769,13 +769,23 @@ dosetopt(int optno, int value, int force, char *new_opts) } else if(optno == PRIVILEGED && !value) { /* unsetting PRIVILEGED causes the shell to make itself unprivileged */ #ifdef HAVE_SETUID - setuid(getuid()); - setgid(getgid()); + int uerr = 0, gerr = 0; + + if(setuid(getuid())) { + uerr = errno; + } + if(setgid(getgid())) { + gerr = errno; + } if (setuid(getuid())) { zwarn("failed to change user ID: %e", errno); + if (uerr) + zwarn("(error of additional preceding setuid() call: %e)", uerr); return -1; } else if (setgid(getgid())) { zwarn("failed to change group ID: %e", errno); + if (gerr) + zwarn("(error of additional preceding setgid() call: %e)", gerr); return -1; } #else