yoz pushed a commit to branch master.

http://git.enlightenment.org/misc/entrance.git/commit/?id=ccdf5ab8f5c4b9c5eaa080f4da88b15d74f1eb62

commit ccdf5ab8f5c4b9c5eaa080f4da88b15d74f1eb62
Author: Michael Bouchaud <y...@efl.so>
Date:   Wed Jan 8 23:49:40 2014 +0100

    entrance: fix previous segv :)
---
 src/daemon/entrance_pam.c     | 34 +++++++++++++++++++---------------
 src/daemon/entrance_pam.h     |  2 +-
 src/daemon/entrance_server.c  |  6 +++---
 src/daemon/entrance_session.c |  6 +++---
 src/daemon/entrance_session.h |  2 +-
 5 files changed, 27 insertions(+), 23 deletions(-)

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();

-- 


Reply via email to