+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * 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 <nicolas.francois@centraliens.net>
* NEWS, src/chpasswd.c: Added support for changing the passwords
* 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
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;
/*
* 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 */
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);
}
}
* 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,
info->pw_name, strerror (err)));
if (EROFS != err) {
closelog ();
- exit (1);
+ exit (EXIT_FAILURE);
}
}
#ifdef __linux__
LOGIN_ERROR_LOGIN) {
(void) fputs (_("Too many logins.\n"), stderr);
(void) sleep (2); /* XXX: Should be FAIL_DELAY */
- exit (1);
+ exit (EXIT_FAILURE);
}
}
#endif
{
for (;;) {
if (read (0, buf, 1) != 1) {
- exit (1);
+ exit (EXIT_FAILURE);
}
if ('\0' == *buf) {
return;
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);
}
/*
pw->pw_dir);
SYSLOG ((LOG_WARN, NO_SUBROOT2, pw->pw_dir, pw->pw_name));
closelog ();
- exit (1);
+ exit (EXIT_FAILURE);
}
}
"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 */
}
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);
execve (command, (char *const *) argv, (char *const *) env);
fprintf (stderr, _("Failed to exec '%s'\n"), argv[0]);
- exit (-1);
+ exit (EXIT_FAILURE);
}
if (NULL == pwd) {
(void) fprintf (stderr, _("%s: unknown user %s\n"),
Prog, member);
- exit (1);
+ exit (EXIT_FAILURE);
}
setgrent ();
ngroups = getgroups (sys_ngroups, groups);
if (ngroups < 0) {
perror ("getgroups");
- exit (1);
+ exit (EXIT_FAILURE);
}
/*
if (NULL != logname) {
print_groups (logname);
} else {
- exit (1);
+ exit (EXIT_FAILURE);
}
#endif
} else {
*/
print_groups (argv[1]);
}
- exit (0);
+ return EXIT_SUCCESS;
}
#else
(void) fputs (_("Usage: id\n"), stderr);
#endif
- exit (1);
+ exit (EXIT_FAILURE);
}
/*ARGSUSED*/ int main (int argc, char **argv)
* Finish off the line.
*/
(void) putchar ('\n');
- exit (0);
- /* NOT REACHED */
+
+ return EXIT_SUCCESS;
}
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 */
/*
* This child has done all it can, drop dead.
*/
- exit (0);
+ exit (EXIT_SUCCESS);
}
#ifdef USE_UTMPX
*/
while (wait (&status) != -1);
}
- return 1;
- /* NOT REACHED */
+
+ return EXIT_FAILURE;
}
" crypt algorithms\n")
#endif
);
- exit (1);
+ exit (EXIT_FAILURE);
}
/*
char buf[BUFSIZ];
snprintf (buf, sizeof buf, "%s: %s", Prog, argv[1]);
perror (buf);
- fail_exit (1);
+ fail_exit (EXIT_FAILURE);
}
}
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);
}
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 */
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) {
fprintf (stderr,
_("%s: cannot lock %s; try again later.\n"),
Prog, spw_dbname ());
- fail_exit (1);
+ fail_exit (EXIT_FAILURE);
}
spw_locked = true;
}
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
fprintf (stderr,
_("%s: cannot lock %s; try again later.\n"),
Prog, sgr_dbname ());
- fail_exit (1);
+ fail_exit (EXIT_FAILURE);
}
sgr_locked = true;
}
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
}
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 ());
_("%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,
_("%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,
_("%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,
if (0 != errors) {
fprintf (stderr,
_("%s: error detected, changes ignored\n"), Prog);
- fail_exit (1);
+ fail_exit (EXIT_FAILURE);
}
close_files ();
nscd_flush_cache ("passwd");
nscd_flush_cache ("group");
- return 0;
+ return EXIT_SUCCESS;
}