diff --git a/ChangeLog b/ChangeLog index 1dc0f2c0..94ffeee8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,20 @@ +2008-05-25 Nicolas François + + * libmisc/hushed.c: hushed returns a bool instead of int. + * libmisc/hushed.c: Avoid assignments in comparisons. + * libmisc/hushed.c (hushed): Change type of found to bool. + * libmisc/hushed.c: Add brackets. + * libmisc/hushed.c: Always check if the user or the shell is in + the file. Do not check the first character of the line first. This + is simpler and match better with the HUSHLOGIN_FILE documentation. + 2008-05-25 Nicolas François * lib/getdef.h, lib/getdef.c: getdef_bool returns a bool instead of int. * lib/getdef.c: Change typo of def_loaded to bool. * lib/getdef.c: Add brackets. - * lib/getdef.c: Avoid assignment in comparisons. + * lib/getdef.c: Avoid assignments in comparisons. 2008-05-25 Nicolas François diff --git a/libmisc/hushed.c b/libmisc/hushed.c index ccfb9afb..327487ae 100644 --- a/libmisc/hushed.c +++ b/libmisc/hushed.c @@ -36,21 +36,21 @@ #include #include +#include #include "defines.h" #include "prototypes.h" #include "getdef.h" -#include /* * hushed - determine if a user receives login messages * * Look in the hushed-logins file (or user's home directory) to see * if the user is to receive the login-time messages. */ -int hushed (const struct passwd *pw) +bool hushed (const struct passwd *pw) { char *hushfile; char buf[BUFSIZ]; - int found; + bool found; FILE *fp; /* @@ -58,8 +58,10 @@ int hushed (const struct passwd *pw) * defined, default to a noisy login. */ - if ((hushfile = getdef_str ("HUSHLOGIN_FILE")) == NULL) - return 0; + hushfile = getdef_str ("HUSHLOGIN_FILE"); + if (NULL == hushfile) { + return false; + } /* * If this is not a fully rooted path then see if the @@ -73,17 +75,19 @@ int hushed (const struct passwd *pw) /* * If this is a fully rooted path then go through the file - * and see if this user is in there. + * and see if this user, or its shell is in there. */ - if ((fp = fopen (hushfile, "r")) == NULL) - return 0; - - for (found = 0; !found && fgets (buf, sizeof buf, fp);) { + fp = fopen (hushfile, "r"); + if (NULL == fp) { + return false; + } + for (found = false; !found && (fgets (buf, sizeof buf, fp) != NULL);) { buf[strlen (buf) - 1] = '\0'; - found = !strcmp (buf, - buf[0] == '/' ? pw->pw_shell : pw->pw_name); + found = (strcmp (buf, pw->pw_shell) == 0) || + (strcmp (buf, pw->pw_name) == 0); } (void) fclose (fp); return found; } +