entrance: fix previous segv :)

This commit is contained in:
Michael Bouchaud 2014-01-08 23:49:40 +01:00
parent 9b3911a4fb
commit ccdf5ab8f5
5 changed files with 27 additions and 23 deletions

View File

@ -130,11 +130,12 @@ entrance_pam_open_session(void)
} }
void void
entrance_pam_close_session(void) entrance_pam_close_session(const Eina_Bool opened)
{ {
PT("PAM close session\n"); PT("PAM close session\n");
last_result = pam_close_session(_pam_handle, PAM_SILENT); last_result = pam_close_session(_pam_handle, PAM_SILENT);
switch (last_result) { switch (last_result)
{
default: default:
//case PAM_SESSION_ERROR: //case PAM_SESSION_ERROR:
PT("error on close session"); PT("error on close session");
@ -142,19 +143,22 @@ entrance_pam_close_session(void)
entrance_pam_end(); entrance_pam_end();
case PAM_SUCCESS: case PAM_SUCCESS:
break; break;
}; }
last_result = pam_setcred(_pam_handle, PAM_DELETE_CRED); if (opened)
switch(last_result) { {
default: last_result = pam_setcred(_pam_handle, PAM_DELETE_CRED);
case PAM_CRED_ERR: switch(last_result)
case PAM_CRED_UNAVAIL: {
case PAM_CRED_EXPIRED: default:
case PAM_USER_UNKNOWN: case PAM_CRED_ERR:
entrance_pam_end(); case PAM_CRED_UNAVAIL:
case PAM_SUCCESS: case PAM_CRED_EXPIRED:
break; case PAM_USER_UNKNOWN:
}; entrance_pam_end();
return; case PAM_SUCCESS:
break;
}
}
} }
int int

View File

@ -20,7 +20,7 @@ char **entrance_pam_env_list_get(void);
int entrance_pam_init(const char *service, const char *display, const char *user); int entrance_pam_init(const char *service, const char *display, const char *user);
void entrance_pam_shutdown(void); void entrance_pam_shutdown(void);
int entrance_pam_open_session(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_authenticate(void);
int entrance_pam_auth_set(const char *login, const char *passwd); int entrance_pam_auth_set(const char *login, const char *passwd);
int entrance_pam_end(void); int entrance_pam_end(void);

View File

@ -89,12 +89,12 @@ _entrance_server_read_cb(const void *data, size_t size EINA_UNUSED, void *user_d
PT("opening session now ...\n"); PT("opening session now ...\n");
entrance_session_login(eev->event.auth.session, EINA_TRUE); entrance_session_login(eev->event.auth.session, EINA_TRUE);
} }
// else else
// entrance_session_close(); entrance_session_close(EINA_FALSE);
} }
else else
{ {
entrance_session_close(); entrance_session_close(EINA_FALSE);
neev.event.status.login = NULL; neev.event.status.login = NULL;
neev.event.status.granted = EINA_FALSE; neev.event.status.granted = EINA_FALSE;
PT("server authenticate error\n"); PT("server authenticate error\n");

View File

@ -201,14 +201,14 @@ entrance_session_end(const char *user)
"%s %s ", entrance_config->command.session_stop, user); "%s %s ", entrance_config->command.session_stop, user);
if (-1 == system(buf)) if (-1 == system(buf))
PT("Error on session stop command\n"); PT("Error on session stop command\n");
entrance_session_close(); entrance_session_close(EINA_TRUE);
} }
void void
entrance_session_close(void) entrance_session_close(const Eina_Bool opened)
{ {
#ifdef HAVE_PAM #ifdef HAVE_PAM
entrance_pam_close_session(); entrance_pam_close_session(opened);
entrance_pam_end(); entrance_pam_end();
entrance_pam_shutdown(); entrance_pam_shutdown();
#endif #endif

View File

@ -6,7 +6,7 @@ void entrance_session_init(const char *dname);
void entrance_session_end(const char *login); void entrance_session_end(const char *login);
void entrance_session_shutdown(); void entrance_session_shutdown();
Eina_Bool entrance_session_authenticate(const char *login, const char *pwd); 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); Eina_Bool entrance_session_login(const char *command, Eina_Bool push);
void entrance_session_pid_set(pid_t pid); void entrance_session_pid_set(pid_t pid);
pid_t entrance_session_pid_get(); pid_t entrance_session_pid_get();