If an entry in /etc/shells is not an absolute path (comments or
partial reads due to fgets), the line should not be considered as
a valid login shell.
In general all systems should have getusershells, but let's better
be safe than sorry.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
}
endusershell ();
#else
- char buf[BUFSIZ];
+ char *buf = NULL;
FILE *fp;
+ size_t n = 0;
fp = fopen (SHELLS_FILE, "r");
if (NULL == fp) {
return false;
}
- while (fgets (buf, sizeof (buf), fp) == buf) {
- cp = strrchr (buf, '\n');
- if (NULL != cp) {
- *cp = '\0';
- }
-
- if (buf[0] == '#') {
+ while (getline (&buf, &n, fp) != -1) {
+ if (buf[0] != '/') {
continue;
}
break;
}
}
+
+ free(buf);
fclose (fp);
#endif
return found;