Be strict about incoming form on GUID in extended DN
authorAndrew Bartlett <abartlet@samba.org>
Wed, 19 Nov 2008 21:04:54 +0000 (08:04 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 19 Nov 2008 21:04:54 +0000 (08:04 +1100)
source4/lib/ldb-samba/ldif_handlers.c

index e858e95a82a1952f96148ea6f72ae80840fb642d..5ab31d771bd6a753098d5f47323eb17682116b08 100644 (file)
@@ -226,20 +226,25 @@ static int extended_dn_read_GUID(struct ldb_context *ldb, void *mem_ctx,
 {
        struct GUID guid;
        enum ndr_err_code ndr_err;
-       if (ldif_read_objectGUID(ldb, mem_ctx, in, out) == 0) {
+       if (in->length == 36 && ldif_read_objectGUID(ldb, mem_ctx, in, out) == 0) {
                return 0;
        }
-       /* Perhaps not a string after all */
-       *out = data_blob_talloc(mem_ctx, NULL, in->length/2+1);
 
+       /* Try as 'hex' form */
+       if (in->length != 32) {
+               return -1;
+       }
+               
+       *out = data_blob_talloc(mem_ctx, NULL, in->length/2+1);
+       
        if (!out->data) {
                return -1;
        }
-
+       
        (*out).length = strhex_to_str((char *)out->data, out->length,
-                                    (const char *)in->data, in->length);
-
-       /* Check it looks like a SID */
+                                     (const char *)in->data, in->length);
+       
+       /* Check it looks like a GUID */
        ndr_err = ndr_pull_struct_blob_all(out, mem_ctx, NULL, &guid,
                                           (ndr_pull_flags_fn_t)ndr_pull_GUID);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {