Michal Schmidt e43452
From 859dc200c20c5dd7e49e443bd29ab6c31dfb0b69 Mon Sep 17 00:00:00 2001
Michal Schmidt e43452
From: Michal Schmidt <mschmidt@redhat.com>
Michal Schmidt e43452
Date: Thu, 17 Nov 2011 00:16:22 +0100
Michal Schmidt f1996e
Subject: [PATCH] execute: make setup_pam() return -errno when possible
Michal Schmidt e43452
Michal Schmidt e43452
The only caller currently checks if the result is non-zero,
Michal Schmidt e43452
so nothing changes there.
Michal Schmidt e43452
(cherry picked from commit 9ba353983adc026b75a503c1381f6e5c8062f3e0)
Michal Schmidt e43452
---
Michal Schmidt e43452
 src/execute.c |    8 +++++++-
Michal Schmidt e43452
 1 files changed, 7 insertions(+), 1 deletions(-)
Michal Schmidt e43452
Michal Schmidt e43452
diff --git a/src/execute.c b/src/execute.c
Michal Schmidt e43452
index 0651014..2039861 100644
Michal Schmidt e43452
--- a/src/execute.c
Michal Schmidt e43452
+++ b/src/execute.c
Michal Schmidt e43452
@@ -716,6 +716,7 @@ static int setup_pam(
Michal Schmidt e43452
         pam_handle_t *handle = NULL;
Michal Schmidt e43452
         sigset_t ss, old_ss;
Michal Schmidt e43452
         int pam_code = PAM_SUCCESS;
Michal Schmidt e43452
+        int err;
Michal Schmidt e43452
         char **e = NULL;
Michal Schmidt e43452
         bool close_session = false;
Michal Schmidt e43452
         pid_t pam_pid = 0, parent_pid;
Michal Schmidt e43452
@@ -835,6 +836,11 @@ static int setup_pam(
Michal Schmidt e43452
         return 0;
Michal Schmidt e43452
 
Michal Schmidt e43452
 fail:
Michal Schmidt e43452
+        if (pam_code != PAM_SUCCESS)
Michal Schmidt e43452
+                err = -EPERM;  /* PAM errors do not map to errno */
Michal Schmidt e43452
+        else
Michal Schmidt e43452
+                err = -errno;
Michal Schmidt e43452
+
Michal Schmidt e43452
         if (handle) {
Michal Schmidt e43452
                 if (close_session)
Michal Schmidt e43452
                         pam_code = pam_close_session(handle, PAM_DATA_SILENT);
Michal Schmidt e43452
@@ -851,7 +857,7 @@ fail:
Michal Schmidt e43452
                 kill(pam_pid, SIGCONT);
Michal Schmidt e43452
         }
Michal Schmidt e43452
 
Michal Schmidt e43452
-        return EXIT_PAM;
Michal Schmidt e43452
+        return err;
Michal Schmidt e43452
 }
Michal Schmidt e43452
 #endif
Michal Schmidt e43452