static int ChangeUser(const char *user) { struct passwd *pas; const char *err_msg; /* * Obtain password entry and change privileges */ pas = getpwnam(user); if (pas == 0) { crondlog("\011failed to get uid for %s", user); return (-1); } setenv("USER", pas->pw_name, 1); setenv("HOME", pas->pw_dir, 1); setenv("SHELL", DEFAULT_SHELL, 1); /* * Change running state to the user in question */ err_msg = change_identity_e2str(pas); if (err_msg) { crondlog("\011%s for user %s", err_msg, user); return (-1); } if (chdir(pas->pw_dir) < 0) { crondlog("\011chdir failed: %s: %m", pas->pw_dir); if (chdir(TMPDIR) < 0) { crondlog("\011chdir failed: %s: %m", TMPDIR); return (-1); } } return (pas->pw_uid); }
void change_identity(const struct passwd *pw) { const char *err_msg = change_identity_e2str(pw); if (err_msg) bb_perror_msg_and_die("%s", err_msg); }