diff --git a/doc/Changelog b/doc/Changelog index 8b5a28d..09ea0e3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -39,6 +39,9 @@ sysvinit (2.89dsf) UNRELEASED; urgency=low was specified. * Sulogin: if zero is read at reading the passwd guess it's done. * Sulogin: respect byte order that is do not mix chars and ints + * Shutdown: use PATH_DEFAULT as suggested by Paul Arthur in local bug #36101 + * Killall5/pidof: handle strange names of executables (local bug #36252) + * Sulogin: be aware the crypt(3) may fail (local bug #36313) [ Petter Reinholdtsen ] * Next release will be 2.89dsf. diff --git a/src/killall5.c b/src/killall5.c index 853acb2..54176c3 100644 --- a/src/killall5.c +++ b/src/killall5.c @@ -508,8 +508,10 @@ int readproc(int do_stat) /* Read SID & statname from it. */ if ((fp = fopen(path, "r")) != NULL) { - if (!fgets(buf, sizeof(buf), fp)) - buf[0] = '\0'; + size_t len; + + len = fread(buf, sizeof(char), sizeof(buf)-1, fp); + buf[len] = '\0'; if (buf[0] == '\0') { nsyslog(LOG_ERR, diff --git a/src/shutdown.c b/src/shutdown.c index 384b4ff..dc3eab0 100644 --- a/src/shutdown.c +++ b/src/shutdown.c @@ -76,7 +76,7 @@ int got_alrm = 0; char *clean_env[] = { "HOME=/", - "PATH=/bin:/usr/bin:/sbin:/usr/sbin", + "PATH=" PATH_DEFAULT, "TERM=dumb", "SHELL=/bin/sh", NULL, diff --git a/src/sulogin.c b/src/sulogin.c index 45f5f5f..3775cb7 100644 --- a/src/sulogin.c +++ b/src/sulogin.c @@ -961,19 +961,30 @@ int main(int argc, char **argv) while (1) { char *passwd = pwd->pw_passwd; char *answer; - int failed = 0; + int failed = 0, doshell = 0; doprompt(passwd, con); if ((answer = getpasswd(con)) == NULL) break; - if (passwd[0] == '\0' || - strcmp(crypt(answer, passwd), passwd) == 0) { + if (passwd[0] == '\0') + doshell++; + else { + char *cryptbuf; + cryptbuf = crypt(answer, passwd); + if (cryptbuf == NULL) + fprintf(stderr, "sulogin: crypt failed: %m\n\r"); + else if (strcmp(cryptbuf, pwd->pw_passwd) == 0) + doshell++; + } + + if (doshell) { *usemask |= (1<id); sushell(pwd); *usemask &= ~(1<id); failed++; } + signal(SIGQUIT, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGINT, SIG_IGN); @@ -987,7 +998,7 @@ int main(int argc, char **argv) } if (alarm_rised) { tcfinal(con); - printf("Timed out.\n\r"); + fprintf(stderr, "Timed out.\n\r"); } /* * User may pressed Control-D.