From: Andrew Bartlett Date: Thu, 16 Jun 2016 02:04:44 +0000 (+1200) Subject: dsdb: Avoid talloc() calls in dsdb_get_extended_dn_*() X-Git-Tag: tdb-1.3.10~697 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bbf0532f07079ee21e5fd6d256b5079301bddf8f;p=thirdparty%2Fsamba.git dsdb: Avoid talloc() calls in dsdb_get_extended_dn_*() Signed-off-by: Andrew Bartlett Reviewed-by: Garming Sam --- diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index cfa13768ea2..667bd866a6f 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -3642,18 +3642,19 @@ NTSTATUS dsdb_get_extended_dn_guid(struct ldb_dn *dn, struct GUID *guid, const c NTSTATUS dsdb_get_extended_dn_uint64(struct ldb_dn *dn, uint64_t *val, const char *component_name) { const struct ldb_val *v; - char *s; v = ldb_dn_get_extended_component(dn, component_name); if (v == NULL) { return NT_STATUS_OBJECT_NAME_NOT_FOUND; } - s = talloc_strndup(dn, (const char *)v->data, v->length); - NT_STATUS_HAVE_NO_MEMORY(s); - *val = strtoull(s, NULL, 0); + { + char s[v->length+1]; + memcpy(s, v->data, v->length); + s[v->length] = 0; - talloc_free(s); + *val = strtoull(s, NULL, 0); + } return NT_STATUS_OK; } @@ -3671,19 +3672,19 @@ NTSTATUS dsdb_get_extended_dn_nttime(struct ldb_dn *dn, NTTIME *nttime, const ch NTSTATUS dsdb_get_extended_dn_uint32(struct ldb_dn *dn, uint32_t *val, const char *component_name) { const struct ldb_val *v; - char *s; v = ldb_dn_get_extended_component(dn, component_name); if (v == NULL) { return NT_STATUS_OBJECT_NAME_NOT_FOUND; } - s = talloc_strndup(dn, (const char *)v->data, v->length); - NT_STATUS_HAVE_NO_MEMORY(s); - - *val = strtoul(s, NULL, 0); + { + char s[v->length + 1]; + memcpy(s, v->data, v->length); + s[v->length] = 0; + *val = strtoul(s, NULL, 0); + } - talloc_free(s); return NT_STATUS_OK; } @@ -3693,7 +3694,6 @@ NTSTATUS dsdb_get_extended_dn_uint32(struct ldb_dn *dn, uint32_t *val, const cha NTSTATUS dsdb_get_extended_dn_sid(struct ldb_dn *dn, struct dom_sid *sid, const char *component_name) { const struct ldb_val *sid_blob; - struct TALLOC_CTX *tmp_ctx; enum ndr_err_code ndr_err; sid_blob = ldb_dn_get_extended_component(dn, component_name); @@ -3701,17 +3701,13 @@ NTSTATUS dsdb_get_extended_dn_sid(struct ldb_dn *dn, struct dom_sid *sid, const return NT_STATUS_OBJECT_NAME_NOT_FOUND; } - tmp_ctx = talloc_new(NULL); - - ndr_err = ndr_pull_struct_blob_all(sid_blob, tmp_ctx, sid, - (ndr_pull_flags_fn_t)ndr_pull_dom_sid); + ndr_err = ndr_pull_struct_blob_all_noalloc(sid_blob, sid, + (ndr_pull_flags_fn_t)ndr_pull_dom_sid); if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { NTSTATUS status = ndr_map_error2ntstatus(ndr_err); - talloc_free(tmp_ctx); return status; } - talloc_free(tmp_ctx); return NT_STATUS_OK; }