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.
/* 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,
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);
}
if (alarm_rised) {
tcfinal(con);
- printf("Timed out.\n\r");
+ fprintf(stderr, "Timed out.\n\r");
}
/*
* User may pressed Control-D.