The branch, v4-0-test has been updated
       via  27d07df301d60e49d36efd003f2fd2305c83c3fe (commit)
       via  423db2468ba3dac89cebc59c8498c0b08c5f3d7b (commit)
       via  e26a5efd9a580ed3728e1f449e367b1cd4a73b5f (commit)
       via  0aebae91be0fba7ffa94d73946a94aea930a252a (commit)
       via  9643db1a011edc95aa903908cec708b3a3566e71 (commit)
       via  07107c45c35a11979bf68a14b2c4df9415880fcb (commit)
       via  fcb87e77860b449ac3483ccec5e6b5ed087540f2 (commit)
      from  f48dfd87badcddc64a1c0bf52939188a4a8f4add (commit)

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


- Log -----------------------------------------------------------------
commit 27d07df301d60e49d36efd003f2fd2305c83c3fe
Merge: 423db2468ba3dac89cebc59c8498c0b08c5f3d7b 
f48dfd87badcddc64a1c0bf52939188a4a8f4add
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Tue Aug 19 14:10:53 2008 +1000

    Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into 
4-0-abartlet

commit 423db2468ba3dac89cebc59c8498c0b08c5f3d7b
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Tue Aug 19 11:43:41 2008 +1000

    Fix templates.ldb reprovision handling.
    
    This sets the attributes in a seperate transaction, and allows a
    forced delete of the whole file.
    
    Andrew Bartlett

commit e26a5efd9a580ed3728e1f449e367b1cd4a73b5f
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Mon Aug 18 20:30:27 2008 +1000

    Note the ldb syntax for attribute syntaxes in the table.
    
    This includes additional Samba-specific syntaxes made available from
    the ldif_handlers code.
    
    This commit also changes some table to use #defines, to ensure
    consistancy in other parts of the code.
    
    Andrew Bartlett

commit 0aebae91be0fba7ffa94d73946a94aea930a252a
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Mon Aug 18 20:21:31 2008 +1000

    Allow attributes to be overwritten, not just added to

commit 9643db1a011edc95aa903908cec708b3a3566e71
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Mon Aug 18 20:20:24 2008 +1000

    Fix segfaults when loading the schema fails.

commit 07107c45c35a11979bf68a14b2c4df9415880fcb
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Mon Aug 18 15:12:08 2008 +1000

    Ensure we fail to proceed if the schema won't load.

commit fcb87e77860b449ac3483ccec5e6b5ed087540f2
Author: Andrew Bartlett <[EMAIL PROTECTED]>
Date:   Mon Aug 18 12:01:27 2008 +1000

    Remove references to the unused @SUBCLASS feature.
    
    This was removed from ldb_tdb a while ago
    
    Andrew Bartlett

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

Summary of changes:
 .gitignore                                       |    2 +-
 source/dsdb/samdb/ldb_modules/schema_fsmo.c      |    1 +
 source/dsdb/samdb/ldb_modules/tests/samba3sam.py |    2 +-
 source/dsdb/samdb/samdb.h                        |    1 +
 source/dsdb/schema/schema.h                      |    1 +
 source/dsdb/schema/schema_init.c                 |   27 ++++++------
 source/dsdb/schema/schema_syntax.c               |   47 ++++++++++++---------
 source/lib/ldb-samba/config.mk                   |    2 +-
 source/lib/ldb-samba/ldif_handlers.c             |   25 +++++++----
 source/lib/ldb-samba/ldif_handlers.h             |   13 ++++++
 source/lib/ldb/common/ldb_attributes.c           |   14 +++++-
 source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c         |   37 +----------------
 source/lib/ldb/ldb_sqlite3/schema                |   35 ----------------
 source/lib/ldb/tests/test-attribs.ldif           |    9 ----
 source/lib/ldb/tests/test-index.ldif             |    4 --
 source/scripting/python/samba/provision.py       |   12 +++++-
 source/setup/provision_templates.ldif            |   10 -----
 source/setup/provision_templates_init.ldif       |   10 +++++
 18 files changed, 109 insertions(+), 143 deletions(-)
 create mode 100644 source/lib/ldb-samba/ldif_handlers.h
 create mode 100644 source/setup/provision_templates_init.ldif


