summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiroslav Lichvar <mlichvar@redhat.com>2014-04-26 18:27:33 +0200
committerAmadeusz Sławiński <amade@asmblr.net>2014-04-26 18:27:33 +0200
commitceb7b5121a9da505fdad35bccf0fe421f81b0fd2 (patch)
tree2aceb9b0938b3f0708096b942e822d024b543d27
parentd6d34f0b3b440423848063781d7a11b837d54761 (diff)
downloadscreen-ceb7b5121a9da505fdad35bccf0fe421f81b0fd2.tar.gz
Check return code from setgid/setuid.
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
-rw-r--r--src/attacher.c42
1 files changed, 28 insertions, 14 deletions
diff --git a/src/attacher.c b/src/attacher.c
index 85b90e0..8847d5d 100644
--- a/src/attacher.c
+++ b/src/attacher.c
@@ -185,8 +185,8 @@ int how;
if (ret == SIG_POWER_BYE)
{
int ppid;
- setgid(real_gid);
- setuid(real_uid);
+ if (setgid(real_gid) || setuid(real_uid))
+ Panic(errno, "setuid/gid");
if ((ppid = getppid()) > 1)
Kill(ppid, SIGHUP);
exit(0);
@@ -282,7 +282,10 @@ int how;
#ifdef MULTIUSER
if (!multiattach)
#endif
- setuid(real_uid);
+ {
+ if (setuid(real_uid))
+ Panic(errno, "setuid");
+ }
#if defined(MULTIUSER) && defined(USE_SETEUID)
else
{
@@ -290,7 +293,8 @@ int how;
xseteuid(real_uid); /* multi_uid, allow backend to send signals */
}
#endif
- setgid(real_gid);
+ if (setgid(real_gid))
+ Panic(errno, "setgid");
eff_uid = real_uid;
eff_gid = real_gid;
@@ -486,7 +490,8 @@ AttacherFinit SIGDEFARG
#ifdef MULTIUSER
if (tty_oldmode >= 0)
{
- setuid(own_uid);
+ if (setuid(own_uid))
+ Panic(errno, "setuid");
chmod(attach_tty, tty_oldmode);
}
#endif
@@ -504,11 +509,14 @@ AttacherFinitBye SIGDEFARG
if (multiattach)
exit(SIG_POWER_BYE);
#endif
- setgid(real_gid);
+ if (setgid(real_gid))
+ Panic(errno, "setgid");
#ifdef MULTIUSER
- setuid(own_uid);
+ if (setuid(own_uid))
+ Panic(errno, "setuid");
#else
- setuid(real_uid);
+ if (setuid(real_uid))
+ Panic(errno, "setuid");
#endif
/* we don't want to disturb init (even if we were root), eh? jw */
if ((ppid = getppid()) > 1)
@@ -679,11 +687,14 @@ static sigret_t
LockHup SIGDEFARG
{
int ppid = getppid();
- setgid(real_gid);
+ if (setgid(real_gid))
+ Panic(errno, "setgid");
#ifdef MULTIUSER
- setuid(own_uid);
+ if (setuid(own_uid))
+ Panic(errno, "setuid");
#else
- setuid(real_uid);
+ if (setuid(real_uid))
+ Panic(errno, "setuid");
#endif
if (ppid > 1)
Kill(ppid, SIGHUP);
@@ -710,11 +721,14 @@ LockTerminal()
if ((pid = fork()) == 0)
{
/* Child */
- setgid(real_gid);
+ if (setgid(real_gid))
+ Panic(errno, "setgid");
#ifdef MULTIUSER
- setuid(own_uid);
+ if (setuid(own_uid))
+ Panic(errno, "setuid");
#else
- setuid(real_uid); /* this should be done already */
+ if (setuid(real_uid)) /* this should be done already */
+ Panic(errno, "setuid");
#endif
closeallfiles(0); /* important: /etc/shadow may be open */
execl(prg, "SCREEN-LOCK", NULL);