1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

r1414: Memory leak fixes found by valgrind whilst checking the password history code.

Error code paths were not freeing up some memory.
Jeremy.
(This used to be commit 7c4666e56c)
This commit is contained in:
Jeremy Allison 2004-07-09 00:13:55 +00:00 committed by Gerald (Jerry) Carter
parent d4ac326d46
commit cd87b3b972
4 changed files with 45 additions and 19 deletions

View File

@ -231,6 +231,8 @@ static NTSTATUS check_sam_security(const struct auth_context *auth_context,
DEBUG(1, ("Failed to modify entry.\n"));
unbecome_root();
}
data_blob_free(&user_sess_key);
data_blob_free(&lm_sess_key);
pdb_free_sam(&sampass);
return nt_status;
}
@ -253,11 +255,15 @@ static NTSTATUS check_sam_security(const struct auth_context *auth_context,
if (!NT_STATUS_IS_OK(nt_status)) {
pdb_free_sam(&sampass);
data_blob_free(&user_sess_key);
data_blob_free(&lm_sess_key);
return nt_status;
}
if (!NT_STATUS_IS_OK(nt_status = make_server_info_sam(server_info, sampass))) {
DEBUG(0,("check_sam_security: make_server_info_sam() failed with '%s'\n", nt_errstr(nt_status)));
data_blob_free(&user_sess_key);
data_blob_free(&lm_sess_key);
return nt_status;
}

View File

@ -52,28 +52,28 @@ struct dcinfo last_dcinfo;
static void NTLMSSPcalc_p( pipes_struct *p, unsigned char *data, int len)
{
unsigned char *hash = p->ntlmssp_hash;
unsigned char index_i = hash[256];
unsigned char index_j = hash[257];
int ind;
unsigned char *hash = p->ntlmssp_hash;
unsigned char index_i = hash[256];
unsigned char index_j = hash[257];
int ind;
for( ind = 0; ind < len; ind++) {
unsigned char tc;
unsigned char t;
for( ind = 0; ind < len; ind++) {
unsigned char tc;
unsigned char t;
index_i++;
index_j += hash[index_i];
index_i++;
index_j += hash[index_i];
tc = hash[index_i];
hash[index_i] = hash[index_j];
hash[index_j] = tc;
tc = hash[index_i];
hash[index_i] = hash[index_j];
hash[index_j] = tc;
t = hash[index_i] + hash[index_j];
data[ind] = data[ind] ^ hash[t];
}
t = hash[index_i] + hash[index_j];
data[ind] = data[ind] ^ hash[t];
}
hash[256] = index_i;
hash[257] = index_j;
hash[256] = index_i;
hash[257] = index_j;
}
/*******************************************************************

View File

@ -1091,6 +1091,22 @@ BOOL close_rpc_pipe_hnd(smb_np_struct *p)
return True;
}
/****************************************************************************
Close all pipes on a connection.
****************************************************************************/
void pipe_close_conn(connection_struct *conn)
{
smb_np_struct *p, *next;
for (p=Pipes;p;p=next) {
next = p->next;
if (p->conn == conn) {
close_rpc_pipe_hnd(p);
}
}
}
/****************************************************************************
Close an rpc pipe.
****************************************************************************/

View File

@ -823,8 +823,12 @@ void close_cnum(connection_struct *conn, uint16 vuid)
{
DirCacheFlush(SNUM(conn));
file_close_conn(conn);
dptr_closecnum(conn);
if (IS_IPC(conn)) {
pipe_close_conn(conn);
} else {
file_close_conn(conn);
dptr_closecnum(conn);
}
change_to_root_user();