From e8aec1001ae45aaeae05845ccb495c029ae42b72 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 10 Dec 2009 11:22:20 +1100 Subject: [PATCH] librpc: split out a separate GUID_from_ndr_blob() function This will simplify many of the places that deal with NDR formatted GUIDs --- librpc/ndr/libndr.h | 1 + librpc/ndr/uuid.c | 35 ++++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index ff7c912..203f7bf 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -543,6 +543,7 @@ enum ndr_err_code ndr_push_charset(struct ndr_push *ndr, int ndr_flags, const ch /* GUIDs */ bool GUID_equal(const struct GUID *u1, const struct GUID *u2); +NTSTATUS GUID_from_ndr_blob(const DATA_BLOB *b, struct GUID *guid); NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid); NTSTATUS GUID_from_string(const char *s, struct GUID *guid); NTSTATUS NS_GUID_from_string(const char *s, struct GUID *guid); diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c index 80c35cd..9289712 100644 --- a/librpc/ndr/uuid.c +++ b/librpc/ndr/uuid.c @@ -25,6 +25,25 @@ #include "librpc/ndr/libndr.h" #include "librpc/gen_ndr/ndr_misc.h" + +/** + build a GUID from a NDR data blob +*/ +_PUBLIC_ NTSTATUS GUID_from_ndr_blob(const DATA_BLOB *b, struct GUID *guid) +{ + enum ndr_err_code ndr_err; + TALLOC_CTX *mem_ctx; + + mem_ctx = talloc_new(NULL); + NT_STATUS_HAVE_NO_MEMORY(mem_ctx); + + ndr_err = ndr_pull_struct_blob_all(b, mem_ctx, NULL, guid, + (ndr_pull_flags_fn_t)ndr_pull_GUID); + talloc_free(mem_ctx); + return ndr_map_error2ntstatus(ndr_err); +} + + /** build a GUID from a string */ @@ -90,21 +109,7 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid) } if (s->length == 16) { - enum ndr_err_code ndr_err; - struct GUID guid2; - TALLOC_CTX *mem_ctx; - - mem_ctx = talloc_new(NULL); - NT_STATUS_HAVE_NO_MEMORY(mem_ctx); - - ndr_err = ndr_pull_struct_blob(s, mem_ctx, NULL, &guid2, - (ndr_pull_flags_fn_t)ndr_pull_GUID); - talloc_free(mem_ctx); - if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - return ndr_map_error2ntstatus(ndr_err); - } - *guid = guid2; - return NT_STATUS_OK; + return GUID_from_ndr_blob(s, guid); } if (!NT_STATUS_IS_OK(status)) { -- 1.7.1