X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fschemaparse.c;h=6f00e93eef2fa297d1cbfed1887fd8d11004caca;hb=517fa54bb0f764968ca56e7931a09adac4f33af6;hp=68bc0ae31bdbd41fbd2ba8a7886e98ced5221ad2;hpb=dab0793d0c91079ceebed4ec1946591aa2b9a6cb;p=openldap diff --git a/servers/slapd/schemaparse.c b/servers/slapd/schemaparse.c index 68bc0ae31b..6f00e93eef 100644 --- a/servers/slapd/schemaparse.c +++ b/servers/slapd/schemaparse.c @@ -18,14 +18,11 @@ int global_schemacheck = 1; /* schemacheck on is default */ -#ifndef SLAPD_SCHEMA_NOT_COMPAT -static void oc_usage_old(void) LDAP_GCCATTR((noreturn)); -#endif static void oc_usage(void) LDAP_GCCATTR((noreturn)); static void at_usage(void) LDAP_GCCATTR((noreturn)); static char *const err2text[] = { - "", + "Success", "Out of memory", "ObjectClass not found", "AttributeType not found", @@ -43,112 +40,13 @@ static char *const err2text[] = { char * scherr2str(int code) { - if ( code < 1 || code >= (sizeof(err2text)/sizeof(char *)) ) { + if ( code < 0 || code >= (sizeof(err2text)/sizeof(char *)) ) { return "Unknown error"; } else { return err2text[code]; } } -#ifndef SLAPD_SCHEMA_NOT_COMPAT -void -parse_oc_old( - Backend *be, - const char *fname, - int lineno, - int argc, - char **argv -) -{ - int i; - char last; - LDAP_OBJECT_CLASS *oc; - int code; - const char *err; - char **namep; - - oc = (LDAP_OBJECT_CLASS *) ch_calloc( 1, sizeof(LDAP_OBJECT_CLASS) ); - oc->oc_names = ch_calloc( 2, sizeof(char *) ); - oc->oc_names[0] = ch_strdup( argv[1] ); - oc->oc_names[1] = NULL; - - if ( strcasecmp( oc->oc_names[0], "top" ) ) { - /* - * no way to distinguish "auxiliary" from "structural" - * This may lead to future problems. - */ - oc->oc_kind = LDAP_SCHEMA_STRUCTURAL; - } - for ( i = 2; i < argc; i++ ) { - /* required attributes */ - if ( strcasecmp( argv[i], "requires" ) == 0 ) { - do { - i++; - if ( i < argc ) { - char **s = str2charray( argv[i], "," ); - last = argv[i][strlen( argv[i] ) - 1]; - charray_merge( &oc->oc_at_oids_must, s ); - charray_free( s ); - } - } while ( i < argc && last == ',' ); - - /* optional attributes */ - } else if ( strcasecmp( argv[i], "allows" ) == 0 ) { - do { - i++; - if ( i < argc ) { - char **s = str2charray( argv[i], "," ); - last = argv[i][strlen( argv[i] ) - 1]; - - charray_merge( &oc->oc_at_oids_may, s ); - charray_free( s ); - } - } while ( i < argc && last == ',' ); - - } else { - fprintf( stderr, - "%s: line %d: expecting \"requires\" or \"allows\" got \"%s\"\n", - fname, lineno, argv[i] ); - oc_usage_old(); - } - } - - /* - * There was no requirement in the old schema that all attributes - * types were defined before use and they would just default to - * SYNTAX_CIS. To support this, we need to make attribute types - * out of thin air. - */ - if ( oc->oc_at_oids_must ) { - for( namep = oc->oc_at_oids_must; *namep ; namep++ ) { - code = at_fake_if_needed( *namep ); - if ( code ) { - fprintf( stderr, "%s: line %d: %s: \"%s\"\n", - fname, lineno, scherr2str(code), *namep); - exit( EXIT_FAILURE ); - } - } - } - if ( oc->oc_at_oids_may ) { - for( namep = oc->oc_at_oids_may; *namep; namep++ ) { - code = at_fake_if_needed( *namep ); - if ( code ) { - fprintf( stderr, "%s: line %d: %s: \"%s\"\n", - fname, lineno, scherr2str(code), *namep); - exit( EXIT_FAILURE ); - } - } - } - - code = oc_add(oc,&err); - if ( code ) { - fprintf( stderr, "%s: line %d: %s: \"%s\"\n", - fname, lineno, scherr2str(code), err); - exit( EXIT_FAILURE ); - } - ldap_memfree(oc); -} -#endif /* OID Macros */ @@ -180,7 +78,7 @@ find_oidm(char *oid) OidMacro *om; /* OID macros must start alpha */ - if ( isdigit( *oid ) ) { + if ( OID_LEADCHAR( *oid ) ) { return oid; } @@ -273,14 +171,14 @@ parse_oc( const char *err; char *oid = NULL; - oc = ldap_str2objectclass(line,&code,&err); + 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 ); oc_usage(); } if ( oc->oc_oid ) { - if ( !isdigit( oc->oc_oid[0] )) { + if ( !OID_LEADCHAR( oc->oc_oid[0] )) { /* Expand OID macros */ oid = find_oidm( oc->oc_oid ); if ( !oid ) { @@ -308,54 +206,46 @@ parse_oc( static void oc_usage( void ) { - fprintf( stderr, "ObjectClassDescription = \"(\" whsp\n"); - fprintf( stderr, " numericoid whsp ; ObjectClass identifier\n"); - fprintf( stderr, " [ \"NAME\" qdescrs ]\n"); - fprintf( stderr, " [ \"DESC\" qdstring ]\n"); - fprintf( stderr, " [ \"OBSOLETE\" whsp ]\n"); - fprintf( stderr, " [ \"SUP\" oids ] ; Superior ObjectClasses\n"); - fprintf( stderr, " [ ( \"ABSTRACT\" / \"STRUCTURAL\" / \"AUXILIARY\" ) whsp ]\n"); - fprintf( stderr, " ; default structural\n"); - fprintf( stderr, " [ \"MUST\" oids ] ; AttributeTypes\n"); - fprintf( stderr, " [ \"MAY\" oids ] ; AttributeTypes\n"); - fprintf( stderr, "whsp \")\"\n"); + fprintf( stderr, + "ObjectClassDescription = \"(\" whsp\n" + " numericoid whsp ; ObjectClass identifier\n" + " [ \"NAME\" qdescrs ]\n" + " [ \"DESC\" qdstring ]\n" + " [ \"OBSOLETE\" whsp ]\n" + " [ \"SUP\" oids ] ; Superior ObjectClasses\n" + " [ ( \"ABSTRACT\" / \"STRUCTURAL\" / \"AUXILIARY\" ) whsp ]\n" + " ; default structural\n" + " [ \"MUST\" oids ] ; AttributeTypes\n" + " [ \"MAY\" oids ] ; AttributeTypes\n" + " whsp \")\"\n" ); exit( EXIT_FAILURE ); } -#ifndef SLAPD_SCHEMA_NOT_COMPAT -static void -oc_usage_old( void ) -{ - fprintf( stderr, " ::= objectclass \n" ); - fprintf( stderr, " [ requires ]\n" ); - fprintf( stderr, " [ allows ]\n" ); - exit( EXIT_FAILURE ); -} -#endif static void at_usage( void ) { - fprintf( stderr, "AttributeTypeDescription = \"(\" whsp\n"); - fprintf( stderr, " numericoid whsp ; AttributeType identifier\n"); - fprintf( stderr, " [ \"NAME\" qdescrs ] ; name used in AttributeType\n"); - fprintf( stderr, " [ \"DESC\" qdstring ] ; description\n"); - fprintf( stderr, " [ \"OBSOLETE\" whsp ]\n"); - fprintf( stderr, " [ \"SUP\" woid ] ; derived from this other\n"); - fprintf( stderr, " ; AttributeType\n"); - fprintf( stderr, " [ \"EQUALITY\" woid ] ; Matching Rule name\n"); - fprintf( stderr, " [ \"ORDERING\" woid ] ; Matching Rule name\n"); - fprintf( stderr, " [ \"SUBSTR\" woid ] ; Matching Rule name\n"); - fprintf( stderr, " [ \"SYNTAX\" whsp noidlen whsp ] ; see section 4.3\n"); - fprintf( stderr, " [ \"SINGLE-VALUE\" whsp ] ; default multi-valued\n"); - fprintf( stderr, " [ \"COLLECTIVE\" whsp ] ; default not collective\n"); - fprintf( stderr, " [ \"NO-USER-MODIFICATION\" whsp ]; default user modifiable\n"); - fprintf( stderr, " [ \"USAGE\" whsp AttributeUsage ]; default userApplications\n"); - fprintf( stderr, " ; userApplications\n"); - fprintf( stderr, " ; directoryOperation\n"); - fprintf( stderr, " ; distributedOperation\n"); - fprintf( stderr, " ; dSAOperation\n"); - fprintf( stderr, "whsp \")\"\n"); + fprintf( stderr, + "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" + " [ \"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" + " [ \"NO-USER-MODIFICATION\" whsp ]; default user modifiable\n" + " [ \"USAGE\" whsp AttributeUsage ]; default userApplications\n" + " ; userApplications\n" + " ; directoryOperation\n" + " ; distributedOperation\n" + " ; dSAOperation\n" + " whsp \")\"\n"); exit( EXIT_FAILURE ); } @@ -382,7 +272,7 @@ parse_at( for (; argv[3]; argv++) { if (!strcasecmp(argv[3], "syntax") && - !isdigit(*argv[4])) + !OID_LEADCHAR(*argv[4])) { int slen; Syntax *syn; @@ -398,14 +288,14 @@ parse_at( break; } } - at = ldap_str2attributetype(line,&code,&err); + 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 ); at_usage(); } if ( at->at_oid ) { - if ( !isdigit( at->at_oid[0] )) { + if ( !OID_LEADCHAR( at->at_oid[0] )) { /* Expand OID macros */ oid = find_oidm( at->at_oid ); if ( !oid ) { @@ -421,8 +311,7 @@ parse_at( } } /* at->at_oid == NULL will be an error someday */ - if (soid) - { + if (soid) { ldap_memfree(at->at_syntax_oid); at->at_syntax_oid = soid; }