From: Douglas Bagnall Date: Tue, 29 Dec 2015 23:07:35 +0000 (+1300) Subject: ASN1: use a talloc context in read_contextSimple X-Git-Tag: tdb-1.3.9~478 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ca1e349eb720f6be8d0d9aa0b800678813eb933;p=thirdparty%2Fsamba.git ASN1: use a talloc context in read_contextSimple Pair-programmed-with: Garming Sam Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett Reviewed-by: Garming Sam --- diff --git a/lib/util/asn1.c b/lib/util/asn1.c index 9d6d4164f10..d81e50fd9be 100644 --- a/lib/util/asn1.c +++ b/lib/util/asn1.c @@ -927,7 +927,8 @@ bool asn1_read_OctetString(struct asn1_data *data, TALLOC_CTX *mem_ctx, DATA_BLO return false; } -bool asn1_read_ContextSimple(struct asn1_data *data, uint8_t num, DATA_BLOB *blob) +bool asn1_read_ContextSimple(struct asn1_data *data, TALLOC_CTX *mem_ctx, uint8_t num, + DATA_BLOB *blob) { int len; ZERO_STRUCTP(blob); @@ -937,7 +938,7 @@ bool asn1_read_ContextSimple(struct asn1_data *data, uint8_t num, DATA_BLOB *blo data->has_error = true; return false; } - *blob = data_blob(NULL, len); + *blob = data_blob_talloc(mem_ctx, NULL, len); if ((len != 0) && (!blob->data)) { data->has_error = true; return false; diff --git a/lib/util/asn1.h b/lib/util/asn1.h index 95e7dbf634a..ddd69863574 100644 --- a/lib/util/asn1.h +++ b/lib/util/asn1.h @@ -87,7 +87,7 @@ bool asn1_check_OID(struct asn1_data *data, const char *OID); bool asn1_read_LDAPString(struct asn1_data *data, TALLOC_CTX *mem_ctx, char **s); bool asn1_read_GeneralString(struct asn1_data *data, TALLOC_CTX *mem_ctx, char **s); bool asn1_read_OctetString(struct asn1_data *data, TALLOC_CTX *mem_ctx, DATA_BLOB *blob); -bool asn1_read_ContextSimple(struct asn1_data *data, uint8_t num, DATA_BLOB *blob); +bool asn1_read_ContextSimple(struct asn1_data *data, TALLOC_CTX *mem_ctx, uint8_t num, DATA_BLOB *blob); bool asn1_read_implicit_Integer(struct asn1_data *data, int *i); bool asn1_read_Integer(struct asn1_data *data, int *i); bool asn1_read_BitString(struct asn1_data *data, TALLOC_CTX *mem_ctx, DATA_BLOB *blob, uint8_t *padding); diff --git a/libcli/ldap/ldap_message.c b/libcli/ldap/ldap_message.c index c89705bbf41..9546dce24f5 100644 --- a/libcli/ldap/ldap_message.c +++ b/libcli/ldap/ldap_message.c @@ -1232,7 +1232,7 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, if (!ldap_decode_response(msg, data, &r->response)) goto prot_err; if (asn1_peek_tag(data, ASN1_CONTEXT_SIMPLE(7))) { DATA_BLOB tmp_blob = data_blob(NULL, 0); - if (!asn1_read_ContextSimple(data, 7, &tmp_blob)) goto prot_err; + if (!asn1_read_ContextSimple(data, msg, 7, &tmp_blob)) goto prot_err; r->SASL.secblob = talloc(msg, DATA_BLOB); if (!r->SASL.secblob) { return NT_STATUS_LDAP(LDAP_OPERATIONS_ERROR); @@ -1501,7 +1501,7 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, msg->type = LDAP_TAG_ExtendedRequest; if (!asn1_start_tag(data,tag)) goto prot_err; - if (!asn1_read_ContextSimple(data, 0, &tmp_blob)) { + if (!asn1_read_ContextSimple(data, msg, 0, &tmp_blob)) { goto prot_err; } r->oid = blob2string_talloc(msg, tmp_blob); @@ -1511,7 +1511,7 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, } if (asn1_peek_tag(data, ASN1_CONTEXT_SIMPLE(1))) { - if (!asn1_read_ContextSimple(data, 1, &tmp_blob)) goto prot_err; + if (!asn1_read_ContextSimple(data, msg, 1, &tmp_blob)) goto prot_err; r->value = talloc(msg, DATA_BLOB); if (!r->value) { return NT_STATUS_LDAP(LDAP_OPERATIONS_ERROR); @@ -1535,7 +1535,7 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, if (!ldap_decode_response(msg, data, &r->response)) goto prot_err; if (asn1_peek_tag(data, ASN1_CONTEXT_SIMPLE(10))) { - if (!asn1_read_ContextSimple(data, 1, &tmp_blob)) goto prot_err; + if (!asn1_read_ContextSimple(data, msg, 1, &tmp_blob)) goto prot_err; r->oid = blob2string_talloc(msg, tmp_blob); data_blob_free(&tmp_blob); if (!r->oid) { @@ -1546,7 +1546,7 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, } if (asn1_peek_tag(data, ASN1_CONTEXT_SIMPLE(11))) { - if (!asn1_read_ContextSimple(data, 1, &tmp_blob)) goto prot_err; + if (!asn1_read_ContextSimple(data, msg, 1, &tmp_blob)) goto prot_err; r->value = talloc(msg, DATA_BLOB); if (!r->value) { return NT_STATUS_LDAP(LDAP_OPERATIONS_ERROR);