Changeset truncated at 500 lines:

diff --git a/.gitignore b/.gitignore
index 1e574f0..a216677 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,7 +55,7 @@ source/ldap_server/proto.h
 source/lib/db_wrap_proto.h
 source/lib/charset/charset_proto.h
 source/lib/cmdline/credentials.h
-source/lib/ldb/samba/ldif_handlers.h
+source/lib/ldb/samba/ldif_handlers_proto.h
 source/lib/registry/regf.h
 source/lib/registry/tdr_regf.c
 source/lib/registry/tdr_regf.h
diff --git a/source/dsdb/samdb/ldb_modules/schema_fsmo.c 
b/source/dsdb/samdb/ldb_modules/schema_fsmo.c
index 706b7b1..968b19c 100644
--- a/source/dsdb/samdb/ldb_modules/schema_fsmo.c
+++ b/source/dsdb/samdb/ldb_modules/schema_fsmo.c
@@ -125,6 +125,7 @@ static int schema_fsmo_init(struct ldb_module *module)
                                       "schema_fsmo_init: dsdb_schema load 
failed: %s",
                                       error_string);
                talloc_free(mem_ctx);
+               return ret;
        }
 
        /* dsdb_set_schema() steal schema into the ldb_context */
diff --git a/source/dsdb/samdb/ldb_modules/tests/samba3sam.py 
b/source/dsdb/samdb/ldb_modules/tests/samba3sam.py
index 7c408d0..428e6b4 100644
--- a/source/dsdb/samdb/ldb_modules/tests/samba3sam.py
+++ b/source/dsdb/samdb/ldb_modules/tests/samba3sam.py
@@ -47,7 +47,7 @@ class MapBaseTestCase(TestCaseInTempDir):
 
         ldb.add({"dn": "@PARTITION",
             "partition": [s4.basedn + ":" + s4.url, s3.basedn + ":" + s3.url],
-            "replicateEntries": ["@SUBCLASSES", "@ATTRIBUTES", "@INDEXLIST"]})
+            "replicateEntries": ["@ATTRIBUTES", "@INDEXLIST"]})
 
     def setUp(self):
         super(MapBaseTestCase, self).setUp()
diff --git a/source/dsdb/samdb/samdb.h b/source/dsdb/samdb/samdb.h
index 3e92671..f24a75f 100644
--- a/source/dsdb/samdb/samdb.h
+++ b/source/dsdb/samdb/samdb.h
@@ -31,6 +31,7 @@ struct event_context;
 
 #include "librpc/gen_ndr/security.h"
 #include "lib/ldb/include/ldb.h"
+#include "lib/ldb-samba/ldif_handlers.h"
 #include "librpc/gen_ndr/samr.h"
 #include "librpc/gen_ndr/drsuapi.h"
 #include "librpc/gen_ndr/drsblobs.h"
