s4-dsdb: Add dsdb_schema_info_blob_is_valid() to verify schemaInfo blobls
authorKamen Mazdrashki <kamenim@samba.org>
Thu, 16 Sep 2010 23:37:46 +0000 (02:37 +0300)
committerKamen Mazdrashki <kamenim@samba.org>
Fri, 17 Sep 2010 10:53:03 +0000 (13:53 +0300)
source4/dsdb/schema/schema_info_attr.c

index a9c5e932a1e800e3ca290f1da2a56816278fd5fc..fb93d91f35cfb291131d06bd9153983e6510aa1a 100644 (file)
@@ -69,6 +69,28 @@ WERROR dsdb_schema_info_blob_new(TALLOC_CTX *mem_ctx, DATA_BLOB *_schema_info_bl
 }
 
 
+/**
+ * Verify the 'blob' is a valid schemaInfo blob
+ */
+bool dsdb_schema_info_blob_is_valid(const DATA_BLOB *blob)
+{
+       if (!blob || !blob->data) {
+               return false;
+       }
+
+       /* schemaInfo blob must be 21 bytes long */
+       if (blob->length != 21) {
+               return false;
+       }
+
+       /* schemaInfo blob should start with 0xFF */
+       if (blob->data[0] != 0xFF) {
+               return false;
+       }
+
+       return true;
+}
+
 /**
  * Parse schemaInfo structure from a data_blob
  * (DATA_BLOB or ldb_val).
@@ -83,16 +105,8 @@ WERROR dsdb_schema_info_from_blob(const DATA_BLOB *blob,
        struct dsdb_schema_info *schema_info;
        struct schemaInfoBlob schema_info_blob;
 
-       if (!blob || !blob->data) {
-               return WERR_INVALID_PARAMETER;
-       }
-
-       if (blob->length != 21) {
-               return WERR_INVALID_PARAMETER;
-       }
-
-       /* schemaInfo blob should start with 0xFF */
-       if (blob->data[0] != 0xFF) {
+       /* verify schemaInfo blob is valid */
+       if (!dsdb_schema_info_blob_is_valid(blob)) {
                return WERR_INVALID_PARAMETER;
        }