fd = open (file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (-1 == fd) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s: %s\n",
Prog, file, strerror (errno));
}
len = (ssize_t) strlen (buf) + 1;
if (write (fd, buf, (size_t) len) != len) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s file write error: %s\n",
Prog, file, strerror (errno));
}
}
if (fdatasync (fd) == -1) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s file sync error: %s\n",
Prog, file, strerror (errno));
}
if (link (file, lock) == 0) {
retval = check_link_count (file);
if ((0==retval) && log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s: lock file already used\n",
Prog, file);
}
fd = open (lock, O_RDWR);
if (-1 == fd) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s: %s\n",
Prog, lock, strerror (errno));
}
close (fd);
if (len <= 0) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: existing lock file %s without a PID\n",
Prog, lock);
}
buf[len] = '\0';
if (get_pid (buf, &pid) == 0) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: existing lock file %s with an invalid PID '%s'\n",
Prog, lock, buf);
}
}
if (kill (pid, 0) == 0) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: lock %s already used by PID %lu\n",
Prog, lock, (unsigned long) pid);
}
}
if (unlink (lock) != 0) {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: cannot get lock %s: %s\n",
Prog, lock, strerror (errno));
}
if (link (file, lock) == 0) {
retval = check_link_count (file);
if ((0==retval) && log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: %s: lock file already used\n",
Prog, file);
}
} else {
if (log) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: cannot get lock %s: %s\n",
Prog, lock, strerror (errno));
}
if (0 == lock_count) {
if (lckpwdf () == -1) {
if (geteuid () != 0) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
"%s: Permission denied.\n",
Prog);
}
}
/* no unnecessary retries on "permission denied" errors */
if (geteuid () != 0) {
- (void) fprintf (stderr, "%s: Permission denied.\n",
+ (void) fprintf (shadow_logfd, "%s: Permission denied.\n",
Prog);
return 0;
}
p = find_entry_by_name (db, db->ops->getname (eptr));
if (NULL != p) {
if (next_entry_by_name (db, p->next, db->ops->getname (eptr)) != NULL) {
- fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
+ fprintf (shadow_logfd, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
db->ops->free (nentry);
return 0;
}
return 0;
}
if (next_entry_by_name (db, p->next, name) != NULL) {
- fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
+ fprintf (shadow_logfd, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
return 0;
}
method = &nummethod[0];
}
}
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("crypt method not supported by libcrypt? (%s)\n"),
method);
exit (EXIT_FAILURE);
if ( (getlong (d->value, &val) == 0)
|| (val > INT_MAX)
|| (val < INT_MIN)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
if ( (getlong (d->value, &val) == 0)
|| (val < 0)
|| (val > INT_MAX)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
}
if (getlong (d->value, &val) == 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
if (getulong (d->value, &val) == 0) {
/* FIXME: we should have a getulong */
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
cp = strdup (value);
if (NULL == cp) {
(void) fputs (_("Could not allocate space for config info.\n"),
- stderr);
+ shadow_logfd);
SYSLOG ((LOG_ERR, "could not allocate space for config info"));
return -1;
}
goto out;
}
}
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("configuration error - unknown item '%s' (notify administrator)\n"),
name);
SYSLOG ((LOG_CRIT, "unknown configuration item `%s'", name));
if (run_command (cmd, spawnedArgs, spawnedEnv, &status) != 0) {
/* run_command writes its own more detailed message. */
- (void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
+ (void) fprintf (shadow_logfd, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
return -1;
}
code = WEXITSTATUS (status);
if (!WIFEXITED (status)) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: nscd did not terminate normally (signal %d)\n"),
Prog, WTERMSIG (status));
return -1;
/* nscd is installed, but it isn't active. */
return 0;
} else if (code != 0) {
- (void) fprintf (stderr, _("%s: nscd exited with status %d\n"),
+ (void) fprintf (shadow_logfd, _("%s: nscd exited with status %d\n"),
Prog, code);
- (void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
+ (void) fprintf (shadow_logfd, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
return -1;
}
// subid: files
nssfp = fopen(nsswitch_path, "r");
if (!nssfp) {
- fprintf(stderr, "Failed opening %s: %m", nsswitch_path);
+ fprintf(shadow_logfd, "Failed opening %s: %m", nsswitch_path);
atomic_store(&nss_init_completed, true);
return;
}
goto done;
}
if (strlen(token) > 50) {
- fprintf(stderr, "Subid NSS module name too long (longer than 50 characters): %s\n", token);
- fprintf(stderr, "Using files\n");
+ fprintf(shadow_logfd, "Subid NSS module name too long (longer than 50 characters): %s\n", token);
+ fprintf(shadow_logfd, "Using files\n");
subid_nss = NULL;
goto done;
}
snprintf(libname, 64, "libsubid_%s.so", token);
h = dlopen(libname, RTLD_LAZY);
if (!h) {
- fprintf(stderr, "Error opening %s: %s\n", libname, dlerror());
- fprintf(stderr, "Using files\n");
+ fprintf(shadow_logfd, "Error opening %s: %s\n", libname, dlerror());
+ fprintf(shadow_logfd, "Using files\n");
subid_nss = NULL;
goto done;
}
}
subid_nss->has_range = dlsym(h, "shadow_subid_has_range");
if (!subid_nss->has_range) {
- fprintf(stderr, "%s did not provide @has_range@\n", libname);
+ fprintf(shadow_logfd, "%s did not provide @has_range@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
}
subid_nss->list_owner_ranges = dlsym(h, "shadow_subid_list_owner_ranges");
if (!subid_nss->list_owner_ranges) {
- fprintf(stderr, "%s did not provide @list_owner_ranges@\n", libname);
+ fprintf(shadow_logfd, "%s did not provide @list_owner_ranges@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
}
subid_nss->has_any_range = dlsym(h, "shadow_subid_has_any_range");
if (!subid_nss->has_any_range) {
- fprintf(stderr, "%s did not provide @has_any_range@\n", libname);
+ fprintf(shadow_logfd, "%s did not provide @has_any_range@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
}
subid_nss->find_subid_owners = dlsym(h, "shadow_subid_find_subid_owners");
if (!subid_nss->find_subid_owners) {
- fprintf(stderr, "%s did not provide @find_subid_owners@\n", libname);
+ fprintf(shadow_logfd, "%s did not provide @find_subid_owners@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
subid_nss->handle = h;
goto done;
}
- fprintf(stderr, "No usable subid NSS module found, using files\n");
+ fprintf(shadow_logfd, "No usable subid NSS module found, using files\n");
// subid_nss has to be null here, but to ease reviews:
free(subid_nss);
subid_nss = NULL;
#include "defines.h"
#include "commonio.h"
-extern /*@observer@*/ const char *Prog;
+extern /*@observer@*/ const char *Prog; /* Program name showed in error messages */
+extern FILE *shadow_logfd; /* file descripter to which error messages are printed */
/* addgrps.c */
#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
+#include <lib/prototypes.h>
int run_part (char *script_path, char *name, char *action)
{
free (s);
if (execute_result!=0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
"%s: did not exit cleanly.\n",
namelist[n]->d_name);
for (; n<scanlist; n++) {
&& (errno != EAFNOSUPPORT)) {
(void) fputs (_("Cannot open audit interface.\n"),
- stderr);
+ shadow_logfd);
SYSLOG ((LOG_WARN, "Cannot open audit interface."));
}
}
selinux_set_callback (SELINUX_CB_LOG, (union selinux_callback) selinux_log_cb);
if (getprevcon_raw (&user_context_raw) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: can not get previous SELinux process context: %s\n"),
Prog, strerror (errno));
SYSLOG ((LOG_WARN,
switch (semanage_msg_get_level (handle)) {
case SEMANAGE_MSG_ERR:
case SEMANAGE_MSG_WARN:
- fprintf (stderr, _("[libsemanage]: %s\n"), message);
+ fprintf (shadow_logfd, _("[libsemanage]: %s\n"), message);
break;
case SEMANAGE_MSG_INFO:
/* nop */
handle = semanage_handle_create ();
if (NULL == handle) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Cannot create SELinux management handle\n"));
return NULL;
}
ret = semanage_is_managed (handle);
if (ret != 1) {
- fprintf (stderr, _("SELinux policy not managed\n"));
+ fprintf (shadow_logfd, _("SELinux policy not managed\n"));
goto fail;
}
ret = semanage_access_check (handle);
if (ret < SEMANAGE_CAN_READ) {
- fprintf (stderr, _("Cannot read SELinux policy store\n"));
+ fprintf (shadow_logfd, _("Cannot read SELinux policy store\n"));
goto fail;
}
ret = semanage_connect (handle);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Cannot establish SELinux management connection\n"));
goto fail;
}
ret = semanage_begin_transaction (handle);
if (ret != 0) {
- fprintf (stderr, _("Cannot begin SELinux transaction\n"));
+ fprintf (shadow_logfd, _("Cannot begin SELinux transaction\n"));
goto fail;
}
semanage_seuser_query (handle, key, &seuser);
if (NULL == seuser) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not query seuser for %s\n"), login_name);
ret = 1;
goto done;
ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not set serange for %s\n"), login_name);
ret = 1;
goto done;
ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not set sename for %s\n"),
login_name);
ret = 1;
ret = semanage_seuser_modify_local (handle, key, seuser);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not modify login mapping for %s\n"),
login_name);
ret = 1;
ret = semanage_seuser_create (handle, &seuser);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Cannot create SELinux login mapping for %s\n"),
login_name);
ret = 1;
ret = semanage_seuser_set_name (handle, seuser, login_name);
if (ret != 0) {
- fprintf (stderr, _("Could not set name for %s\n"), login_name);
+ fprintf (shadow_logfd, _("Could not set name for %s\n"), login_name);
ret = 1;
goto done;
}
ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not set serange for %s\n"),
login_name);
ret = 1;
ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not set SELinux user for %s\n"),
login_name);
ret = 1;
ret = semanage_seuser_modify_local (handle, key, seuser);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not add login mapping for %s\n"),
login_name);
ret = 1;
handle = semanage_init ();
if (NULL == handle) {
- fprintf (stderr, _("Cannot init SELinux management\n"));
+ fprintf (shadow_logfd, _("Cannot init SELinux management\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_key_create (handle, login_name, &key);
if (ret != 0) {
- fprintf (stderr, _("Cannot create SELinux user key\n"));
+ fprintf (shadow_logfd, _("Cannot create SELinux user key\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_exists (handle, key, &seuser_exists);
if (ret < 0) {
- fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
if (0 != seuser_exists) {
ret = semanage_user_mod (handle, key, login_name, seuser_name);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Cannot modify SELinux user mapping\n"));
ret = 1;
goto done;
} else {
ret = semanage_user_add (handle, key, login_name, seuser_name);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Cannot add SELinux user mapping\n"));
ret = 1;
goto done;
ret = semanage_commit (handle);
if (ret < 0) {
- fprintf (stderr, _("Cannot commit SELinux transaction\n"));
+ fprintf (shadow_logfd, _("Cannot commit SELinux transaction\n"));
ret = 1;
goto done;
}
handle = semanage_init ();
if (NULL == handle) {
- fprintf (stderr, _("Cannot init SELinux management\n"));
+ fprintf (shadow_logfd, _("Cannot init SELinux management\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_key_create (handle, login_name, &key);
if (ret != 0) {
- fprintf (stderr, _("Cannot create SELinux user key\n"));
+ fprintf (shadow_logfd, _("Cannot create SELinux user key\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_exists (handle, key, &exists);
if (ret < 0) {
- fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
if (0 == exists) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Login mapping for %s is not defined, OK if default mapping was used\n"),
login_name);
ret = 0; /* probably default mapping */
ret = semanage_seuser_exists_local (handle, key, &exists);
if (ret < 0) {
- fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
if (0 == exists) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Login mapping for %s is defined in policy, cannot be deleted\n"),
login_name);
ret = 0; /* Login mapping defined in policy can't be deleted */
ret = semanage_seuser_del_local (handle, key);
if (ret != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Could not delete login mapping for %s"),
login_name);
ret = 1;
ret = semanage_commit (handle);
if (ret < 0) {
- fprintf (stderr, _("Cannot commit SELinux transaction\n"));
+ fprintf (shadow_logfd, _("Cannot commit SELinux transaction\n"));
ret = 1;
goto done;
}
}
(void) fflush (stdout);
- (void) fflush (stderr);
+ (void) fflush (shadow_logfd);
pid = fork ();
if (0 == pid) {
if (ENOENT == errno) {
exit (E_CMD_NOTFOUND);
}
- fprintf (stderr, "%s: cannot execute %s: %s\n",
+ fprintf (shadow_logfd, "%s: cannot execute %s: %s\n",
Prog, cmd, strerror (errno));
exit (E_CMD_NOEXEC);
} else if ((pid_t)-1 == pid) {
- fprintf (stderr, "%s: cannot execute %s: %s\n",
+ fprintf (shadow_logfd, "%s: cannot execute %s: %s\n",
Prog, cmd, strerror (errno));
return -1;
}
|| ((pid_t)-1 != wpid && wpid != pid));
if ((pid_t)-1 == wpid) {
- fprintf (stderr, "%s: waitpid (status: %d): %s\n",
+ fprintf (shadow_logfd, "%s: waitpid (status: %d): %s\n",
Prog, *status, strerror (errno));
return -1;
}
* to exit soon.
*/
#define OUT_OF_MEMORY do { \
- fprintf (stderr, _("%s: out of memory\n"), Prog); \
- (void) fflush (stderr); \
+ fprintf (shadow_logfd, _("%s: out of memory\n"), Prog); \
+ (void) fflush (shadow_logfd); \
} while (false)
/* Returns user's tcb directory path relative to TCB_DIR. */
return NULL;
}
if (lstat (path, &st) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, path, strerror (errno));
free (path);
return rval;
}
if (!S_ISLNK (st.st_mode)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: %s is neither a directory, nor a symlink.\n"),
Prog, path);
free (path);
}
ret = readlink (path, link, sizeof (link) - 1);
if (-1 == ret) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot read symbolic link %s: %s\n"),
Prog, path, strerror (errno));
free (path);
free (path);
if ((size_t)ret >= sizeof(link) - 1) {
link[sizeof(link) - 1] = '\0';
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Suspiciously long symlink: %s\n"),
Prog, link);
return NULL;
}
ptr = path;
if (stat (TCB_DIR, &st) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, TCB_DIR, strerror (errno));
goto out_free_path;
return SHADOWTCB_FAILURE;
}
if ((mkdir (dir, 0700) != 0) && (errno != EEXIST)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot create directory %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
}
if (chown (dir, 0, st.st_gid) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
}
if (chmod (dir, 0711) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
return SHADOWTCB_FAILURE;
}
if ((unlink (tmp) != 0) && (errno != ENOENT)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: unlink: %s: %s\n"),
Prog, tmp, strerror (errno));
free (tmp);
}
if (rmdir (dir) != 0) {
if (errno != ENOTEMPTY) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot remove directory %s: %s\n"),
Prog, dir, strerror (errno));
ret = SHADOWTCB_FAILURE;
goto out_free_nomem;
}
if (stat (olddir, &oldmode) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, olddir, strerror (errno));
goto out_free;
goto out_free;
}
if (rename (real_old_dir, real_new_dir) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot rename %s to %s: %s\n"),
Prog, real_old_dir, real_new_dir, strerror (errno));
goto out_free;
goto out_free;
}
if ((unlink (olddir) != 0) && (errno != ENOENT)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot remove %s: %s\n"),
Prog, olddir, strerror (errno));
goto out_free;
}
if ( (strcmp (real_new_dir, newdir) != 0)
&& (symlink (real_new_dir_rel, newdir) != 0)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot create symbolic link %s: %s\n"),
Prog, real_new_dir_rel, strerror (errno));
goto out_free;
return SHADOWTCB_FAILURE;
}
if (stat (tcbdir, &dirmode) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (chown (tcbdir, 0, 0) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owners of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (chmod (tcbdir, 0700) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (lstat (shadow, &filemode) != 0) {
if (errno != ENOENT) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot lstat %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Warning, user %s has no tcb shadow file.\n"),
Prog, user_newname);
} else {
if (!S_ISREG (filemode.st_mode) ||
filemode.st_nlink != 1) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Emergency: %s's tcb shadow is not a "
"regular file with st_nlink=1.\n"
"The account is left locked.\n"),
goto out_free;
}
if (chown (shadow, user_newid, filemode.st_gid) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chmod (shadow, filemode.st_mode & 07777) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
goto out_free;
}
if (chown (tcbdir, user_newid, dirmode.st_gid) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
return SHADOWTCB_SUCCESS;
}
if (stat (TCB_DIR, &tcbdir_stat) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, TCB_DIR, strerror (errno));
return SHADOWTCB_FAILURE;
return SHADOWTCB_FAILURE;
}
if (mkdir (dir, 0700) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: mkdir: %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;
}
fd = open (shadow, O_RDWR | O_CREAT | O_TRUNC, 0600);
if (fd < 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot open %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
close (fd);
if (chown (shadow, 0, authgid) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chmod (shadow, (mode_t) ((authgid == shadowgid) ? 0600 : 0640)) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chown (dir, 0, authgid) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;
}
if (chmod (dir, (mode_t) ((authgid == shadowgid) ? 02700 : 02710)) != 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;
grp = getgrnam (token); /* local, no need for xgetgrnam */
if (NULL == grp) {
- fprintf (stderr, _("Warning: unknown group %s\n"),
+ fprintf (shadow_logfd, _("Warning: unknown group %s\n"),
token);
continue;
}
}
if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
- fputs (_("Warning: too many groups\n"), stderr);
+ fputs (_("Warning: too many groups\n"), shadow_logfd);
break;
}
tmp = (gid_t *) realloc (grouplist, (size_t)(ngroups + 1) * sizeof (GETGROUPS_T));
return;
}
(void) fputs (_("Cannot open audit interface - aborting.\n"),
- stderr);
+ shadow_logfd);
exit (EXIT_FAILURE);
}
}
|| (fchmod (STDIN_FILENO, (mode_t)getdef_num ("TTYPERM", 0600)) != 0)) {
int err = errno;
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Unable to change owner or mode of tty stdin: %s"),
strerror (err));
SYSLOG ((LOG_WARN,
void cleanup_unlock_group (unused void *arg)
{
if (gr_unlock () == 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, gr_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
void cleanup_unlock_gshadow (unused void *arg)
{
if (sgr_unlock () == 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, sgr_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
void cleanup_unlock_passwd (unused void *arg)
{
if (pw_unlock () == 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, pw_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
void cleanup_unlock_shadow (unused void *arg)
{
if (spw_unlock () == 0) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, spw_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
}
va_start (ap, fmt);
- (void) fprintf (stderr, _("%s: "), Prog);
- if (vfprintf (stderr, fmt, ap) != 0) {
- (void) fputs (_(": "), stderr);
+ (void) fprintf (shadow_logfd, _("%s: "), Prog);
+ if (vfprintf (shadow_logfd, fmt, ap) != 0) {
+ (void) fputs (_(": "), shadow_logfd);
}
- (void) fprintf (stderr, "%s\n", strerror (errno));
+ (void) fprintf (shadow_logfd, "%s\n", strerror (errno));
va_end (ap);
}
}
if (!S_ISDIR (sb.st_mode)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
"%s: %s is not a directory",
Prog, src_root);
return -1;
}
newenvp = __newenvp;
} else {
- (void) fputs (_("Environment overflow\n"), stderr);
+ (void) fputs (_("Environment overflow\n"), shadow_logfd);
newenvc--;
free (newenvp[newenvc]);
}
/* Check that the ranges make sense */
if (*max_id < *min_id) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SYS_GID_MIN (%lu), "
"GID_MIN (%lu), SYS_GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: GID_MIN (%lu), "
"GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
* more likely to want to stop and address the
* issue.
*/
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Encountered error attempting to use "
"preferred GID: %s\n"),
Prog, strerror (result));
/* Create an array to hold all of the discovered GIDs */
used_gids = malloc (sizeof (bool) * (gid_max +1));
if (NULL == used_gids) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
}
/* The code reached here and found no available IDs in the range */
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique GID (no more available GIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available GIDs on the system"));
count = getdef_ulong ("SUB_GID_COUNT", 65536);
if (min > max || count >= max || (min + count - 1) > max) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SUB_GID_MIN (%lu),"
" SUB_GID_MAX (%lu), SUB_GID_COUNT (%lu)\n"),
Prog, min, max, count);
start = sub_gid_find_free_range(min, max, count);
if (start == (gid_t)-1) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique subordinate GID range\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available subordinate GIDs on the system"));
count = getdef_ulong ("SUB_UID_COUNT", 65536);
if (min > max || count >= max || (min + count - 1) > max) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SUB_UID_MIN (%lu),"
" SUB_UID_MAX (%lu), SUB_UID_COUNT (%lu)\n"),
Prog, min, max, count);
start = sub_uid_find_free_range(min, max, count);
if (start == (uid_t)-1) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique subordinate UID range\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available subordinate UIDs on the system"));
/* Check that the ranges make sense */
if (*max_id < *min_id) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SYS_UID_MIN (%lu), "
"UID_MIN (%lu), SYS_UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: Invalid configuration: UID_MIN (%lu), "
"UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
* more likely to want to stop and address the
* issue.
*/
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Encountered error attempting to use "
"preferred UID: %s\n"),
Prog, strerror (result));
/* Create an array to hold all of the discovered UIDs */
used_uids = malloc (sizeof (bool) * (uid_max +1));
if (NULL == used_uids) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
*
*/
if (!nospam) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
}
/* The code reached here and found no available IDs in the range */
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: Can't get unique UID (no more available UIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available UIDs on the system"));
epoch = strtoull (source_date_epoch, &endptr, 10);
if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
|| (errno != 0 && epoch == 0)) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n"),
strerror(errno));
} else if (endptr == source_date_epoch) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n"),
endptr);
} else if (*endptr != '\0') {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n"),
endptr);
} else if (epoch > ULONG_MAX) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu\n"),
ULONG_MAX, epoch);
} else if (epoch > fallback) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to the current time (%lu) but was found to be: %llu\n"),
fallback, epoch);
} else {
int idx, argidx;
if (ranges < 0 || argc < 0) {
- fprintf(stderr, "%s: error calculating number of arguments\n", Prog);
+ fprintf(shadow_logfd, "%s: error calculating number of arguments\n", Prog);
return NULL;
}
if (ranges != ((argc + 2) / 3)) {
- fprintf(stderr, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
+ fprintf(shadow_logfd, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
return NULL;
}
if ((ranges * 3) > argc) {
- fprintf(stderr, "ranges: %u argc: %d\n",
+ fprintf(shadow_logfd, "ranges: %u argc: %d\n",
ranges, argc);
- fprintf(stderr,
+ fprintf(shadow_logfd,
_( "%s: Not enough arguments to form %u mappings\n"),
Prog, ranges);
return NULL;
mappings = calloc(ranges, sizeof(*mappings));
if (!mappings) {
- fprintf(stderr, _( "%s: Memory allocation failure\n"),
+ fprintf(shadow_logfd, _( "%s: Memory allocation failure\n"),
Prog);
exit(EXIT_FAILURE);
}
return NULL;
}
if (ULONG_MAX - mapping->upper <= mapping->count || ULONG_MAX - mapping->lower <= mapping->count) {
- fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->upper > UINT_MAX ||
mapping->lower > UINT_MAX ||
mapping->count > UINT_MAX) {
- fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->lower + mapping->count > UINT_MAX ||
mapping->upper + mapping->count > UINT_MAX) {
- fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->lower + mapping->count < mapping->lower ||
mapping->upper + mapping->count < mapping->upper) {
/* this one really shouldn't be possible given previous checks */
- fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
}
} else if (strcmp(map_file, "gid_map") == 0) {
cap = CAP_SETGID;
} else {
- fprintf(stderr, _("%s: Invalid map file %s specified\n"), Prog, map_file);
+ fprintf(shadow_logfd, _("%s: Invalid map file %s specified\n"), Prog, map_file);
exit(EXIT_FAILURE);
}
/* Align setuid- and fscaps-based new{g,u}idmap behavior. */
if (geteuid() == 0 && geteuid() != ruid) {
if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) {
- fprintf(stderr, _("%s: Could not prctl(PR_SET_KEEPCAPS)\n"), Prog);
+ fprintf(shadow_logfd, _("%s: Could not prctl(PR_SET_KEEPCAPS)\n"), Prog);
exit(EXIT_FAILURE);
}
if (seteuid(ruid) < 0) {
- fprintf(stderr, _("%s: Could not seteuid to %d\n"), Prog, ruid);
+ fprintf(shadow_logfd, _("%s: Could not seteuid to %d\n"), Prog, ruid);
exit(EXIT_FAILURE);
}
}
data[0].effective |= CAP_TO_MASK(CAP_SETFCAP);
data[0].permitted = data[0].effective;
if (capset(&hdr, data) < 0) {
- fprintf(stderr, _("%s: Could not set caps\n"), Prog);
+ fprintf(shadow_logfd, _("%s: Could not set caps\n"), Prog);
exit(EXIT_FAILURE);
}
#endif
mapping->lower,
mapping->count);
if ((written <= 0) || (written >= (bufsize - (pos - buf)))) {
- fprintf(stderr, _("%s: snprintf failed!\n"), Prog);
+ fprintf(shadow_logfd, _("%s: snprintf failed!\n"), Prog);
exit(EXIT_FAILURE);
}
pos += written;
/* Write the mapping to the mapping file */
fd = openat(proc_dir_fd, map_file, O_WRONLY);
if (fd < 0) {
- fprintf(stderr, _("%s: open of %s failed: %s\n"),
+ fprintf(shadow_logfd, _("%s: open of %s failed: %s\n"),
Prog, map_file, strerror(errno));
exit(EXIT_FAILURE);
}
if (write(fd, buf, pos - buf) != (pos - buf)) {
- fprintf(stderr, _("%s: write to %s failed: %s\n"),
+ fprintf(shadow_logfd, _("%s: write to %s failed: %s\n"),
Prog, map_file, strerror(errno));
exit(EXIT_FAILURE);
}
#ifdef LIMITS
if (info->pw_uid != 0) {
if ((setup_user_limits (info->pw_name) & LOGIN_ERROR_LOGIN) != 0) {
- (void) fputs (_("Too many logins.\n"), stderr);
+ (void) fputs (_("Too many logins.\n"), shadow_logfd);
(void) sleep (2); /* XXX: Should be FAIL_DELAY */
exit (EXIT_FAILURE);
}
ret = pam_start ("passwd", user, &conv, &pamh);
if (ret != PAM_SUCCESS) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("passwd: pam_start() failed, error %d\n"), ret);
exit (10); /* XXX */
}
ret = pam_chauthtok (pamh, flags);
if (ret != PAM_SUCCESS) {
- fprintf (stderr, _("passwd: %s\n"), pam_strerror (pamh, ret));
- fputs (_("passwd: password unchanged\n"), stderr);
+ fprintf (shadow_logfd, _("passwd: %s\n"), pam_strerror (pamh, ret));
+ fputs (_("passwd: password unchanged\n"), shadow_logfd);
pam_end (pamh, ret);
exit (10); /* XXX */
}
- fputs (_("passwd: password updated successfully\n"), stderr);
+ fputs (_("passwd: password updated successfully\n"), shadow_logfd);
(void) pam_end (pamh, PAM_SUCCESS);
}
#else /* !USE_PAM */
switch (msg[count]->msg_style) {
case PAM_PROMPT_ECHO_ON:
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: PAM modules requesting echoing are not supported.\n"),
Prog);
goto failed_conversation;
break;
case PAM_ERROR_MSG:
if ( (NULL == msg[count]->msg)
- || (fprintf (stderr, "%s\n", msg[count]->msg) <0)) {
+ || (fprintf (shadow_logfd, "%s\n", msg[count]->msg) <0)) {
goto failed_conversation;
}
responses[count].resp = NULL;
responses[count].resp = NULL;
break;
default:
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: conversation type %d not supported.\n"),
Prog, msg[count]->msg_style);
goto failed_conversation;
ret = pam_start (pam_service, username, &non_interactive_pam_conv, &pamh);
if (ret != PAM_SUCCESS) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: (user %s) pam_start failure %d\n"),
Prog, username, ret);
return 1;
non_interactive_password = password;
ret = pam_chauthtok (pamh, 0);
if (ret != PAM_SUCCESS) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"),
Prog, username, pam_strerror (pamh, ret));
&& (val = argv[i] + 9))
|| (strcmp (argv[i], short_opt) == 0)) {
if (NULL != prefix) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: multiple --prefix options\n"),
Prog);
exit (E_BAD_ARG);
if (val) {
prefix = val;
} else if (i + 1 == argc) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: option '%s' requires an argument\n"),
Prog, argv[i]);
exit (E_BAD_ARG);
if (pw_auth (passwd, user, PW_LOGIN, (char *) 0) != 0) {
SYSLOG ((LOG_WARN, "incorrect password for `%s'", user));
(void) sleep (1);
- fprintf (stderr, _("Incorrect password for %s.\n"), user);
+ fprintf (shadow_logfd, _("Incorrect password for %s.\n"), user);
exit (EXIT_FAILURE);
}
}
&& (val = argv[i] + 7))
|| (strcmp (argv[i], short_opt) == 0)) {
if (NULL != newroot) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: multiple --root options\n"),
Prog);
exit (E_BAD_ARG);
if (val) {
newroot = val;
} else if (i + 1 == argc) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: option '%s' requires an argument\n"),
Prog, argv[i]);
exit (E_BAD_ARG);
/* Drop privileges */
if ( (setregid (getgid (), getgid ()) != 0)
|| (setreuid (getuid (), getuid ()) != 0)) {
- fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
+ fprintf (shadow_logfd, _("%s: failed to drop privileges (%s)\n"),
Prog, strerror (errno));
exit (EXIT_FAILURE);
}
if ('/' != newroot[0]) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: invalid chroot path '%s'\n"),
Prog, newroot);
exit (E_BAD_ARG);
}
if (access (newroot, F_OK) != 0) {
- fprintf(stderr,
+ fprintf(shadow_logfd,
_("%s: cannot access chroot directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);
}
if (chdir (newroot) != 0) {
- fprintf(stderr,
+ fprintf(shadow_logfd,
_("%s: cannot chdir to chroot directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);
}
if (chroot (newroot) != 0) {
- fprintf(stderr,
+ fprintf(shadow_logfd,
_("%s: unable to chroot to directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);
salt_len = (size_t) shadow_random (8, 16);
#endif /* USE_SHA_CRYPT */
} else if (0 != strcmp (method, "DES")) {
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("Invalid ENCRYPT_METHOD value: '%s'.\n"
"Defaulting to DES.\n"),
method);
static char temp_pw_dir[] = "/";
if (!getdef_bool ("DEFAULT_HOME") || chdir ("/") == -1) {
- fprintf (stderr, _("Unable to cd to '%s'\n"),
+ fprintf (shadow_logfd, _("Unable to cd to '%s'\n"),
info->pw_dir);
SYSLOG ((LOG_WARN,
"unable to cd to `%s' for user `%s'\n",
continue;
}
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: user %s is currently logged in\n"),
Prog, name);
return 1;
#ifdef ENABLE_SUBIDS
sub_uid_close();
#endif
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: user %s is currently used by process %d\n"),
Prog, name, pid);
return 1;
#ifdef ENABLE_SUBIDS
sub_uid_close();
#endif
- fprintf (stderr,
+ fprintf (shadow_logfd,
_("%s: user %s is currently used by process %d\n"),
Prog, name, pid);
return 1;
result = malloc(sizeof(LOOKUP_TYPE));
if (NULL == result) {
- fprintf (stderr, _("%s: out of memory\n"),
+ fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}
LOOKUP_TYPE *resbuf = NULL;
buffer = (char *)realloc (buffer, length);
if (NULL == buffer) {
- fprintf (stderr, _("%s: out of memory\n"),
+ fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}
if (result) {
result = DUP_FUNCTION(result);
if (NULL == result) {
- fprintf (stderr, _("%s: out of memory\n"),
+ fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}
ptr = (char *) malloc (size);
if (NULL == ptr) {
- (void) fprintf (stderr,
+ (void) fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
exit (13);
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
+#include <string.h>
#include <pwd.h>
#include <stdbool.h>
#include "subordinateio.h"
#include "idmapping.h"
#include "subid.h"
+const char *Prog = "(libsubid)";
+extern FILE * shadow_logfd;
+
+bool libsubid_init(const char *progname, FILE * logfd)
+{
+ if (progname) {
+ progname = strdup(progname);
+ if (progname)
+ Prog = progname;
+ else
+ fprintf(stderr, "Out of memory");
+ }
+
+ if (logfd) {
+ shadow_logfd = logfd;
+ return true;
+ }
+ shadow_logfd = fopen("/dev/null", "w");
+ if (!shadow_logfd) {
+ fprintf(stderr, "ERROR opening /dev/null for error messages. Using stderr.");
+ shadow_logfd = stderr;
+ return false;
+ }
+ return true;
+}
+
static
int get_subid_ranges(const char *owner, enum subid_type id_type, struct subordinate_range ***ranges)
{
SUBID_STATUS_ERROR = 3,
};
+/*
+ * libsubid_init: initialize libsubid
+ *
+ * @progname: Name to display as program. If NULL, then "(libsubid)" will be
+ * shown in error messages.
+ * @logfd: Open file pointer to pass error messages to. If NULL, then
+ * /dev/null will be opened and messages will be sent there. The
+ * default if libsubid_init() is not called is stderr (2).
+ *
+ * This function does not need to be called. If not called, then the defaults
+ * will be used.
+ *
+ * Returns false if an error occurred.
+ */
+bool libsubid_init(const char *progname, FILE *logfd);
+
/*
* get_subuid_ranges: return a list of UID ranges for a user
*
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool
dflg = false, /* set last password change date */
* Get the program name so that error messages can use it.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
sanitize_env ();
(void) setlocale (LC_ALL, "");
#include "idmapping.h"
const char *Prog;
+FILE *shadow_logfd = NULL;
int main(int argc, char **argv)
{
unsigned long start, count;
bool check_uids;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
if (argc != 5)
exit(1);
* Global variables.
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char fullnm[BUFSIZ];
static char roomno[BUFSIZ];
static char workph[BUFSIZ];
* prefix to most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
sanitize_env ();
(void) setlocale (LC_ALL, "");
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool eflg = false;
static bool md5flg = false;
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
int line = 0;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool eflg = false;
static bool md5flg = false;
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT) || defined(USE_YESCRYPT)
int line = 0;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog; /* Program name */
+FILE *shadow_logfd = NULL;
static bool amroot; /* Real UID is root */
static char loginsh[BUFSIZ]; /* Name of new login shell */
/* command line options */
* most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
/* Global variables */
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool cflg = false;
/* local function prototypes */
struct spwd *spwd;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
sanitize_env ();
* Global variables
*/
const char *Prog; /* Program name */
+FILE *shadow_logfd = NULL;
static FILE *fail; /* failure file stream */
static time_t seconds; /* that number of days in seconds */
static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
* most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
/* Test program for the subid freeing routine */
const char *Prog;
+FILE *shadow_logfd = NULL;
void usage(void)
{
bool group = false; // get subuids by default
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
while ((c = getopt(argc, argv, "g")) != EOF) {
switch(c) {
case 'g': group = true; break;
#include "prototypes.h"
const char *Prog;
+FILE *shadow_logfd = NULL;
void usage(void)
{
uid_t *uids;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
if (argc < 2) {
usage();
}
*/
/* The name of this command, as it is invoked */
const char *Prog;
+FILE *shadow_logfd = NULL;
#ifdef SHADOWGRP
/* Indicate if shadow groups are enabled on the system
*/
bywho = getuid ();
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
OPENLOG ("gpasswd");
setbuf (stdout, NULL);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static /*@null@*/char *group_name;
static gid_t group_id;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char *group_name;
static gid_t group_id = -1;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char *adduser = NULL;
static char *deluser = NULL;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
#ifdef SHADOWGRP
static bool is_shadow_grp;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
/* local function prototypes */
static void print_groups (const char *member);
* Get the program name so that error messages can use it.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
if (argc == 1) {
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static const char *grp_file = GROUP_FILE;
static bool use_system_grp_file = true;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool gr_locked = false;
static bool sgr_locked = false;
struct sgrp sgent;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool gr_locked = false;
static bool sgr_locked = false;
const struct sgrp *sg;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog; /* Program name */
+FILE *shadow_logfd = NULL;
static FILE *lastlogfile; /* lastlog file stream */
static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
static bool has_umin = false;
* most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
#include "prototypes.h"
const char *Prog;
+FILE *shadow_logfd = NULL;
void usage(void)
{
struct subordinate_range **ranges;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
if (argc < 2) {
usage();
}
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static const char *hostname = "";
static /*@null@*/ /*@only@*/char *username = NULL;
amroot = (getuid () == 0);
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
if (geteuid() != 0) {
fprintf (stderr, _("%s: Cannot possibly work without effective root\n"), Prog);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
#ifndef DEFAULT_HUP_MESG
#define DEFAULT_HUP_MESG _("login time exceeded\n\n")
* Start syslogging everything
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
OPENLOG ("logoutd");
/* Test program for the subid creation routine */
const char *Prog;
+FILE *shadow_logfd = NULL;
void usage(void)
{
bool ok;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
while ((c = getopt(argc, argv, "gn")) != EOF) {
switch(c) {
case 'n': makenew = true; break;
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool verify_range(struct passwd *pw, struct map_range *range, bool *allow_setgroups)
bool allow_setgroups = false;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
/*
* The valid syntax are
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
extern char **newenvp;
extern char **environ;
* don't need to re-exec anything. -- JWP
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
is_newgrp = (strcmp (Prog, "newgrp") == 0);
OPENLOG (is_newgrp ? "newgrp" : "sg");
argc--;
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool verify_range(struct passwd *pw, struct map_range *range)
{
int written;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
/*
* The valid syntax are
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool rflg = false; /* create a system account */
#ifndef USE_PAM
#endif /* USE_PAM */
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog; /* Program name */
+FILE *shadow_logfd = NULL;
static char *name; /* The name of user whose password is being changed */
static char *myname; /* The current user's name */
* most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool use_system_pw_file = true;
static bool use_system_spw_file = true;
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool spw_locked = false;
static bool pw_locked = false;
struct spwd spent;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static bool spw_locked = false;
static bool pw_locked = false;
const struct spwd *spwd;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static /*@observer@*/const char *caller_tty = NULL; /* Name of tty SU is run from */
static bool caller_is_root = false;
static uid_t caller_uid;
* most error messages.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
caller_uid = getuid ();
caller_is_root = (caller_uid == 0);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char name[BUFSIZ];
static char pass[BUFSIZ];
#endif
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
/*
* These defaults are used if there is no defaults file.
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char *user_name;
static uid_t user_id;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static char *user_name;
static char *user_newname;
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);
* Global variables
*/
const char *Prog;
+FILE *shadow_logfd = NULL;
static const char *filename, *fileeditname;
static bool filelocked = false;
bool do_vipw;
Prog = Basename (argv[0]);
+ shadow_logfd = stderr;
(void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR);