diff --git a/src/daemon/entrance_pam.c b/src/daemon/entrance_pam.c index 7529d67..5431588 100644 --- a/src/daemon/entrance_pam.c +++ b/src/daemon/entrance_pam.c @@ -130,11 +130,12 @@ entrance_pam_open_session(void) } void -entrance_pam_close_session(void) +entrance_pam_close_session(const Eina_Bool opened) { PT("PAM close session\n"); last_result = pam_close_session(_pam_handle, PAM_SILENT); - switch (last_result) { + switch (last_result) + { default: //case PAM_SESSION_ERROR: PT("error on close session"); @@ -142,19 +143,22 @@ entrance_pam_close_session(void) entrance_pam_end(); case PAM_SUCCESS: break; - }; - last_result = pam_setcred(_pam_handle, PAM_DELETE_CRED); - switch(last_result) { - default: - case PAM_CRED_ERR: - case PAM_CRED_UNAVAIL: - case PAM_CRED_EXPIRED: - case PAM_USER_UNKNOWN: - entrance_pam_end(); - case PAM_SUCCESS: - break; - }; - return; + } + if (opened) + { + last_result = pam_setcred(_pam_handle, PAM_DELETE_CRED); + switch(last_result) + { + default: + case PAM_CRED_ERR: + case PAM_CRED_UNAVAIL: + case PAM_CRED_EXPIRED: + case PAM_USER_UNKNOWN: + entrance_pam_end(); + case PAM_SUCCESS: + break; + } + } } int diff --git a/src/daemon/entrance_pam.h b/src/daemon/entrance_pam.h index a6d00ec..330edee 100644 --- a/src/daemon/entrance_pam.h +++ b/src/daemon/entrance_pam.h @@ -20,7 +20,7 @@ char **entrance_pam_env_list_get(void); int entrance_pam_init(const char *service, const char *display, const char *user); void entrance_pam_shutdown(void); int entrance_pam_open_session(void); -void entrance_pam_close_session(void); +void entrance_pam_close_session(Eina_Bool opened); int entrance_pam_authenticate(void); int entrance_pam_auth_set(const char *login, const char *passwd); int entrance_pam_end(void); diff --git a/src/daemon/entrance_server.c b/src/daemon/entrance_server.c index c27346c..9c23226 100644 --- a/src/daemon/entrance_server.c +++ b/src/daemon/entrance_server.c @@ -89,12 +89,12 @@ _entrance_server_read_cb(const void *data, size_t size EINA_UNUSED, void *user_d PT("opening session now ...\n"); entrance_session_login(eev->event.auth.session, EINA_TRUE); } -// else -// entrance_session_close(); + else + entrance_session_close(EINA_FALSE); } else { - entrance_session_close(); + entrance_session_close(EINA_FALSE); neev.event.status.login = NULL; neev.event.status.granted = EINA_FALSE; PT("server authenticate error\n"); diff --git a/src/daemon/entrance_session.c b/src/daemon/entrance_session.c index f71aba3..195461c 100644 --- a/src/daemon/entrance_session.c +++ b/src/daemon/entrance_session.c @@ -201,14 +201,14 @@ entrance_session_end(const char *user) "%s %s ", entrance_config->command.session_stop, user); if (-1 == system(buf)) PT("Error on session stop command\n"); - entrance_session_close(); + entrance_session_close(EINA_TRUE); } void -entrance_session_close(void) +entrance_session_close(const Eina_Bool opened) { #ifdef HAVE_PAM - entrance_pam_close_session(); + entrance_pam_close_session(opened); entrance_pam_end(); entrance_pam_shutdown(); #endif diff --git a/src/daemon/entrance_session.h b/src/daemon/entrance_session.h index 4511d73..46782de 100644 --- a/src/daemon/entrance_session.h +++ b/src/daemon/entrance_session.h @@ -6,7 +6,7 @@ void entrance_session_init(const char *dname); void entrance_session_end(const char *login); void entrance_session_shutdown(); Eina_Bool entrance_session_authenticate(const char *login, const char *pwd); -void entrance_session_close(void); +void entrance_session_close(Eina_Bool opened); Eina_Bool entrance_session_login(const char *command, Eina_Bool push); void entrance_session_pid_set(pid_t pid); pid_t entrance_session_pid_get();