]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
su: move PAM session initialization to separate function
authorKarel Zak <kzak@redhat.com>
Wed, 9 Nov 2016 13:15:31 +0000 (14:15 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 18 Sep 2017 09:48:56 +0000 (11:48 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
login-utils/su-common.c

index 6f82b3cd0d3620e25a72e0b33da950520bafebb0..e004e22cf0ecc028a4e748ed6921ebc2dd35c514 100644 (file)
@@ -268,22 +268,25 @@ static void supam_authenticate(struct su_context *su)
        }
 }
 
-static void
-create_watching_parent(struct su_context *su)
+static void supam_open_session(struct su_context *su)
 {
-       pid_t child;
-       sigset_t ourset;
-       struct sigaction oldact[3];
-       int status = 0;
-       int rc;
+       int rc = pam_open_session(su->pamh, 0);
 
-       rc = pam_open_session(su->pamh, 0);
        if (is_pam_failure(rc)) {
                supam_cleanup(su, rc);
                errx(EXIT_FAILURE, _("cannot open session: %s"),
                     pam_strerror(su->pamh, rc));
        } else
                su->pam_has_session = 1;
+}
+
+
+static void create_watching_parent(struct su_context *su)
+{
+       pid_t child;
+       sigset_t ourset;
+       struct sigaction oldact[3];
+       int status = 0;
 
        memset(oldact, 0, sizeof(oldact));
 
@@ -853,6 +856,8 @@ int su_main(int argc, char **argv, int mode)
        if (!su->simulate_login || command)
                su->suppress_pam_info = 1;      /* don't print PAM info messages */
 
+       supam_open_session(su);
+
        create_watching_parent(su);
        /* Now we're in the child.  */