The branch, v3-5-test has been updated
       via  e8ed2b5... librpc: split out a separate GUID_from_ndr_blob() 
function
      from  b4803af... s3: Fix bug 7336: Enable idmap_passdb module build as 
shared (cherry picked from commit 8c0fbc410798512b7a4b7db73bcb24cde6fa7849)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit e8ed2b596627e8704e3384d5997020059b47144a
Author: Andrew Tridgell <tri...@samba.org>
Date:   Thu Dec 10 11:22:20 2009 +1100

    librpc: split out a separate GUID_from_ndr_blob() function
    
    This will simplify many of the places that deal with NDR formatted
    GUIDs
    (cherry picked from commit effff544265c63c95cf630d426b630bfe4d25aec)
    
    This patch is part of a fix for bug #7538 (Backport fixes for
    GUID_from_data_blob).

-----------------------------------------------------------------------

Summary of changes:
 librpc/ndr/libndr.h |    1 +
 librpc/ndr/uuid.c   |   35 ++++++++++++++++++++---------------
 2 files changed, 21 insertions(+), 15 deletions(-)


Changeset truncated at 500 lines:

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)) {


-- 
Samba Shared Repository

Reply via email to