From 609a510a217d67c40e3e0f6886f9b7dfc642c289 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 20 Jun 2006 11:35:15 +0000 Subject: [PATCH] maxime's leak fix patches SVN revision: 23508 --- src/bin/e_desklock.c | 42 +++++++++++++++++++++++++++++++++--------- src/bin/e_ipc_codec.c | 4 ++++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index a63ffab5a..701f4cf5c 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -583,19 +583,29 @@ _desklock_auth(const char *passwd) /* child */ int pamerr; E_Desklock_Auth da; - - strncpy(da.user, _desklock_auth_get_current_user(), PATH_MAX); + char *current_user; + + strncpy(da.user, current_user, PATH_MAX); strncpy(da.passwd, passwd, PATH_MAX); da.pam.handle = NULL; da.pam.conv.conv = NULL; da.pam.conv.appdata_ptr = NULL; pamerr = _desklock_pam_init(&da); - if (pamerr != PAM_SUCCESS) exit(pamerr); + if (pamerr != PAM_SUCCESS) + { + free(current_user); + exit(pamerr); + } pamerr = pam_authenticate(da.pam.handle, 0); pam_end(da.pam.handle, pamerr); memset(da.passwd, 0, sizeof(da.passwd)); - if (pamerr == PAM_SUCCESS) exit(0); + if (pamerr == PAM_SUCCESS) + { + free(current_user); + exit(0); + } + free(current_user); exit(-1); } return 1; @@ -616,6 +626,8 @@ static int _desklock_pam_init(E_Desklock_Auth *da) { int pamerr; + char *current_host; + char *current_user; if (!da) return -1; @@ -626,15 +638,27 @@ _desklock_pam_init(E_Desklock_Auth *da) if ((pamerr = pam_start("system-auth", da->user, &(da->pam.conv), &(da->pam.handle))) != PAM_SUCCESS) return pamerr; - + + current_user = _desklock_auth_get_current_user(); + if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, - _desklock_auth_get_current_user())) != PAM_SUCCESS) - return pamerr; + current_user)) != PAM_SUCCESS) + { + free(current_user); + return pamerr; + } + current_host = _desklock_auth_get_current_host(); if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, - _desklock_auth_get_current_host())) != PAM_SUCCESS) - return pamerr; + current_host)) != PAM_SUCCESS) + { + free(current_user); + free(current_host); + return pamerr; + } + free(current_user); + free(current_host); return 0; } diff --git a/src/bin/e_ipc_codec.c b/src/bin/e_ipc_codec.c index a1cb33043..75d199c60 100644 --- a/src/bin/e_ipc_codec.c +++ b/src/bin/e_ipc_codec.c @@ -155,10 +155,14 @@ e_ipc_codec_shutdown(void) E_CONFIG_DD_FREE(_e_ipc_2str_int_list_edd); E_CONFIG_DD_FREE(_e_ipc_4int_2str_edd); E_CONFIG_DD_FREE(_e_ipc_4int_2str_list_edd); + E_CONFIG_DD_FREE(_e_ipc_5int_2str_edd); + E_CONFIG_DD_FREE(_e_ipc_5int_2str_list_edd); E_CONFIG_DD_FREE(_e_ipc_3int_4str_edd); E_CONFIG_DD_FREE(_e_ipc_3int_4str_list_edd); E_CONFIG_DD_FREE(_e_ipc_3int_3str_edd); E_CONFIG_DD_FREE(_e_ipc_3int_3str_list_edd); + E_CONFIG_DD_FREE(_e_ipc_str_4int_edd); + E_CONFIG_DD_FREE(_e_ipc_str_4int_list_edd); } EAPI int