summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorNicolas FRANCOIS <nekral-guest@users.alioth.debian.org>2007-03-28 21:32:23 +0000
committerNicolas FRANCOIS <nekral-guest@users.alioth.debian.org>2007-03-28 21:32:23 +0000
commit10e84d929aa16b0ce76dc1cb2772533faffa412a (patch)
tree9ea8749244e27fafcc7521bd77d6e5f5e2bd8af6 /utils
parent64a3f7c8065d439d8a859bb79113713a0d392e3a (diff)
downloaddpkg-10e84d929aa16b0ce76dc1cb2772533faffa412a.tar.gz
Revert revision 691 (Add support for PAM sessions in start-stop-daemon.)
With daemons (i.e. except when --background is used), the session is closed too early. #376165 and #406942 will be tagged wontfix. Thanks to Guillem Jover for noticing.
Diffstat (limited to 'utils')
-rw-r--r--utils/Makefile.am2
-rw-r--r--utils/start-stop-daemon.c127
2 files changed, 2 insertions, 127 deletions
diff --git a/utils/Makefile.am b/utils/Makefile.am
index c7236d7dd..9cfd988dd 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -13,7 +13,7 @@ if WITH_START_STOP_DAEMON
start_stop_daemon_SOURCES = \
start-stop-daemon.c
- start_stop_daemon_LDADD = ../getopt/libopt.a $(SSD_LIBS) $(PAM_LIBS)
+ start_stop_daemon_LDADD = ../getopt/libopt.a $(SSD_LIBS)
endif
diff --git a/utils/start-stop-daemon.c b/utils/start-stop-daemon.c
index 4652d5158..76c39a074 100644
--- a/utils/start-stop-daemon.c
+++ b/utils/start-stop-daemon.c
@@ -140,20 +140,6 @@ static const char *progname = "";
static int nicelevel = 0;
static int umask_value = -1;
-#ifdef WITH_PAM
-#include <sys/wait.h>
-#include <security/pam_appl.h>
-#include <security/pam_misc.h>
-
-static pam_handle_t *pamh = NULL;
-static char *pam = NULL;
-
-static struct pam_conv conv = {
- misc_conv,
- NULL
-};
-#endif
-
static struct stat exec_stat;
#if defined(OSHURD)
static struct proc_stat_list *procset = NULL;
@@ -238,13 +224,6 @@ fatal(const char *format, ...)
{
va_list arglist;
-#ifdef WITH_PAM
- if (pamh) {
- int retcode = pam_close_session(pamh,0);
- pam_end(pamh,retcode);
- }
-#endif
-
fprintf(stderr, "%s: ", progname);
va_start(arglist, format);
vfprintf(stderr, format, arglist);
@@ -327,9 +306,6 @@ do_help(void)
" -r|--chroot <directory> chroot to <directory> before starting\n"
" -d|--chdir <directory> change to <directory> (default is /)\n"
" -N|--nicelevel <incr> add incr to the process's nice level\n"
-#ifdef WITH_PAM
-" -P|--pam <service> open a session with this PAM service\n"
-#endif
" -k|--umask <mask> change the umask to <mask> before starting\n"
" -b|--background force the process to detach\n"
" -m|--make-pidfile create the pidfile before starting\n"
@@ -534,11 +510,8 @@ parse_options(int argc, char * const *argv)
{ "umask", 1, NULL, 'k'},
{ "background", 0, NULL, 'b'},
{ "make-pidfile", 0, NULL, 'm'},
- { "retry", 1, NULL, 'R'},
+ { "retry", 1, NULL, 'R'},
{ "chdir", 1, NULL, 'd'},
-#ifdef WITH_PAM
- { "pam", 1, NULL, 'P'},
-#endif
{ NULL, 0, NULL, 0}
};
const char *umask_str = NULL;
@@ -625,11 +598,6 @@ parse_options(int argc, char * const *argv)
case 'd': /* --chdir /new/dir */
changedir = optarg;
break;
-#ifdef WITH_PAM
- case 'P': /* --pam <service> */
- pam = optarg;
- break;
-#endif
default:
badusage(NULL); /* message printed by getopt */
}
@@ -1358,68 +1326,6 @@ main(int argc, char **argv)
#endif
devnull_fd=open("/dev/null", O_RDWR);
}
-#ifdef WITH_PAM
- /*
- * If PAM is enabled, start the PAM library, and open a PAM
- * session.
- * Set the environment variable set by the PAM modules for the
- * daemon.
- */
- if (pam) {
- int retcode;
- char **envcp;
-
- char *pam_user;
- struct passwd *pw;
- pw = getpwuid((-1==runas_uid)?getuid():runas_uid);
- if (!pw) {
- fatal("user ID `%d' not found\n",
- (-1==runas_uid)?getuid():runas_uid);
- }
- else {
- pam_user = strdup(pw->pw_name);
- if (!pam_user)
- fatal("Unable to allocate memory: %s", strerror(errno));
- }
-
- retcode = pam_start (pam, pam_user, &conv, &pamh);
- if (PAM_SUCCESS != retcode) {
- fprintf(stderr, "%s\n", pam_strerror(pamh, retcode));
- pam_end(pamh, retcode);
- exit(2);
- }
-
- /* Some PAM modules may rely on PAM_RUSER */
- if (pam_user) {
- int retcode = pam_set_item(pamh, PAM_RUSER, pam_user);
- if (PAM_SUCCESS != retcode) {
- fprintf(stderr,
- "%s\n",
- pam_strerror(pamh, retcode));
- pam_end(pamh, retcode);
- exit(2);
- }
- }
-
- retcode = pam_open_session(pamh, 0);
- if (PAM_SUCCESS != retcode) {
- fprintf(stderr, "%s\n", pam_strerror(pamh, retcode));
- pam_end(pamh, retcode);
- exit(2);
- }
-
- /* Copy the environment variables set by the PAM modules. */
- envcp = pam_getenvlist (pamh);
- if (envcp) {
- while (*envcp) {
- int err = putenv(*envcp);
- if (err)
- fatal("Unable to set the '%s' environment variable: %s", *envcp, strerror(errno));
- envcp++;
- }
- }
- }
-#endif
if (nicelevel) {
errno=0;
if ((nice(nicelevel)==-1) && (errno!=0))
@@ -1480,37 +1386,6 @@ main(int argc, char **argv)
setpgid(0,0);
#endif
}
-#ifdef WITH_PAM
- /*
- * If PAM is enabled, fork.
- * The parent keeps the PAM session (and will do the cleanup).
- * The child will start the daemon.
- */
- if (pam) {
- int parent = fork();
- if (parent < 0) {
- fatal("Unable to fork.\n");
- }
- if (parent) {
- /* parent: wait for child to finish,
- * then cleanup the PAM session.
- */
- int retcode;
- int status = 1;
- wait(&status);
-
- retcode = pam_close_session(pamh,0);
- pam_end(pamh,retcode);
-
- if (WIFSIGNALED(status))
- status = 1;
- else
- status = WEXITSTATUS(status);
- exit(status);
- }
- /* Only child continue */
- }
-#endif
execv(startas, argv);
fatal("Unable to start %s: %s", startas, strerror(errno));
}