From c3ab8f90c5f29e9a5e011372211296a54e45c927 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Aug 2012 11:24:18 -0500 Subject: Setting up a pipe to communicate with the sub process --- src/pam-freerdp.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/pam-freerdp.c') diff --git a/src/pam-freerdp.c b/src/pam-freerdp.c index 5696bbd..9007a52 100644 --- a/src/pam-freerdp.c +++ b/src/pam-freerdp.c @@ -250,7 +250,7 @@ done: } static int -session_socket_handler (struct passwd * pwdent, const char * ruser, const char * rhost, const char * rdomain, const char * password) +session_socket_handler (struct passwd * pwdent, int readypipe, const char * ruser, const char * rhost, const char * rdomain, const char * password) { /* Socket stuff */ int socketfd = 0; @@ -402,16 +402,27 @@ pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char ** argv goto done; } + int sessionready[2]; + if (pipe(sessionready) != 0) { + retval = PAM_SYSTEM_ERR; + goto done; + } + pid_t pid = fork(); if (pid == 0) { int retval = 0; - retval = session_socket_handler(pwdent, ruser, rhost, rdomain, password); + retval = session_socket_handler(pwdent, sessionready[1], ruser, rhost, rdomain, password); + close(sessionready[1]); _exit(retval); } else if (pid < 0) { + close(sessionready[0]); + close(sessionready[1]); + retval = PAM_SYSTEM_ERR; } else { + close(sessionready[0]); session_pid = pid; } -- cgit v1.2.3