diff --git a/ChangeLog b/ChangeLog index e0e1725d..0b475c7d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2009-04-30 Nicolas François + + * lib/exitcodes.h: Define E_SUCCESS as EXIT_SUCCESS. Added FIXMEs. + * libmisc/chowntty.c, libmisc/rlogin.c, libmisc/sub.c, + src/newusers.c, libmisc/sulog.c, libmisc/system.c, src/logoutd.c, + src/groups.c, src/id.c, lib/encrypt.c, libmisc/audit_help.c, + libmisc/limits.c: Return EXIT_FAILURE instead of 1, and + EXIT_SUCCESS instead of 0. + * libmisc/audit_help.c: Replace an fprintf() by fputs(). + * libmisc/audit_help.c: Remove documentation of the audit_logger + returned values. The function returns void. + * libmisc/system.c: Only return status if waitpid succeeded. + Return -1 otherwise. + 2009-04-28 Nicolas François * NEWS, src/chpasswd.c: Added support for changing the passwords diff --git a/lib/encrypt.c b/lib/encrypt.c index 1a97dc88..78132ba4 100644 --- a/lib/encrypt.c +++ b/lib/encrypt.c @@ -53,7 +53,7 @@ char *pw_encrypt (const char *clear, const char *salt) * expect us to return NULL, so... */ perror ("crypt"); - exit (1); + exit (EXIT_FAILURE); } /* The GNU crypt does not return NULL if the algorithm is not @@ -82,11 +82,13 @@ char *pw_encrypt (const char *clear, const char *salt) fprintf (stderr, _("crypt method not supported by libcrypt? (%s)\n"), method); - exit (1); + exit (EXIT_FAILURE); } - if (strlen (cp) != 13) + if (strlen (cp) != 13) { return cp; /* nonstandard crypt() in libc, better bail out */ + } + strcpy (cipher, cp); return cipher; diff --git a/lib/exitcodes.h b/lib/exitcodes.h index 7075d566..96b2340b 100644 --- a/lib/exitcodes.h +++ b/lib/exitcodes.h @@ -32,7 +32,12 @@ /* * Exit codes used by shadow programs */ -#define E_SUCCESS 0 /* success */ +#define E_SUCCESS EXIT_SUCCESS /* success */ +/* + * FIXME: other values should differ from EXIT_FAILURE (and EXIT_SUCCESS). + * + * FIXME: reserve EXIT_FAILURE for internal failures. + */ #define E_NOPERM 1 /* permission denied */ #define E_USAGE 2 /* invalid command syntax */ #define E_BAD_ARG 3 /* invalid argument to option */ diff --git a/libmisc/audit_help.c b/libmisc/audit_help.c index 9a58a8b7..8e8bc268 100644 --- a/libmisc/audit_help.c +++ b/libmisc/audit_help.c @@ -53,12 +53,14 @@ void audit_help_open (void) if (audit_fd < 0) { /* You get these only when the kernel doesn't have * audit compiled in. */ - if (errno == EINVAL || errno == EPROTONOSUPPORT || - errno == EAFNOSUPPORT) + if ( (errno == EINVAL) + || (errno == EPROTONOSUPPORT) + || (errno == EAFNOSUPPORT)) { return; - fprintf (stderr, - _("Cannot open audit interface - aborting.\n")); - exit (1); + } + (void) fputs (_("Cannot open audit interface - aborting.\n"), + stderr); + exit (EXIT_FAILURE); } } @@ -73,7 +75,6 @@ void audit_help_open (void) * name - user's account or group name. If not available use NULL. * id - uid or gid that the operation is being performed on. This is used * only when user is NULL. - * result - 1 is "success" and 0 is "failed" */ void audit_logger (int type, const char *pgname, const char *op, const char *name, unsigned int id, diff --git a/libmisc/chowntty.c b/libmisc/chowntty.c index 6b97ab76..0b2d9fb4 100644 --- a/libmisc/chowntty.c +++ b/libmisc/chowntty.c @@ -83,7 +83,7 @@ void chown_tty (const struct passwd *info) info->pw_name, strerror (err))); if (EROFS != err) { closelog (); - exit (1); + exit (EXIT_FAILURE); } } #ifdef __linux__ diff --git a/libmisc/limits.c b/libmisc/limits.c index c25c5f02..0eb2c494 100644 --- a/libmisc/limits.c +++ b/libmisc/limits.c @@ -436,7 +436,7 @@ void setup_limits (const struct passwd *info) LOGIN_ERROR_LOGIN) { (void) fputs (_("Too many logins.\n"), stderr); (void) sleep (2); /* XXX: Should be FAIL_DELAY */ - exit (1); + exit (EXIT_FAILURE); } } #endif diff --git a/libmisc/rlogin.c b/libmisc/rlogin.c index b4fd82f0..b19f5e8f 100644 --- a/libmisc/rlogin.c +++ b/libmisc/rlogin.c @@ -114,7 +114,7 @@ static void get_remote_string (char *buf, size_t size) { for (;;) { if (read (0, buf, 1) != 1) { - exit (1); + exit (EXIT_FAILURE); } if ('\0' == *buf) { return; diff --git a/libmisc/sub.c b/libmisc/sub.c index ad11c100..ed879c20 100644 --- a/libmisc/sub.c +++ b/libmisc/sub.c @@ -58,7 +58,7 @@ void subsystem (const struct passwd *pw) printf (_("Invalid root directory '%s'\n"), pw->pw_dir); SYSLOG ((LOG_WARN, BAD_SUBROOT2, pw->pw_dir, pw->pw_name)); closelog (); - exit (1); + exit (EXIT_FAILURE); } /* @@ -71,6 +71,6 @@ void subsystem (const struct passwd *pw) pw->pw_dir); SYSLOG ((LOG_WARN, NO_SUBROOT2, pw->pw_dir, pw->pw_name)); closelog (); - exit (1); + exit (EXIT_FAILURE); } } diff --git a/libmisc/sulog.c b/libmisc/sulog.c index 1948324b..76ae556a 100644 --- a/libmisc/sulog.c +++ b/libmisc/sulog.c @@ -83,7 +83,7 @@ void sulog (const char *tty, bool success, const char *oldname, const char *name "can't switch back to group `%d' in sulog", oldgid)); /* Do not return if the group permission were raised. */ - exit (1); + exit (EXIT_FAILURE); } if (fp == (FILE *) 0) { return; /* can't open or create logfile */ diff --git a/libmisc/system.c b/libmisc/system.c index da9adc79..14221d1c 100644 --- a/libmisc/system.c +++ b/libmisc/system.c @@ -51,8 +51,11 @@ int safe_system (const char *command, } if (pid) { /* Parent */ - waitpid (pid, &status, 0); - return status; + if (waitpid (pid, &status, 0) > 0) { + return status; + } else { + return -1; + } } fd = open ("/dev/null", O_RDWR); @@ -64,6 +67,6 @@ int safe_system (const char *command, execve (command, (char *const *) argv, (char *const *) env); fprintf (stderr, _("Failed to exec '%s'\n"), argv[0]); - exit (-1); + exit (EXIT_FAILURE); } diff --git a/src/groups.c b/src/groups.c index 4a153644..d260a354 100644 --- a/src/groups.c +++ b/src/groups.c @@ -64,7 +64,7 @@ static void print_groups (const char *member) if (NULL == pwd) { (void) fprintf (stderr, _("%s: unknown user %s\n"), Prog, member); - exit (1); + exit (EXIT_FAILURE); } setgrent (); @@ -146,7 +146,7 @@ int main (int argc, char **argv) ngroups = getgroups (sys_ngroups, groups); if (ngroups < 0) { perror ("getgroups"); - exit (1); + exit (EXIT_FAILURE); } /* @@ -203,7 +203,7 @@ int main (int argc, char **argv) if (NULL != logname) { print_groups (logname); } else { - exit (1); + exit (EXIT_FAILURE); } #endif } else { @@ -214,6 +214,6 @@ int main (int argc, char **argv) */ print_groups (argv[1]); } - exit (0); + return EXIT_SUCCESS; } diff --git a/src/id.c b/src/id.c index 87e86a05..f0c10d6a 100644 --- a/src/id.c +++ b/src/id.c @@ -57,7 +57,7 @@ static void usage (void) #else (void) fputs (_("Usage: id\n"), stderr); #endif - exit (1); + exit (EXIT_FAILURE); } /*ARGSUSED*/ int main (int argc, char **argv) @@ -201,7 +201,7 @@ static void usage (void) * Finish off the line. */ (void) putchar ('\n'); - exit (0); - /* NOT REACHED */ + + return EXIT_SUCCESS; } diff --git a/src/logoutd.c b/src/logoutd.c index 4acb8397..e89e55c9 100644 --- a/src/logoutd.c +++ b/src/logoutd.c @@ -175,11 +175,11 @@ int main (int argc, char **argv) pid = fork (); if (pid > 0) { /* parent */ - exit (0); + exit (EXIT_SUCCESS); } else if (pid < 0) { /* error */ perror ("fork"); - exit (1); + exit (EXIT_FAILURE); } #endif /* !DEBUG */ @@ -276,7 +276,7 @@ int main (int argc, char **argv) /* * This child has done all it can, drop dead. */ - exit (0); + exit (EXIT_SUCCESS); } #ifdef USE_UTMPX @@ -293,7 +293,7 @@ int main (int argc, char **argv) */ while (wait (&status) != -1); } - return 1; - /* NOT REACHED */ + + return EXIT_FAILURE; } diff --git a/src/newusers.c b/src/newusers.c index c6290ece..c8b3865f 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -126,7 +126,7 @@ static void usage (void) " crypt algorithms\n") #endif ); - exit (1); + exit (EXIT_FAILURE); } /* @@ -529,7 +529,7 @@ static void process_flags (int argc, char **argv) char buf[BUFSIZ]; snprintf (buf, sizeof buf, "%s: %s", Prog, argv[1]); perror (buf); - fail_exit (1); + fail_exit (EXIT_FAILURE); } } @@ -593,7 +593,7 @@ static void check_perms (void) fprintf (stderr, _("%s: Cannot determine your user name.\n"), Prog); - fail_exit (1); + fail_exit (EXIT_FAILURE); } retval = pam_start ("newusers", pampw->pw_name, &conv, &pamh); @@ -611,7 +611,7 @@ static void check_perms (void) } if (PAM_SUCCESS != retval) { fprintf (stderr, _("%s: PAM authentication failed\n"), Prog); - fail_exit (1); + fail_exit (EXIT_FAILURE); } #endif /* USE_PAM */ #endif /* ACCT_TOOLS_SETUID */ @@ -632,7 +632,7 @@ static void open_files (void) fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, pw_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } pw_locked = true; if (is_shadow) { @@ -640,7 +640,7 @@ static void open_files (void) fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, spw_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } spw_locked = true; } @@ -648,7 +648,7 @@ static void open_files (void) fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, gr_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } gr_locked = true; #ifdef SHADOWGRP @@ -657,7 +657,7 @@ static void open_files (void) fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, sgr_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } sgr_locked = true; } @@ -665,20 +665,20 @@ static void open_files (void) if (pw_open (O_RDWR) == 0) { fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (is_shadow && (spw_open (O_RDWR) == 0)) { fprintf (stderr, _("%s: cannot open %s\n"), Prog, spw_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (gr_open (O_RDWR) == 0) { fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } #ifdef SHADOWGRP if (is_shadow_grp && (sgr_open (O_RDWR) == 0)) { fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ()); - fail_exit (1); + fail_exit (EXIT_FAILURE); } #endif } @@ -691,7 +691,7 @@ static void close_files (void) if (pw_close () == 0) { fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ()); SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ())); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (pw_unlock () == 0) { fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ()); @@ -706,7 +706,7 @@ static void close_files (void) _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ()); SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ())); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (spw_unlock () == 0) { fprintf (stderr, @@ -723,7 +723,7 @@ static void close_files (void) _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ()); SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ())); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (gr_unlock () == 0) { fprintf (stderr, @@ -741,7 +741,7 @@ static void close_files (void) _("%s: failure while writing changes to %s\n"), Prog, sgr_dbname ()); SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ())); - fail_exit (1); + fail_exit (EXIT_FAILURE); } if (sgr_unlock () == 0) { fprintf (stderr, @@ -963,7 +963,7 @@ int main (int argc, char **argv) if (0 != errors) { fprintf (stderr, _("%s: error detected, changes ignored\n"), Prog); - fail_exit (1); + fail_exit (EXIT_FAILURE); } close_files (); @@ -971,6 +971,6 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); - return 0; + return EXIT_SUCCESS; }