X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fschemaparse.c;h=5f82e94c883205cf7e9987b6339ee7beea664cd7;hb=e25f6ef0cdd1780577dffeaca8ba8b19b5697880;hp=d9f6b6c106e931ea326709ed13ff520ecc979f78;hpb=e6d4c7dbcc21d38b40ae1fa307f167a9247a9015;p=openldap diff --git a/servers/slapd/schemaparse.c b/servers/slapd/schemaparse.c index d9f6b6c106..5f82e94c88 100644 --- a/servers/slapd/schemaparse.c +++ b/servers/slapd/schemaparse.c @@ -1,7 +1,7 @@ /* schemaparse.c - routines to parse config file objectclass definitions */ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -16,12 +16,12 @@ #include "slap.h" #include "ldap_schema.h" -int global_schemacheck = 1; /* schemacheck on is default */ +int global_schemacheck = 1; /* schemacheck ON is default */ static void oc_usage(void); static void at_usage(void); -static char *const err2text[] = { +static char *const err2text[SLAP_SCHERR_LAST+1] = { "Success", "Out of memory", "ObjectClass not found", @@ -38,7 +38,8 @@ static char *const err2text[] = { "Syntax not found", "Syntax required", "Qualifier not supported", - "Invalid NAME" + "Invalid NAME", + "OID could not be expanded" }; char * @@ -88,112 +89,6 @@ dscompare(const char *s1, const char *s2, char delim) return 0; } -static OidMacro *om_list = NULL; - -/* Replace an OID Macro invocation with its full numeric OID. - * If the macro is used with "macroname:suffix" append ".suffix" - * to the expansion. - */ -static char * -find_oidm(char *oid) -{ - OidMacro *om; - - /* OID macros must start alpha */ - if ( OID_LEADCHAR( *oid ) ) { - return oid; - } - - for (om = om_list; om; om=om->som_next) { - char **names = om->som_names; - - if( names == NULL ) { - continue; - } - - for( ; *names != NULL ; names++ ) { - int pos = dscompare(*names, oid, ':'); - - if( pos ) { - int suflen = strlen(oid + pos); - char *new = ch_malloc( om->som_oid.bv_len - + suflen + 1); - strcpy(new, om->som_oid.bv_val); - - if( suflen ) { - suflen = om->som_oid.bv_len; - new[suflen++] = '.'; - strcpy(new+suflen, oid+pos+1); - } - return new; - } - } - } - return NULL; -} - -void -oidm_destroy() -{ - OidMacro *om, *n; - - for (om = om_list; om; om = n) { - n = om->som_next; - charray_free(om->som_names); - free(om->som_oid.bv_val); - free(om); - } -} - -int -parse_oidm( - const char *fname, - int lineno, - int argc, - char **argv -) -{ - char *oid; - OidMacro *om; - - if (argc != 3) { - fprintf( stderr, "%s: line %d: too many arguments\n", - fname, lineno ); -usage: fprintf( stderr, "\tObjectIdentifier \n"); - return 1; - } - - oid = find_oidm( argv[1] ); - if( oid != NULL ) { - fprintf( stderr, - "%s: line %d: " - "ObjectIdentifier \"%s\" previously defined \"%s\"", - fname, lineno, argv[1], oid ); - return 1; - } - - om = (OidMacro *) ch_malloc( sizeof(OidMacro) ); - - om->som_names = NULL; - charray_add( &om->som_names, argv[1] ); - om->som_oid.bv_val = find_oidm( argv[2] ); - - if (!om->som_oid.bv_val) { - fprintf( stderr, "%s: line %d: OID %s not recognized\n", - fname, lineno, argv[2] ); - goto usage; - } - - if (om->som_oid.bv_val == argv[2]) { - om->som_oid.bv_val = ch_strdup( argv[2] ); - } - - om->som_oid.bv_len = strlen( om->som_oid.bv_val ); - om->som_next = om_list; - om_list = om; - - return 0; -} int parse_oc( @@ -206,9 +101,8 @@ parse_oc( LDAPObjectClass *oc; int code; const char *err; - char *oid = NULL; - oc = ldap_str2objectclass(line,&code,&err,LDAP_SCHEMA_ALLOW_ALL); + oc = ldap_str2objectclass(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !oc ) { fprintf( stderr, "%s: line %d: %s before %s\n", fname, lineno, ldap_scherr2str(code), err ); @@ -224,21 +118,6 @@ parse_oc( return 1; } - if ( !OID_LEADCHAR( oc->oc_oid[0] )) { - /* Expand OID macros */ - oid = find_oidm( oc->oc_oid ); - if ( !oid ) { - fprintf( stderr, - "%s: line %d: OID %s not recognized\n", - fname, lineno, oc->oc_oid); - return 1; - } - if ( oid != oc->oc_oid ) { - ldap_memfree( oc->oc_oid ); - oc->oc_oid = oid; - } - } - code = oc_add(oc,&err); if ( code ) { fprintf( stderr, "%s: line %d: %s: \"%s\"\n", @@ -307,7 +186,7 @@ parse_at( const char *err; char *oid = NULL; - at = ldap_str2attributetype(line,&code,&err,LDAP_SCHEMA_ALLOW_ALL); + at = ldap_str2attributetype( line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !at ) { fprintf( stderr, "%s: line %d: %s before %s\n", fname, lineno, ldap_scherr2str(code), err ); @@ -323,36 +202,13 @@ parse_at( return 1; } - if ( !OID_LEADCHAR( at->at_oid[0] )) { - /* Expand OID macros */ - oid = find_oidm( at->at_oid ); - if ( !oid ) { - fprintf( stderr, - "%s: line %d: OID %s not recognized\n", - fname, lineno, at->at_oid); - return 1; - } - if ( oid != at->at_oid ) { - ldap_memfree( at->at_oid ); - at->at_oid = oid; - } + /* operational attributes should be defined internally */ + if ( at->at_usage ) { + fprintf( stderr, "%s: line %d: attribute type \"%s\" is operational\n", + fname, lineno, at->at_oid ); + return 1; } - if ( at->at_syntax_oid && !OID_LEADCHAR( at->at_syntax_oid[0] )) { - /* Expand OID macros */ - oid = find_oidm( at->at_syntax_oid ); - if ( !oid ) { - fprintf(stderr, - "%s: line %d: OID %s not recognized\n", - fname, lineno, at->at_syntax_oid); - return 1; - } - if ( oid != at->at_syntax_oid ) { - ldap_memfree( at->at_syntax_oid ); - at->at_syntax_oid = oid; - } - - } code = at_add(at,&err); if ( code ) { fprintf( stderr, "%s: line %d: %s: \"%s\"\n",