diff options
-rw-r--r-- | libcli/cldap/cldap.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c index 964cb0a18cd..dd9d40b0c36 100644 --- a/libcli/cldap/cldap.c +++ b/libcli/cldap/cldap.c @@ -220,7 +220,6 @@ nomem: static bool cldap_socket_recv_dgram(struct cldap_socket *c, struct cldap_incoming *in) { - DATA_BLOB blob; struct asn1_data *asn1; void *p; struct cldap_search_state *search; @@ -230,16 +229,12 @@ static bool cldap_socket_recv_dgram(struct cldap_socket *c, goto error; } - blob = data_blob_const(in->buf, in->len); - asn1 = asn1_init(in); if (!asn1) { goto nomem; } - if (!asn1_load(asn1, blob)) { - goto nomem; - } + asn1_load_nocopy(asn1, in->buf, in->len); in->ldap_msg = talloc(in, struct ldap_message); if (in->ldap_msg == NULL) { @@ -267,8 +262,11 @@ static bool cldap_socket_recv_dgram(struct cldap_socket *c, search = talloc_get_type_abort(p, struct cldap_search_state); search->response.in = talloc_move(search, &in); + search->response.asn1 = asn1; - search->response.asn1->ofs = 0; + + asn1_load_nocopy(search->response.asn1, + search->response.in->buf, search->response.in->len); DLIST_REMOVE(c->searches.list, search); |