Skip pam if running as root

Reported-by: Piotr Karbowski <piotr.karbowski@gmail.com>
X-Gentoo-Bug: 386623
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=386623
This commit is contained in:
William Hubbs 2012-02-23 16:47:52 -06:00
parent 3247184d86
commit 3272261479

View File

@ -1178,12 +1178,9 @@ start_stop_daemon(int argc, char **argv)
} }
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (changeuser != NULL) if (changeuser != NULL) {
pamr = pam_start("start-stop-daemon", pamr = pam_start("start-stop-daemon",
changeuser, &conv, &pamh); changeuser, &conv, &pamh);
else
pamr = pam_start("start-stop-daemon",
"nobody", &conv, &pamh);
if (pamr == PAM_SUCCESS) if (pamr == PAM_SUCCESS)
pamr = pam_acct_mgmt(pamh, PAM_SILENT); pamr = pam_acct_mgmt(pamh, PAM_SILENT);
@ -1192,6 +1189,7 @@ start_stop_daemon(int argc, char **argv)
if (pamr != PAM_SUCCESS) if (pamr != PAM_SUCCESS)
eerrorx("%s: pam error: %s", eerrorx("%s: pam error: %s",
applet, pam_strerror(pamh, pamr)); applet, pam_strerror(pamh, pamr));
}
#endif #endif
if (gid && setgid(gid)) if (gid && setgid(gid))
@ -1219,6 +1217,7 @@ start_stop_daemon(int argc, char **argv)
rc_stringlist_add(env_list, environ[i++]); rc_stringlist_add(env_list, environ[i++]);
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (changeuser != NULL) {
pamenv = (const char *const *)pam_getenvlist(pamh); pamenv = (const char *const *)pam_getenvlist(pamh);
if (pamenv) { if (pamenv) {
while (*pamenv) { while (*pamenv) {
@ -1230,6 +1229,7 @@ start_stop_daemon(int argc, char **argv)
pamenv++; pamenv++;
} }
} }
}
#endif #endif
TAILQ_FOREACH(env, env_list, entries) { TAILQ_FOREACH(env, env_list, entries) {
@ -1304,7 +1304,7 @@ start_stop_daemon(int argc, char **argv)
setsid(); setsid();
execvp(exec, argv); execvp(exec, argv);
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (pamr == PAM_SUCCESS) if (changeuser != NULL && pamr == PAM_SUCCESS)
pam_close_session(pamh, PAM_SILENT); pam_close_session(pamh, PAM_SILENT);
#endif #endif
eerrorx("%s: failed to exec `%s': %s", eerrorx("%s: failed to exec `%s': %s",