diff --git a/ChangeLog b/ChangeLog index c4994ab0..3119ade3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-12-26 Nicolas François + + Merge Debian's patch 496_login_init_session + * src/login.c, src/sulogin.c: If started as init, start a new session. + 2007-12-26 Nicolas François Merge Debian's patch 408_passwd_check_arguments diff --git a/NEWS b/NEWS index 6334d05d..45e2b9e3 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,10 @@ shadow-4.1.0 -> shadow-4.1.1 UNRELEASED user-, user1-user2). - passwd * Make sure that no more than one username argument was provided. +- su + * If started as init, start a new session. +- sulogin + * If started as init, start a new session. shadow-4.0.18.2 -> shadow-4.1.0 09-12-2008 diff --git a/src/login.c b/src/login.c index 8deb992c..e08f448c 100644 --- a/src/login.c +++ b/src/login.c @@ -41,6 +41,7 @@ #include #include #include +#include #include "defines.h" #include "faillog.h" #include "failure.h" @@ -1039,6 +1040,12 @@ int main (int argc, char **argv) } /* child */ #endif + /* If we were init, we need to start a new session */ + if (getppid() == 1) { + setsid(); + if (ioctl(0, TIOCSCTTY, 1)) + fprintf(stderr,_("TIOCSCTTY failed on %s"),tty); + } /* We call set_groups() above because this clobbers pam_groups.so */ #ifndef USE_PAM diff --git a/src/sulogin.c b/src/sulogin.c index 692606f3..bc1b119d 100644 --- a/src/sulogin.c +++ b/src/sulogin.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "defines.h" #include "getdef.h" #include "prototypes.h" @@ -142,6 +143,12 @@ static RETSIGTYPE catch_signals (int sig) #endif exit (1); /* must be a terminal */ } + /* If we were init, we need to start a new session */ + if (getppid() == 1) { + setsid(); + if (ioctl(0, TIOCSCTTY, 1)) + fprintf(stderr,_("TIOCSCTTY failed")); + } while (*envp) /* add inherited environment, */ addenv (*envp++, NULL); /* some variables change later */