]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_prep.c
Use AC_STRERROR_R
[openldap] / servers / slapd / schema_prep.c
index e29fb64f41dba3a9d76e8106239b2f7b76bcc125..1baba5dcfb55d660d51a5e1c27854a9fcd33b6d5 100644 (file)
@@ -1,8 +1,17 @@
-/* schema_init.c - init builtin schema */
+/* schema_prep.c - load builtin schema */
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2004 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
 
 #include "portable.h"
@@ -23,6 +32,20 @@ int schema_init_done = 0;
 
 struct slap_internal_schema slap_schema;
 
+static int objectClassValidate(
+       Syntax *syntax,
+       struct berval *in )
+{
+       ObjectClass *oc;
+       int rc = numericoidValidate( syntax, in );
+       if ( rc ) return rc;
+
+       oc = oc_bvfind( in );
+       if( oc == NULL ) return LDAP_INVALID_SYNTAX;
+
+       return LDAP_SUCCESS;
+}
+
 static int objectClassPretty(
        struct slap_syntax *syntax,
        struct berval * in,
@@ -30,13 +53,9 @@ static int objectClassPretty(
        void *ctx )
 {
        ObjectClass *oc = oc_bvfind( in );
+       if( oc == NULL ) return LDAP_INVALID_SYNTAX;
 
-       if( oc != NULL ) {
-               ber_dupbv_x( out, &oc->soc_cname, ctx );
-       } else {
-               ber_dupbv_x( out, in, ctx );
-       }
-
+       ber_dupbv_x( out, &oc->soc_cname, ctx );
        return LDAP_SUCCESS;
 }
 
@@ -61,12 +80,12 @@ objectSubClassMatch(
                }
 
                /* desc form, return undefined */
-               return SLAPD_COMPARE_UNDEFINED;
+               return LDAP_INVALID_SYNTAX;
        }
 
        if ( oc == NULL ) {
                /* unrecognized stored value */
-               return SLAPD_COMPARE_UNDEFINED;
+               return LDAP_INVALID_SYNTAX;
        }
 
        if( SLAP_MR_IS_VALUE_OF_ATTRIBUTE_SYNTAX( flags ) ) {
@@ -96,7 +115,7 @@ static int objectSubClassIndexer(
        }
 
        /* over allocate */
-       ocvalues = sl_malloc( sizeof( struct berval ) * (noc+16), ctx );
+       ocvalues = slap_sl_malloc( sizeof( struct berval ) * (noc+16), ctx );
 
        /* copy listed values (and termination) */
        for( i=0; i<noc; i++ ) {
@@ -130,7 +149,7 @@ static int objectSubClassIndexer(
                        }
 
                        if( !found ) {
-                               ocvalues = sl_realloc( ocvalues,
+                               ocvalues = slap_sl_realloc( ocvalues,
                                        sizeof( struct berval ) * (noc+2), ctx );
 
                                assert( k == noc );
@@ -151,7 +170,7 @@ static int objectSubClassIndexer(
        rc = octetStringIndexer( use, mask, syntax, mr,
                prefix, ocvalues, keysp, ctx );
 
-       sl_free( ocvalues, ctx );
+       slap_sl_free( ocvalues, ctx );
        return rc;
 }
 
@@ -235,14 +254,14 @@ static struct slap_schema_oc_map {
                        "DESC 'Persistent Info for SyncRepl Consumer' "
                        "AUXILIARY "
                        "MAY syncreplCookie )",
-               0, SLAP_OC_OPERATIONAL|SLAP_OC_HIDE,
+               0, SLAP_OC_SYNCCONSUMERSUBENTRY|SLAP_OC_OPERATIONAL|SLAP_OC_HIDE,
                offsetof(struct slap_internal_schema, si_oc_syncConsumerSubentry) },
        { "syncProviderSubentry", "( 1.3.6.1.4.1.4203.666.3.6 "
                        "NAME 'syncProviderSubentry' "
                        "DESC 'Persistent Info for SyncRepl Producer' "
                        "AUXILIARY "
                        "MAY contextCSN )",
-               0, SLAP_OC_OPERATIONAL|SLAP_OC_HIDE,
+               0, SLAP_OC_SYNCPROVIDERSUBENTRY|SLAP_OC_OPERATIONAL|SLAP_OC_HIDE,
                offsetof(struct slap_internal_schema, si_oc_syncProviderSubentry) },
 
        { NULL, NULL, NULL, 0, 0 }
@@ -274,7 +293,7 @@ static struct slap_schema_ad_map {
                        "EQUALITY objectIdentifierMatch "
                        "SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )",
                NULL, SLAP_AT_FINAL,
-               NULL, objectClassPretty,
+               objectClassValidate, objectClassPretty,
                NULL, NULL, objectSubClassMatch,
                        objectSubClassIndexer, objectSubClassFilter,
                offsetof(struct slap_internal_schema, si_ad_objectClass) },
@@ -286,7 +305,7 @@ static struct slap_schema_ad_map {
                        "SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 "
                        "SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation )",
                NULL, 0,
-               NULL, objectClassPretty,
+               objectClassValidate, objectClassPretty,
                NULL, NULL, objectSubClassMatch,
                        objectSubClassIndexer, objectSubClassFilter,
                offsetof(struct slap_internal_schema, si_ad_structuralObjectClass) },
@@ -368,8 +387,9 @@ static struct slap_schema_ad_map {
 
        { "entryUUID", "( 1.3.6.1.4.1.4203.666.1.6 NAME 'entryUUID' "   
                        "DESC 'UUID of the entry' "
-                       "EQUALITY octetStringMatch "
-                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{64} "
+                       "EQUALITY UUIDMatch "
+                       "ORDERING UUIDOrderingMatch "
+                       "SYNTAX 1.3.6.1.4.1.4203.666.2.6 "
                        "SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation )",
                NULL, SLAP_AT_HIDE,
                NULL, NULL,
@@ -406,26 +426,13 @@ static struct slap_schema_ad_map {
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_superiorUUID) },
 
-#ifdef LDAP_CACHING 
-       /* LDAP cache specific operational attribute */
-       { "queryid", "( 1.3.6.1.4.1.4203.666.1.12 NAME 'queryid' "
-                       "DESC 'list of queries the entry belongs to' "
-                       "EQUALITY octetStringMatch "
-                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{64} "
-                       "NO-USER-MODIFICATION USAGE directoryOperation )",
-               NULL, SLAP_AT_HIDE,
-               NULL, NULL,
-               NULL, NULL, NULL, NULL, NULL, 
-               offsetof(struct slap_internal_schema, si_ad_queryid) },
-#endif /* LDAP_CACHING */
-
        { "syncreplCookie", "( 1.3.6.1.4.1.4203.666.1.23 "
                        "NAME 'syncreplCookie' "
                        "DESC 'syncrepl Cookie for shadow copy' "
                        "EQUALITY octetStringMatch "
                        "ORDERING octetStringOrderingMatch "
-                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{64} "
-                       "SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation )",
+                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 "
+                       "SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation )",
                NULL, SLAP_AT_HIDE,
                NULL, NULL,
                NULL, NULL, NULL, NULL, NULL,
@@ -436,13 +443,26 @@ static struct slap_schema_ad_map {
                        "DESC 'the largest committed CSN of a context' "
                        "EQUALITY octetStringMatch "
                        "ORDERING octetStringOrderingMatch "
-                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{64} "
-                       "SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation )",
+                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 "
+                       "SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation )",
                NULL, SLAP_AT_HIDE,
                NULL, NULL,
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_contextCSN) },
 
+#ifdef LDAP_DEVEL
+       { "syncTimestamp", "( 1.3.6.1.4.1.4203.666.1.26 NAME 'syncTimestamp' "
+                       "DESC 'Time which object was replicated' "
+                       "EQUALITY generalizedTimeMatch "
+                       "ORDERING generalizedTimeOrderingMatch "
+                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 "
+                       "SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation )",
+               NULL, 0,
+               NULL, NULL,
+               NULL, NULL, NULL, NULL, NULL,
+               offsetof(struct slap_internal_schema, si_ad_syncTimestamp) },
+#endif
+
        /* root DSE attributes */
        { "altServer", "( 1.3.6.1.4.1.1466.101.120.6 NAME 'altServer' "
                        "DESC 'RFC2252: alternative servers' "
@@ -657,9 +677,9 @@ static struct slap_schema_ad_map {
                NULL, NULL,
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_children) },
-       { "saslAuthzTo", "( 1.3.6.1.4.1.4203.666.1.8 "
-                       "NAME 'saslAuthzTo' "
-                       "DESC 'SASL proxy authorization targets' "
+       { "authzTo", "( 1.3.6.1.4.1.4203.666.1.8 "
+                       "NAME ( 'authzTo' 'saslAuthzTo' ) "
+                       "DESC 'proxy authorization targets' "
                        "EQUALITY caseExactMatch "
                        "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
                        "USAGE distributedOperation )",
@@ -667,9 +687,9 @@ static struct slap_schema_ad_map {
                NULL, NULL,
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_saslAuthzTo) },
-       { "saslAuthzFrom", "( 1.3.6.1.4.1.4203.666.1.9 "
-                       "NAME 'saslAuthzFrom' "
-                       "DESC 'SASL proxy authorization sources' "
+       { "authzFrom", "( 1.3.6.1.4.1.4203.666.1.9 "
+                       "NAME ( 'authzFrom' 'saslAuthzFrom' ) "
+                       "DESC 'proxy authorization sources' "
                        "EQUALITY caseExactMatch "
                        "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
                        "USAGE distributedOperation )",
@@ -684,7 +704,7 @@ static struct slap_schema_ad_map {
                        "EQUALITY OpenLDAPaciMatch "
                        "SYNTAX 1.3.6.1.4.1.4203.666.2.1 "
                        "USAGE directoryOperation )",
-               NULL, 0,
+               NULL, SLAP_AT_HIDE,
                NULL, NULL,
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_aci) },
@@ -744,6 +764,15 @@ static struct slap_schema_ad_map {
                NULL, NULL, NULL, NULL, NULL,
                offsetof(struct slap_internal_schema, si_ad_userPassword) },
 
+       { "labeledURI", "(  1.3.6.1.4.1.250.1.57 NAME 'labeledURI' "
+                       "DESC 'RFC2079: Uniform Resource Identifier with optional label' "
+                       "EQUALITY caseExactMatch "
+                       "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )",
+               NULL, 0,
+               NULL, NULL,
+               NULL, NULL, NULL, NULL, NULL,
+               offsetof(struct slap_internal_schema, si_ad_labeledURI) },
+
 #ifdef SLAPD_AUTHPASSWD
        { "authPassword", "( 1.3.6.1.4.1.4203.1.3.4 "
                        "NAME 'authPassword' "