X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fschemaparse.c;h=d38fbfa1bb0745e5b997bf0c4a9682217e3c9379;hb=873be21a22ee220e096691f7593ba5bdd5d8ab8e;hp=cb5fca8f82d05f7f792ed66f1593ad4f05594dfc;hpb=8a5b200c447a758d91805827593db72c54bea6e2;p=openldap diff --git a/servers/slapd/schemaparse.c b/servers/slapd/schemaparse.c index cb5fca8f82..d38fbfa1bb 100644 --- a/servers/slapd/schemaparse.c +++ b/servers/slapd/schemaparse.c @@ -1,8 +1,17 @@ /* schemaparse.c - routines to parse config file objectclass definitions */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * 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 + * . */ #include "portable.h" @@ -42,7 +51,11 @@ static char *const err2text[] = { "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 inappropriate object class", + "Content Rule attribute type list contains duplicate" }; char * @@ -92,6 +105,60 @@ dscompare(const char *s1, const char *s2, char delim) return 0; } +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; +} int parse_oc( @@ -149,24 +216,23 @@ oc_usage( void ) " whsp \")\"\n" ); } - static void at_usage( void ) { - fprintf( stderr, + fprintf( stderr, "%s%s%s", "AttributeTypeDescription = \"(\" whsp\n" " numericoid whsp ; AttributeType identifier\n" " [ \"NAME\" qdescrs ] ; name used in AttributeType\n" " [ \"DESC\" qdstring ] ; description\n" " [ \"OBSOLETE\" whsp ]\n" " [ \"SUP\" woid ] ; derived from this other\n" - " ; AttributeType\n" + " ; AttributeType\n", " [ \"EQUALITY\" woid ] ; Matching Rule name\n" " [ \"ORDERING\" woid ] ; Matching Rule name\n" " [ \"SUBSTR\" woid ] ; Matching Rule name\n" " [ \"SYNTAX\" whsp noidlen whsp ] ; see section 4.3\n" " [ \"SINGLE-VALUE\" whsp ] ; default multi-valued\n" - " [ \"COLLECTIVE\" whsp ] ; default not collective\n" + " [ \"COLLECTIVE\" whsp ] ; default not collective\n", " [ \"NO-USER-MODIFICATION\" whsp ]; default user modifiable\n" " [ \"USAGE\" whsp AttributeUsage ]; default userApplications\n" " ; userApplications\n"