]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema.c
Berkeley DB 4.2 support (DB 4.2 required by default)
[openldap] / servers / slapd / schema.c
index 5f0a6a717f4d0459feda287223479728e25cf4bf..d0dfa3021d2f7c4f52bc28278228429e2f132f08 100644 (file)
@@ -32,6 +32,7 @@ schema_info( Entry **entry, const char **text )
 
        Entry           *e;
        struct berval   vals[5];
+       struct berval   nvals[5];
 
        e = (Entry *) SLAP_CALLOC( 1, sizeof(Entry) );
        if( e == NULL ) {
@@ -57,7 +58,8 @@ schema_info( Entry **entry, const char **text )
 
        vals[0].bv_val = "subentry";
        vals[0].bv_len = sizeof("subentry")-1;
-       if( attr_merge_one( e, ad_structuralObjectClass, vals ) ) {
+       if( attr_merge_one( e, ad_structuralObjectClass, vals, vals ) )
+       {
                /* Out of memory, do something about it */
                entry_free( e );
                *text = "out of memory";
@@ -73,7 +75,8 @@ schema_info( Entry **entry, const char **text )
        vals[3].bv_val = "extensibleObject";
        vals[3].bv_len = sizeof("extensibleObject")-1;
        vals[4].bv_val = NULL;
-       if( attr_merge( e, ad_objectClass, vals ) ) {
+       if( attr_merge( e, ad_objectClass, vals, vals ) )
+       {
                /* Out of memory, do something about it */
                entry_free( e );
                *text = "out of memory";
@@ -103,7 +106,14 @@ schema_info( Entry **entry, const char **text )
                        return LDAP_OTHER;
                }
 
-               if( attr_merge_one( e, desc, vals ) ) {
+               nvals[0].bv_val = strchr( global_schemandn.bv_val, '=' );
+               assert( nvals[0].bv_val );
+               nvals[0].bv_val++;
+               nvals[0].bv_len = global_schemandn.bv_len -
+                       (nvals[0].bv_val - global_schemandn.bv_val);
+
+               if( attr_merge_one( e, desc, vals, nvals ) )
+               {
                        /* Out of memory, do something about it */
                        entry_free( e );
                        *text = "out of memory";
@@ -134,13 +144,15 @@ schema_info( Entry **entry, const char **text )
                vals[0].bv_val = timebuf;
                vals[0].bv_len = strlen( timebuf );
 
-               if( attr_merge_one( e, ad_createTimestamp, vals ) ) {
+               if( attr_merge_one( e, ad_createTimestamp, vals, vals ) )
+               {
                        /* Out of memory, do something about it */
                        entry_free( e );
                        *text = "out of memory";
                        return LDAP_OTHER;
                }
-               if( attr_merge_one( e, ad_modifyTimestamp, vals ) ) {
+               if( attr_merge_one( e, ad_modifyTimestamp, vals, vals ) )
+               {
                        /* Out of memory, do something about it */
                        entry_free( e );
                        *text = "out of memory";