Zbigniew Jędrzejewski-Szmek 794d16
From 669ac5ee25f166bdf688b06f96e8e8fd3cf9f43c Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 794d16
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 794d16
Date: Wed, 28 Aug 2013 08:01:30 -0400
Zbigniew Jędrzejewski-Szmek 794d16
Subject: [PATCH] execute: more debugging messages
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
---
Zbigniew Jędrzejewski-Szmek 794d16
 src/core/execute.c     | 35 +++++++++++++++++++++--------------
Zbigniew Jędrzejewski-Szmek 794d16
 src/login/pam-module.c |  3 ++-
Zbigniew Jędrzejewski-Szmek 794d16
 2 files changed, 23 insertions(+), 15 deletions(-)
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
diff --git a/src/core/execute.c b/src/core/execute.c
Zbigniew Jędrzejewski-Szmek 794d16
index 3979f35..3f7ca52 100644
Zbigniew Jędrzejewski-Szmek 794d16
--- a/src/core/execute.c
Zbigniew Jędrzejewski-Szmek 794d16
+++ b/src/core/execute.c
Zbigniew Jędrzejewski-Szmek 794d16
@@ -317,12 +317,12 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty
Zbigniew Jędrzejewski-Szmek 794d16
         case EXEC_INPUT_TTY_FAIL: {
Zbigniew Jędrzejewski-Szmek 794d16
                 int fd, r;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                if ((fd = acquire_terminal(
Zbigniew Jędrzejewski-Szmek 794d16
-                                     tty_path(context),
Zbigniew Jędrzejewski-Szmek 794d16
-                                     i == EXEC_INPUT_TTY_FAIL,
Zbigniew Jędrzejewski-Szmek 794d16
-                                     i == EXEC_INPUT_TTY_FORCE,
Zbigniew Jędrzejewski-Szmek 794d16
-                                     false,
Zbigniew Jędrzejewski-Szmek 794d16
-                                     (usec_t) -1)) < 0)
Zbigniew Jędrzejewski-Szmek 794d16
+                fd = acquire_terminal(tty_path(context),
Zbigniew Jędrzejewski-Szmek 794d16
+                                      i == EXEC_INPUT_TTY_FAIL,
Zbigniew Jędrzejewski-Szmek 794d16
+                                      i == EXEC_INPUT_TTY_FORCE,
Zbigniew Jędrzejewski-Szmek 794d16
+                                      false,
Zbigniew Jędrzejewski-Szmek 794d16
+                                      (usec_t) -1);
Zbigniew Jędrzejewski-Szmek 794d16
+                if (fd < 0)
Zbigniew Jędrzejewski-Szmek 794d16
                         return fd;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
                 if (fd != STDIN_FILENO) {
Zbigniew Jędrzejewski-Szmek 794d16
@@ -748,6 +748,7 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
         char **e = NULL;
Zbigniew Jędrzejewski-Szmek 794d16
         bool close_session = false;
Zbigniew Jędrzejewski-Szmek 794d16
         pid_t pam_pid = 0, parent_pid;
Zbigniew Jędrzejewski-Szmek 794d16
+        int flags = 0;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         assert(name);
Zbigniew Jędrzejewski-Szmek 794d16
         assert(user);
Zbigniew Jędrzejewski-Szmek 794d16
@@ -760,6 +761,9 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
          * daemon. We do things this way to ensure that the main PID
Zbigniew Jędrzejewski-Szmek 794d16
          * of the daemon is the one we initially fork()ed. */
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
+        if (log_get_max_level() < LOG_PRI(LOG_DEBUG))
Zbigniew Jędrzejewski-Szmek 794d16
+                flags |= PAM_SILENT;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
         pam_code = pam_start(name, user, &conv, &handle);
Zbigniew Jędrzejewski-Szmek 794d16
         if (pam_code != PAM_SUCCESS) {
Zbigniew Jędrzejewski-Szmek 794d16
                 handle = NULL;
Zbigniew Jędrzejewski-Szmek 794d16
@@ -772,11 +776,11 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
                         goto fail;
Zbigniew Jędrzejewski-Szmek 794d16
         }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-        pam_code = pam_acct_mgmt(handle, PAM_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+        pam_code = pam_acct_mgmt(handle, flags);
Zbigniew Jędrzejewski-Szmek 794d16
         if (pam_code != PAM_SUCCESS)
Zbigniew Jędrzejewski-Szmek 794d16
                 goto fail;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-        pam_code = pam_open_session(handle, PAM_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+        pam_code = pam_open_session(handle, flags);
Zbigniew Jędrzejewski-Szmek 794d16
         if (pam_code != PAM_SUCCESS)
Zbigniew Jędrzejewski-Szmek 794d16
                 goto fail;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
@@ -850,7 +854,7 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
                 /* If our parent died we'll end the session */
Zbigniew Jędrzejewski-Szmek 794d16
                 if (getppid() != parent_pid) {
Zbigniew Jędrzejewski-Szmek 794d16
-                        pam_code = pam_close_session(handle, PAM_DATA_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+                        pam_code = pam_close_session(handle, flags);
Zbigniew Jędrzejewski-Szmek 794d16
                         if (pam_code != PAM_SUCCESS)
Zbigniew Jędrzejewski-Szmek 794d16
                                 goto child_finish;
Zbigniew Jędrzejewski-Szmek 794d16
                 }
Zbigniew Jędrzejewski-Szmek 794d16
@@ -858,7 +862,7 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
                 r = 0;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         child_finish:
Zbigniew Jędrzejewski-Szmek 794d16
-                pam_end(handle, pam_code | PAM_DATA_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+                pam_end(handle, pam_code | flags);
Zbigniew Jędrzejewski-Szmek 794d16
                 _exit(r);
Zbigniew Jędrzejewski-Szmek 794d16
         }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
@@ -880,16 +884,19 @@ static int setup_pam(
Zbigniew Jędrzejewski-Szmek 794d16
         return 0;
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
 fail:
Zbigniew Jędrzejewski-Szmek 794d16
-        if (pam_code != PAM_SUCCESS)
Zbigniew Jędrzejewski-Szmek 794d16
+        if (pam_code != PAM_SUCCESS) {
Zbigniew Jędrzejewski-Szmek 794d16
+                log_error("PAM failed: %s", pam_strerror(handle, pam_code));
Zbigniew Jędrzejewski-Szmek 794d16
                 err = -EPERM;  /* PAM errors do not map to errno */
Zbigniew Jędrzejewski-Szmek 794d16
-        else
Zbigniew Jędrzejewski-Szmek 794d16
+        } else {
Zbigniew Jędrzejewski-Szmek 794d16
+                log_error("PAM failed: %m");
Zbigniew Jędrzejewski-Szmek 794d16
                 err = -errno;
Zbigniew Jędrzejewski-Szmek 794d16
+        }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         if (handle) {
Zbigniew Jędrzejewski-Szmek 794d16
                 if (close_session)
Zbigniew Jędrzejewski-Szmek 794d16
-                        pam_code = pam_close_session(handle, PAM_DATA_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+                        pam_code = pam_close_session(handle, flags);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-                pam_end(handle, pam_code | PAM_DATA_SILENT);
Zbigniew Jędrzejewski-Szmek 794d16
+                pam_end(handle, pam_code | flags);
Zbigniew Jędrzejewski-Szmek 794d16
         }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         strv_free(e);
Zbigniew Jędrzejewski-Szmek 794d16
diff --git a/src/login/pam-module.c b/src/login/pam-module.c
Zbigniew Jędrzejewski-Szmek 794d16
index 49296b5..973daf7 100644
Zbigniew Jędrzejewski-Szmek 794d16
--- a/src/login/pam-module.c
Zbigniew Jędrzejewski-Szmek 794d16
+++ b/src/login/pam-module.c
Zbigniew Jędrzejewski-Szmek 794d16
@@ -199,7 +199,8 @@ _public_ PAM_EXTERN int pam_sm_open_session(
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         dbus_error_init(&error);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-        /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */
Zbigniew Jędrzejewski-Szmek 794d16
+        if (debug)
Zbigniew Jędrzejewski-Szmek 794d16
+                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
         /* Make this a NOP on non-logind systems */
Zbigniew Jędrzejewski-Szmek 794d16
         if (!logind_running())