maxime's leak fix patches

SVN revision: 23508
This commit is contained in:
Carsten Haitzler 2006-06-20 11:35:15 +00:00
parent 0d4723e3b7
commit 609a510a21
2 changed files with 37 additions and 9 deletions

View File

@ -583,19 +583,29 @@ _desklock_auth(const char *passwd)
/* child */ /* child */
int pamerr; int pamerr;
E_Desklock_Auth da; E_Desklock_Auth da;
char *current_user;
strncpy(da.user, _desklock_auth_get_current_user(), PATH_MAX); strncpy(da.user, current_user, PATH_MAX);
strncpy(da.passwd, passwd, PATH_MAX); strncpy(da.passwd, passwd, PATH_MAX);
da.pam.handle = NULL; da.pam.handle = NULL;
da.pam.conv.conv = NULL; da.pam.conv.conv = NULL;
da.pam.conv.appdata_ptr = NULL; da.pam.conv.appdata_ptr = NULL;
pamerr = _desklock_pam_init(&da); 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); pamerr = pam_authenticate(da.pam.handle, 0);
pam_end(da.pam.handle, pamerr); pam_end(da.pam.handle, pamerr);
memset(da.passwd, 0, sizeof(da.passwd)); 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); exit(-1);
} }
return 1; return 1;
@ -616,6 +626,8 @@ static int
_desklock_pam_init(E_Desklock_Auth *da) _desklock_pam_init(E_Desklock_Auth *da)
{ {
int pamerr; int pamerr;
char *current_host;
char *current_user;
if (!da) return -1; if (!da) return -1;
@ -627,14 +639,26 @@ _desklock_pam_init(E_Desklock_Auth *da)
&(da->pam.handle))) != PAM_SUCCESS) &(da->pam.handle))) != PAM_SUCCESS)
return pamerr; return pamerr;
current_user = _desklock_auth_get_current_user();
if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, if ((pamerr = pam_set_item(da->pam.handle, PAM_USER,
_desklock_auth_get_current_user())) != PAM_SUCCESS) current_user)) != PAM_SUCCESS)
return pamerr; {
free(current_user);
return pamerr;
}
current_host = _desklock_auth_get_current_host();
if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST,
_desklock_auth_get_current_host())) != PAM_SUCCESS) current_host)) != PAM_SUCCESS)
return pamerr; {
free(current_user);
free(current_host);
return pamerr;
}
free(current_user);
free(current_host);
return 0; return 0;
} }

View File

@ -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_2str_int_list_edd);
E_CONFIG_DD_FREE(_e_ipc_4int_2str_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_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_edd);
E_CONFIG_DD_FREE(_e_ipc_3int_4str_list_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_edd);
E_CONFIG_DD_FREE(_e_ipc_3int_3str_list_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 EAPI int