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)
This commit is contained in:
Werner Fink 2012-10-11 13:10:40 +00:00
parent ec06765756
commit 1017641f3e
4 changed files with 23 additions and 7 deletions

View File

@ -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.

View File

@ -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,

View File

@ -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,

View File

@ -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<<con->id);
sushell(pwd);
*usemask &= ~(1<<con->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.