diff --git a/source/dsdb/schema/schema.h b/source/dsdb/schema/schema.h
index df7826d..68dc819 100644
--- a/source/dsdb/schema/schema.h
+++ b/source/dsdb/schema/schema.h
@@ -35,6 +35,7 @@ struct dsdb_syntax {
        const char *equality;
        const char *substring;
        const char *comment;
+       const char *ldb_syntax;
 
        WERROR (*drsuapi_to_ldb)(const struct dsdb_schema *schema,
                                 const struct dsdb_attribute *attr,
diff --git a/source/dsdb/schema/schema_init.c b/source/dsdb/schema/schema_init.c
index 65df25c..73be580 100644
--- a/source/dsdb/schema/schema_init.c
+++ b/source/dsdb/schema/schema_init.c
@@ -809,7 +809,6 @@ int dsdb_schema_from_ldb_results(TALLOC_CTX *mem_ctx, 
struct ldb_context *ldb,
        if (!prefix_val) {
                *error_string = talloc_asprintf(mem_ctx, 
                                                "schema_fsmo_init: no prefixMap 
attribute found");
-               talloc_free(mem_ctx);
                return LDB_ERR_CONSTRAINT_VIOLATION;
        }
        info_val = ldb_msg_find_ldb_val(schema_res->msgs[0], "schemaInfo");
@@ -828,7 +827,6 @@ int dsdb_schema_from_ldb_results(TALLOC_CTX *mem_ctx, 
struct ldb_context *ldb,
                *error_string = talloc_asprintf(mem_ctx, 
                              "schema_fsmo_init: failed to load oid mappings: 
%s",
                              win_errstr(status));
-               talloc_free(mem_ctx);
                return LDB_ERR_CONSTRAINT_VIOLATION;
        }
 
@@ -847,7 +845,6 @@ int dsdb_schema_from_ldb_results(TALLOC_CTX *mem_ctx, 
struct ldb_context *ldb,
                                      "schema_fsmo_init: failed to load 
attribute definition: %s:%s",
                                      
ldb_dn_get_linearized(attrs_res->msgs[i]->dn),
                                      win_errstr(status));
-                       talloc_free(mem_ctx);
                        return LDB_ERR_CONSTRAINT_VIOLATION;
                }
 
@@ -869,7 +866,6 @@ int dsdb_schema_from_ldb_results(TALLOC_CTX *mem_ctx, 
struct ldb_context *ldb,
                                      "schema_fsmo_init: failed to load class 
definition: %s:%s",
                                      
ldb_dn_get_linearized(objectclass_res->msgs[i]->dn),
                                      win_errstr(status));
-                       talloc_free(mem_ctx);
                        return LDB_ERR_CONSTRAINT_VIOLATION;
                }
 
@@ -914,7 +910,6 @@ static int fetch_oc_recursive(struct ldb_context *ldb, 
struct ldb_dn *schemadn,
                                        
"(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))",
                                        name, name);
                if (ret != LDB_SUCCESS) {
-                       printf("Search failed: %s\n", ldb_errstring(ldb));
                        return ret;
                }
                
@@ -940,7 +935,8 @@ static int fetch_oc_recursive(struct ldb_context *ldb, 
struct ldb_dn *schemadn,
 
 static int fetch_objectclass_schema(struct ldb_context *ldb, struct ldb_dn 
*schemadn, 
                                    TALLOC_CTX *mem_ctx, 
-                                   struct ldb_result **objectclasses_res)
+                                   struct ldb_result **objectclasses_res,
+                                   char **error_string)
 {
        TALLOC_CTX *local_ctx = talloc_new(mem_ctx);
        struct ldb_result *top_res, *ret_res;
@@ -949,19 +945,23 @@ static int fetch_objectclass_schema(struct ldb_context 
*ldb, struct ldb_dn *sche
                return LDB_ERR_OPERATIONS_ERROR;
        }
        
-       /* Downlaod 'top' */
+       /* Download 'top' */
        ret = ldb_search(ldb, schemadn, LDB_SCOPE_SUBTREE, 
                         "(&(objectClass=classSchema)(lDAPDisplayName=top))", 
                         NULL, &top_res);
        if (ret != LDB_SUCCESS) {
-               printf("Search failed: %s\n", ldb_errstring(ldb));
-               return LDB_ERR_OPERATIONS_ERROR;
+               *error_string = talloc_asprintf(mem_ctx, 
+                                               "dsdb_schema: failed to search 
for top classSchema object: %s",
+                                               ldb_errstring(ldb));
+               return ret;
        }
 
        talloc_steal(local_ctx, top_res);
 
        if (top_res->count != 1) {
-               return LDB_ERR_OPERATIONS_ERROR;
+               *error_string = talloc_asprintf(mem_ctx, 
+                                               "dsdb_schema: failed to find 
top classSchema object");
+               return LDB_ERR_NO_SUCH_OBJECT;
        }
 
        ret_res = talloc_zero(local_ctx, struct ldb_result);
@@ -972,8 +972,7 @@ static int fetch_objectclass_schema(struct ldb_context 
*ldb, struct ldb_dn *sche
        ret = fetch_oc_recursive(ldb, schemadn, local_ctx, top_res, ret_res); 
 
        if (ret != LDB_SUCCESS) {
-               printf("Search failed: %s\n", ldb_errstring(ldb));
-               return LDB_ERR_OPERATIONS_ERROR;
+               return ret;
        }
 
        *objectclasses_res = talloc_move(mem_ctx, &ret_res);
@@ -1051,10 +1050,10 @@ int dsdb_schema_from_schema_dn(TALLOC_CTX *mem_ctx, 
struct ldb_context *ldb,
        /*
         * load the objectClass definitions
         */
-       ret = fetch_objectclass_schema(ldb, schema_dn, tmp_ctx, &c_res);
+       ret = fetch_objectclass_schema(ldb, schema_dn, tmp_ctx, &c_res, 
&error_string);
        if (ret != LDB_SUCCESS) {
                *error_string_out = talloc_asprintf(mem_ctx, 
-                                      "Failed to fetch objectClass schema 
elements: %s\n", ldb_errstring(ldb));
+                                      "Failed to fetch objectClass schema 
elements: %s", error_string);
                talloc_free(tmp_ctx);
                return ret;
        }
diff --git a/source/dsdb/schema/schema_syntax.c 
b/source/dsdb/schema/schema_syntax.c
index b1ca256..97cd002 100644
--- a/source/dsdb/schema/schema_syntax.c
+++ b/source/dsdb/schema/schema_syntax.c
@@ -1111,7 +1111,6 @@ static WERROR 
dsdb_syntax_PRESENTATION_ADDRESS_ldb_to_drsuapi(const struct dsdb_
        return WERR_OK;
 }
 
-
 #define OMOBJECTCLASS(val) { .length = sizeof(val) - 1, .data = 
discard_const_p(uint8_t, val) }
 
 static const struct dsdb_syntax dsdb_syntaxes[] = {
@@ -1126,31 +1125,32 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .comment                = "Boolean" 
        },{
                .name                   = "Integer",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
+               .ldap_oid               = LDB_SYNTAX_INTEGER,
                .oMSyntax               = 2,
                .attributeSyntax_oid    = "2.5.5.9",
                .drsuapi_to_ldb         = dsdb_syntax_INT32_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_INT32_ldb_to_drsuapi,
                .equality               = "integerMatch",
-               .comment                = "Integer"
+               .comment                = "Integer",
        },{
                .name                   = "String(Octet)",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
+               .ldap_oid               = LDB_SYNTAX_OCTET_STRING,
                .oMSyntax               = 4,
                .attributeSyntax_oid    = "2.5.5.10",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
                .equality               = "octetStringMatch",
-               .comment                =  "Octet String"
+               .comment                = "Octet String",
        },{
                .name                   = "String(Sid)",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
+               .ldap_oid               = LDB_SYNTAX_OCTET_STRING,
                .oMSyntax               = 4,
                .attributeSyntax_oid    = "2.5.5.17",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
                .equality               = "octetStringMatch",
-               .comment                = "Octet String - Security Identifier 
(SID)" 
+               .comment                = "Octet String - Security Identifier 
(SID)",
+               .ldb_syntax             = LDB_SYNTAX_SAMBA_SID
        },{
                .name                   = "String(Object-Identifier)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.38",
@@ -1159,10 +1159,11 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_OID_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_OID_ldb_to_drsuapi,
                .equality               = "caseIgnoreMatch", /* Would use 
"objectIdentifierMatch" but most are ldap attribute/class names */
-               .comment                = "OID String"
+               .comment                = "OID String",
+               .ldb_syntax             = LDB_SYNTAX_DIRECTORY_STRING
        },{
                .name                   = "Enumeration",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
+               .ldap_oid               = LDB_SYNTAX_INTEGER,
                .oMSyntax               = 10,
                .attributeSyntax_oid    = "2.5.5.9",
                .drsuapi_to_ldb         = dsdb_syntax_INT32_drsuapi_to_ldb,
@@ -1194,7 +1195,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
                .equality               = "caseIgnoreMatch",
                .substring              = "caseIgnoreSubstringsMatch",
-               .comment                = "Case Insensitive String" 
+               .comment                = "Case Insensitive String",
+               .ldb_syntax             = LDB_SYNTAX_DIRECTORY_STRING,
        },{
                .name                   = "String(IA5)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.26",
@@ -1212,7 +1214,7 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_NTTIME_UTC_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_NTTIME_UTC_ldb_to_drsuapi,
                .equality               = "generalizedTimeMatch",
-               .comment                = "UTC Time" 
+               .comment                = "UTC Time",
        },{
                .name                   = "String(Generalized-Time)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.24",
@@ -1221,7 +1223,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_NTTIME_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_NTTIME_ldb_to_drsuapi,
                .equality               = "generalizedTimeMatch",
-               .comment                = "Generalized Time"
+               .comment                = "Generalized Time",
+               .ldb_syntax             = LDB_SYNTAX_UTC_TIME,
        },{
        /* not used in w2k3 schema */
                .name                   = "String(Case Sensitive)",
@@ -1232,14 +1235,14 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Unicode)",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.15",
+               .ldap_oid               = LDB_SYNTAX_DIRECTORY_STRING,
                .oMSyntax               = 64,
                .attributeSyntax_oid    = "2.5.5.12",
                .drsuapi_to_ldb         = dsdb_syntax_UNICODE_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_UNICODE_ldb_to_drsuapi,
                .equality               = "caseIgnoreMatch",
                .substring              = "caseIgnoreSubstringsMatch",
-               .comment                = "Directory String"
+               .comment                = "Directory String",
        },{
                .name                   = "Interval/LargeInteger",
                .ldap_oid               = "1.2.840.113556.1.4.906",
@@ -1248,24 +1251,25 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_INT64_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_INT64_ldb_to_drsuapi,
                .equality               = "integerMatch",
-               .comment                = "Large Integer" 
+               .comment                = "Large Integer",
+               .ldb_syntax             = LDB_SYNTAX_INTEGER,
        },{
                .name                   = "String(NT-Sec-Desc)",
-               .ldap_oid               = "1.2.840.113556.1.4.907",
+               .ldap_oid               = LDB_SYNTAX_SAMBA_SECURITY_DESCRIPTOR,
                .oMSyntax               = 66,
                .attributeSyntax_oid    = "2.5.5.15",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
        },{
                .name                   = "Object(DS-DN)",
-               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.12",
+               .ldap_oid               = LDB_SYNTAX_DN,
                .oMSyntax               = 127,
                .oMObjectClass          = 
OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x4a"),
                .attributeSyntax_oid    = "2.5.5.1",
                .drsuapi_to_ldb         = dsdb_syntax_DN_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DN_ldb_to_drsuapi,
                .equality               = "distinguishedNameMatch",
-               .comment                = "Object(DS-DN) == a DN" 
+               .comment                = "Object(DS-DN) == a DN",
        },{
                .name                   = "Object(DN-Binary)",
                .ldap_oid               = "1.2.840.113556.1.4.903",
@@ -1275,7 +1279,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_DN_BINARY_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DN_BINARY_ldb_to_drsuapi,
                .equality               = "distinguishedNameMatch",
-               .comment                = "OctetString: Binary+DN" 
+               .comment                = "OctetString: Binary+DN",
+               .ldb_syntax             = LDB_SYNTAX_DN,
        },{
        /* not used in w2k3 schema */
                .name                   = "Object(OR-Name)",
@@ -1318,7 +1323,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
                .equality               = "distinguishedNameMatch",
-               .comment                = "OctetString: String+DN" 
+               .comment                = "OctetString: String+DN",
+               .ldb_syntax             = LDB_SYNTAX_DN,
        },{
        /* not used in w2k3 schema */
                .name                   = "Object(DN-String)",
@@ -1328,6 +1334,7 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.14",
                .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
+               .ldb_syntax             = LDB_SYNTAX_DN,
        }
 };
 
diff --git a/source/lib/ldb-samba/config.mk b/source/lib/ldb-samba/config.mk
index cdec317..f84b44d 100644
--- a/source/lib/ldb-samba/config.mk
+++ b/source/lib/ldb-samba/config.mk
@@ -7,5 +7,5 @@ PRIVATE_DEPENDENCIES = LIBSECURITY SAMDB_SCHEMA LIBNDR NDR_MISC 
NDR_DRSBLOBS
 ################################################
 
 LDBSAMBA_OBJ_FILES = $(ldb_sambasrcdir)/ldif_handlers.o
-$(eval $(call 
proto_header_template,$(ldb_sambasrcdir)/ldif_handlers.h,$(LDBSAMBA_OBJ_FILES:.o=.c)))
+$(eval $(call 
proto_header_template,$(ldb_sambasrcdir)/ldif_handlers_proto.h,$(LDBSAMBA_OBJ_FILES:.o=.c)))
 
diff --git a/source/lib/ldb-samba/ldif_handlers.c 
b/source/lib/ldb-samba/ldif_handlers.c
index 1f718cc..22a57da 100644
--- a/source/lib/ldb-samba/ldif_handlers.c
+++ b/source/lib/ldb-samba/ldif_handlers.c
@@ -561,8 +561,6 @@ static int ldif_comparison_prefixMap(struct ldb_context 
*ldb, void *mem_ctx,
        return ret;
 }
 
-#define LDB_SYNTAX_SAMBA_SID                   "LDB_SYNTAX_SAMBA_SID"
-#define LDB_SYNTAX_SAMBA_SECURITY_DESCRIPTOR   
"LDB_SYNTAX_SAMBA_SECURITY_DESCRIPTOR"
 #define LDB_SYNTAX_SAMBA_GUID                  "LDB_SYNTAX_SAMBA_GUID"
 #define LDB_SYNTAX_SAMBA_OBJECT_CATEGORY       
"LDB_SYNTAX_SAMBA_OBJECT_CATEGORY"
 #define LDB_SYNTAX_SAMBA_PREFIX_MAP    "LDB_SYNTAX_SAMBA_PREFIX_MAP"
@@ -635,6 +633,21 @@ static const struct {
        { "prefixMap",                  LDB_SYNTAX_SAMBA_PREFIX_MAP }
 };
 
+const struct ldb_schema_syntax *ldb_samba_syntax_by_name(struct ldb_context 
*ldb, const char *name)
+{
+       uint32_t j;
+       const struct ldb_schema_syntax *s = NULL;
+       
+       for (j=0; j < ARRAY_SIZE(samba_syntaxes); j++) {
+               if (strcmp(name, samba_syntaxes[j].name) == 0) {
+                       s = &samba_syntaxes[j];
+                       break;
+               }
+       }
+       return s;
+}
+
+
 /*
   register the samba ldif handlers
 */
@@ -644,15 +657,9 @@ int ldb_register_samba_handlers(struct ldb_context *ldb)
 
        for (i=0; i < ARRAY_SIZE(samba_attributes); i++) {
                int ret;
-               uint32_t j;
                const struct ldb_schema_syntax *s = NULL;
 
-               for (j=0; j < ARRAY_SIZE(samba_syntaxes); j++) {
-                       if (strcmp(samba_attributes[i].syntax, 
samba_syntaxes[j].name) == 0) {
-                               s = &samba_syntaxes[j];
-                               break;
-                       }
-               }
+               s = ldb_samba_syntax_by_name(ldb, samba_attributes[i].syntax);
 
                if (!s) {
                        s = ldb_standard_syntax_by_name(ldb, 
samba_attributes[i].syntax);
diff --git a/source/lib/ldb-samba/ldif_handlers.h 
b/source/lib/ldb-samba/ldif_handlers.h
new file mode 100644
index 0000000..e37c416
--- /dev/null
+++ b/source/lib/ldb-samba/ldif_handlers.h
@@ -0,0 +1,13 @@
+#ifndef __LIB_LDB_SAMBA_LDIF_HANDLERS_H__
+#define __LIB_LDB_SAMBA_LDIF_HANDLERS_H__
+
+#define LDB_SYNTAX_SAMBA_SID                   "LDB_SYNTAX_SAMBA_SID"
+#define LDB_SYNTAX_SAMBA_SECURITY_DESCRIPTOR   "1.2.840.113556.1.4.907"
+
+#include "lib/ldb-samba/ldif_handlers_proto.h"
+
+#undef _PRINTF_ATTRIBUTE
+#define _PRINTF_ATTRIBUTE(a1, a2)
+
+#endif /* __LIB_LDB_SAMBA_LDIF_HANDLERS_H__ */
+
diff --git a/source/lib/ldb/common/ldb_attributes.c 
b/source/lib/ldb/common/ldb_attributes.c
index effd93a..ab6aa0b 100644
--- a/source/lib/ldb/common/ldb_attributes.c
+++ b/source/lib/ldb/common/ldb_attributes.c
@@ -62,11 +62,20 @@ int ldb_schema_attribute_add_with_syntax(struct ldb_context 
*ldb,
        ldb->schema.attributes = a;
 
        for (i = 0; i < ldb->schema.num_attributes; i++) {
-               if (ldb_attr_cmp(attribute, a[i].name) < 0) {
+               int cmp = ldb_attr_cmp(attribute, a[i].name);
+               if (cmp == 0) {
+                       if (a[i].flags & LDB_ATTR_FLAG_ALLOCATED) {
+                               talloc_free(discard_const_p(char, a[i].name));
+                       }
+                       /* To cancel out increment below */
+                       ldb->schema.num_attributes--;
+                       break;
+               } else if (cmp < 0) {
                        memmove(a+i+1, a+i, sizeof(*a) * 
(ldb->schema.num_attributes-i));
                        break;
                }
        }
+       ldb->schema.num_attributes++;
 
        a[i].name       = attribute;
        a[i].flags      = flags;
@@ -80,7 +89,6 @@ int ldb_schema_attribute_add_with_syntax(struct ldb_context 
*ldb,
                }
        }
 
-       ldb->schema.num_attributes++;
        return 0;
 }
 
@@ -145,7 +153,7 @@ void ldb_schema_attribute_remove(struct ldb_context *ldb, 
const char *name)
        int i;
 
        a = ldb_schema_attribute_by_name(ldb, name);
-       if (a == NULL) {
+       if (a == NULL || a->name == NULL) {
                return;
        }
 
diff --git a/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c 
b/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
index 8742e25..a0e63c8 100644
--- a/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
+++ b/source/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
@@ -349,23 +349,7 @@ static char *parsetree_to_sql(struct ldb_module *module,
                        return NULL;
                }
 
-               if (strcasecmp(t->u.equality.attr, "objectclass") == 0) {
-               /*
-                * For object classes, we want to search for all objectclasses
-                * that are subclasses as well.
-               */
-                       return lsqlite3_tprintf(mem_ctx,
-                                       "SELECT eid  FROM 
ldb_attribute_values\n"
-                                       "WHERE norm_attr_name = 'OBJECTCLASS' "
-                                       "AND norm_attr_value IN\n"
-                                       "  (SELECT class_name FROM 
ldb_object_classes\n"
-                                       "   WHERE tree_key GLOB\n"
-                                       "     (SELECT tree_key FROM 
ldb_object_classes\n"
-                                       "      WHERE class_name = '%q'\n"
-                                       "     ) || '*'\n"
-                                       "  )\n", value.data);
-
-               } else if (strcasecmp(t->u.equality.attr, "dn") == 0) {
+               if (strcasecmp(t->u.equality.attr, "dn") == 0) {
                        /* DN query is a special ldb case */
                        const char *cdn = ldb_dn_get_casefold(
                                                ldb_dn_new(mem_ctx, module->ldb,
@@ -1039,16 +1023,8 @@ static int lsql_add(struct ldb_module *module, struct 
ldb_request *req)
 
         /* See if this is an ltdb special */
        if (ldb_dn_is_special(msg->dn)) {
-               struct ldb_dn *c;
-
-               c = ldb_dn_new(lsql_ac, module->ldb, "@SUBCLASSES");
-               if (ldb_dn_compare(msg->dn, c) == 0) {
-#warning "insert subclasses into object class tree"
-                       ret = LDB_ERR_UNWILLING_TO_PERFORM;


-- 
Samba Shared Repository

Reply via email to