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;
}
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;
}
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);
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;
}