mirror of
https://github.com/samba-team/samba.git
synced 2025-01-22 22:04:08 +03:00
r10213: fixed a memory leak in the ldap client and server code spotted by Karl
Melcher. ldap_encode() now takes a memory context to use for the data blob (This used to be commit 09948a59336a7f02bf2b4605f2d4d886e65b85f2)
This commit is contained in:
parent
234481fd40
commit
a129ad36eb
@ -87,12 +87,14 @@ static void ldapsrv_process_message(struct ldapsrv_connection *conn,
|
||||
DATA_BLOB b;
|
||||
|
||||
msg = call->replies->msg;
|
||||
if (!ldap_encode(msg, &b)) {
|
||||
if (!ldap_encode(msg, &b, call)) {
|
||||
DEBUG(0,("Failed to encode ldap reply of type %d\n", msg->type));
|
||||
goto failed;
|
||||
}
|
||||
|
||||
status = data_blob_append(call, &blob, b.data, b.length);
|
||||
data_blob_free(&b);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) goto failed;
|
||||
|
||||
DLIST_REMOVE(call->replies, call->replies);
|
||||
|
@ -337,12 +337,11 @@ struct cldap_request *cldap_search_send(struct cldap_socket *cldap,
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (!ldap_encode(msg, &req->encoded)) {
|
||||
if (!ldap_encode(msg, &req->encoded, req)) {
|
||||
DEBUG(0,("Failed to encode cldap message to %s:%d\n",
|
||||
req->dest_addr, req->dest_port));
|
||||
goto failed;
|
||||
}
|
||||
talloc_steal(req, req->encoded.data);
|
||||
|
||||
DLIST_ADD_END(cldap->send_queue, req, struct cldap_request *);
|
||||
|
||||
@ -389,13 +388,12 @@ NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io)
|
||||
msg->type = LDAP_TAG_SearchResultEntry;
|
||||
msg->r.SearchResultEntry = *io->response;
|
||||
|
||||
if (!ldap_encode(msg, &blob1)) {
|
||||
if (!ldap_encode(msg, &blob1, req)) {
|
||||
DEBUG(0,("Failed to encode cldap message to %s:%d\n",
|
||||
req->dest_addr, req->dest_port));
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto failed;
|
||||
}
|
||||
talloc_steal(req, blob1.data);
|
||||
} else {
|
||||
blob1 = data_blob(NULL, 0);
|
||||
}
|
||||
@ -403,13 +401,12 @@ NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io)
|
||||
msg->type = LDAP_TAG_SearchResultDone;
|
||||
msg->r.SearchResultDone = *io->result;
|
||||
|
||||
if (!ldap_encode(msg, &blob2)) {
|
||||
if (!ldap_encode(msg, &blob2, req)) {
|
||||
DEBUG(0,("Failed to encode cldap message to %s:%d\n",
|
||||
req->dest_addr, req->dest_port));
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto failed;
|
||||
}
|
||||
talloc_steal(req, blob2.data);
|
||||
|
||||
req->encoded = data_blob_talloc(req, NULL, blob1.length + blob2.length);
|
||||
if (req->encoded.data == NULL) goto failed;
|
||||
|
@ -189,7 +189,7 @@ static void ldap_encode_response(struct asn1_data *data, struct ldap_Result *res
|
||||
}
|
||||
}
|
||||
|
||||
BOOL ldap_encode(struct ldap_message *msg, DATA_BLOB *result)
|
||||
BOOL ldap_encode(struct ldap_message *msg, DATA_BLOB *result, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
struct asn1_data data;
|
||||
int i, j;
|
||||
@ -462,7 +462,7 @@ BOOL ldap_encode(struct ldap_message *msg, DATA_BLOB *result)
|
||||
return False;
|
||||
}
|
||||
|
||||
*result = data_blob(data.data, data.length);
|
||||
*result = data_blob_talloc(mem_ctx, data.data, data.length);
|
||||
asn1_free(&data);
|
||||
return True;
|
||||
}
|
||||
|
@ -497,7 +497,7 @@ struct ldap_request *ldap_request_send(struct ldap_connection *conn,
|
||||
|
||||
msg->messageid = req->messageid;
|
||||
|
||||
if (!ldap_encode(msg, &req->data)) {
|
||||
if (!ldap_encode(msg, &req->data, req)) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user