diff options
author | Andrew Bartlett <abartlet@samba.org> | 2016-06-15 15:54:06 +1200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2016-06-27 00:18:17 +0200 |
commit | 4304eac85437d72f4aed36fc7797004cd97fbc9a (patch) | |
tree | fb44358be19e2629d7cd022e70060225a07547b0 /librpc/ndr | |
parent | f5ca34e6e813a5b92ea084995ffc0ebb3c8b1368 (diff) | |
download | samba-4304eac85437d72f4aed36fc7797004cd97fbc9a.tar.gz |
librpc: Avoid talloc in GUID_from_data_blob()
This is often found in inner loops in the dsdb code, because LDB DNs often contain a GUID string
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Diffstat (limited to 'librpc/ndr')
-rw-r--r-- | librpc/ndr/uuid.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c index 9d955abc3d5..fbd305e5401 100644 --- a/librpc/ndr/uuid.c +++ b/librpc/ndr/uuid.c @@ -71,13 +71,10 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid) switch(s->length) { case 36: { - TALLOC_CTX *mem_ctx; - const char *string; + char string[37]; + memcpy(string, s->data, 36); + string[36] = 0; - mem_ctx = talloc_new(NULL); - NT_STATUS_HAVE_NO_MEMORY(mem_ctx); - string = talloc_strndup(mem_ctx, (const char *)s->data, s->length); - NT_STATUS_HAVE_NO_MEMORY(string); if (11 == sscanf(string, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", &time_low, &time_mid, &time_hi_and_version, @@ -85,26 +82,21 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid) &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) { status = NT_STATUS_OK; } - talloc_free(mem_ctx); break; } case 38: { - TALLOC_CTX *mem_ctx; - const char *string; - - mem_ctx = talloc_new(NULL); - NT_STATUS_HAVE_NO_MEMORY(mem_ctx); - string = talloc_strndup(mem_ctx, (const char *)s->data, s->length); - NT_STATUS_HAVE_NO_MEMORY(string); - if (11 == sscanf((const char *)s->data, + char string[39]; + memcpy(string, s->data, 38); + string[38] = 0; + + if (11 == sscanf(string, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", &time_low, &time_mid, &time_hi_and_version, &clock_seq[0], &clock_seq[1], &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) { status = NT_STATUS_OK; } - talloc_free(mem_ctx); break; } case 32: |