]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schemaparse.c
s/forms/form in PADL copyright
[openldap] / servers / slapd / schemaparse.c
index 1f9138753b38459864de403b687d815e669c37f7..fbfd93a59bd49d527b0772c356e630b73aacbf47 100644 (file)
@@ -1,7 +1,7 @@
 /* schemaparse.c - routines to parse config file objectclass definitions */
 /* $OpenLDAP$ */
 /*
 /* schemaparse.c - routines to parse config file objectclass definitions */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -25,23 +25,28 @@ static char *const err2text[] = {
        "Success",
        "Out of memory",
        "ObjectClass not found",
        "Success",
        "Out of memory",
        "ObjectClass not found",
-       "ObjectClass inappropriate SUPerior",
-       "ObjectClass operational",
+       "user-defined ObjectClass includes operational attributes",
+       "user-defined ObjectClass has inappropriate SUPerior",
        "Duplicate objectClass",
        "AttributeType not found",
        "Duplicate objectClass",
        "AttributeType not found",
+       "AttributeType inappropriate matching rule",
        "AttributeType inappropriate USAGE",
        "AttributeType inappropriate SUPerior",
        "AttributeType SYNTAX or SUPerior required",
        "Duplicate attributeType",
        "MatchingRule not found",
        "AttributeType inappropriate USAGE",
        "AttributeType inappropriate SUPerior",
        "AttributeType SYNTAX or SUPerior required",
        "Duplicate attributeType",
        "MatchingRule not found",
+       "MatchingRule incomplete",
        "Duplicate matchingRule",
        "Syntax not found",
        "Duplicate matchingRule",
        "Syntax not found",
-       "Syntax required",
        "Duplicate ldapSyntax",
        "OID or name required",
        "Qualifier not supported",
        "Invalid NAME",
        "Duplicate ldapSyntax",
        "OID or name required",
        "Qualifier not supported",
        "Invalid NAME",
-       "OID could not be expanded"
+       "OID could not be expanded",
+       "Duplicate Content Rule",
+       "Content Rule not for STRUCTURAL object class",
+       "Content Rule AUX contains non-AUXILIARY object class"
+       "Content Rule attribute type list contains duplicate"
 };
 
 char *
 };
 
 char *
@@ -91,6 +96,64 @@ dscompare(const char *s1, const char *s2, char delim)
        return 0;
 }
 
        return 0;
 }
 
+#ifdef SLAP_EXTENDED_SCHEMA
+
+static void
+cr_usage( void )
+{
+       fprintf( stderr,
+               "DITContentRuleDescription = \"(\" whsp\n"
+               "  numericoid whsp       ; StructuralObjectClass identifier\n"
+               "  [ \"NAME\" qdescrs ]\n"
+               "  [ \"DESC\" qdstring ]\n"
+               "  [ \"OBSOLETE\" whsp ]\n"
+               "  [ \"AUX\" oids ]      ; Auxiliary ObjectClasses\n"
+               "  [ \"MUST\" oids ]     ; AttributeTypes\n"
+               "  [ \"MAY\" oids ]      ; AttributeTypes\n"
+               "  [ \"NOT\" oids ]      ; AttributeTypes\n"
+               "  whsp \")\"\n" );
+}
+
+int
+parse_cr(
+    const char *fname,
+    int                lineno,
+    char       *line,
+    char       **argv
+)
+{
+       LDAPContentRule *cr;
+       int             code;
+       const char      *err;
+
+       cr = ldap_str2contentrule(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL );
+       if ( !cr ) {
+               fprintf( stderr, "%s: line %d: %s before %s\n",
+                        fname, lineno, ldap_scherr2str(code), err );
+               cr_usage();
+               return 1;
+       }
+
+       if ( cr->cr_oid == NULL ) {
+               fprintf( stderr,
+                       "%s: line %d: Content rule has no OID\n",
+                       fname, lineno );
+               cr_usage();
+               return 1;
+       }
+
+       code = cr_add(cr,1,&err);
+       if ( code ) {
+               fprintf( stderr, "%s: line %d: %s: \"%s\"\n",
+                        fname, lineno, scherr2str(code), err);
+               return 1;
+       }
+
+       ldap_memfree(cr);
+       return 0;
+}
+
+#endif
 
 int
 parse_oc(
 
 int
 parse_oc(
@@ -148,7 +211,6 @@ oc_usage( void )
                "  whsp \")\"\n" );
 }
 
                "  whsp \")\"\n" );
 }
 
-
 static void
 at_usage( void )
 {
 static void
 at_usage( void )
 {