From 332ca35b636f103c5be67db857e2d3da4c734634 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Fri, 6 Sep 2002 03:39:12 +0000 Subject: [PATCH] matching rule checks --- servers/slapd/schema_init.c | 53 +++++++++++++++++++++++++++++++------ servers/slapd/schema_prep.c | 39 ++++++++++++++------------- 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index 6ced09a12b..af322982a3 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -60,6 +60,10 @@ #define caseExactOrderingMatch caseExactMatch #define integerOrderingMatch integerMatch +#ifdef LDAP_CLIENT_UPDATE +#define octetStringOrderingMatch octetStringMatch +#endif /* LDAP_CLIENT_UPDATE */ + /* unimplemented matching routines */ #define caseIgnoreListMatch NULL #define caseIgnoreListSubstringsMatch NULL @@ -4429,8 +4433,30 @@ static slap_syntax_defs_rec syntax_defs[] = { #ifdef HAVE_TLS char *certificateExactMatchSyntaxes[] = { - "1.3.6.1.4.1.1466.115.121.1.8", NULL }; + "1.3.6.1.4.1.1466.115.121.1.8" /* certificate */, + NULL +}; #endif +char *directoryStringSyntaxes[] = { + "1.3.6.1.4.1.1466.115.121.1.44" /* printableString */, + NULL +}; +char *integerFirstComponentMatchSyntaxes[] = { + "1.3.6.1.4.1.1466.115.121.1.27" /* INTEGER */, + "1.3.6.1.4.1.1466.115.121.1.17" /* ditStructureRuleDescription */, + NULL +}; +char *objectIdentifierFirstComponentMatchSyntaxes[] = { + "1.3.6.1.4.1.1466.115.121.1.38" /* OID */, + "1.3.6.1.4.1.1466.115.121.1.3" /* attributeTypeDescription */, + "1.3.6.1.4.1.1466.115.121.1.16" /* ditContentRuleDescription */, + "1.3.6.1.4.1.1466.115.121.1.54" /* ldapSyntaxDescription */, + "1.3.6.1.4.1.1466.115.121.1.30" /* matchingRuleDescription */, + "1.3.6.1.4.1.1466.115.121.1.31" /* matchingRuleUseDescription */, + "1.3.6.1.4.1.1466.115.121.1.35" /* nameFormDescription */, + "1.3.6.1.4.1.1466.115.121.1.37" /* objectClassDescription */, + NULL +}; /* * Other matching rules in X.520 that we do not use (yet): @@ -4497,14 +4523,15 @@ static slap_mrule_defs_rec mrule_defs[] = { {"( 2.5.13.2 NAME 'caseIgnoreMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )", - SLAP_MR_EQUALITY | SLAP_MR_EXT | SLAP_MR_DN_FOLD, NULL, + SLAP_MR_EQUALITY | SLAP_MR_EXT | SLAP_MR_DN_FOLD, + directoryStringSyntaxes, NULL, NULL, caseIgnoreMatch, caseExactIgnoreIndexer, caseExactIgnoreFilter, directoryStringApproxMatchOID }, {"( 2.5.13.3 NAME 'caseIgnoreOrderingMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )", - SLAP_MR_ORDERING, NULL, + SLAP_MR_ORDERING, directoryStringSyntaxes, NULL, NULL, caseIgnoreOrderingMatch, NULL, NULL, NULL}, @@ -4520,21 +4547,21 @@ static slap_mrule_defs_rec mrule_defs[] = { {"( 2.5.13.5 NAME 'caseExactMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )", - SLAP_MR_EQUALITY | SLAP_MR_EXT, NULL, + SLAP_MR_EQUALITY | SLAP_MR_EXT, directoryStringSyntaxes, NULL, NULL, caseExactMatch, caseExactIgnoreIndexer, caseExactIgnoreFilter, directoryStringApproxMatchOID }, {"( 2.5.13.6 NAME 'caseExactOrderingMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )", - SLAP_MR_ORDERING, NULL, + SLAP_MR_ORDERING, directoryStringSyntaxes, NULL, NULL, caseExactOrderingMatch, NULL, NULL, NULL}, {"( 2.5.13.7 NAME 'caseExactSubstringsMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )", - SLAP_MR_SUBSTR, NULL, + SLAP_MR_SUBSTR, directoryStringSyntaxes, NULL, NULL, caseExactIgnoreSubstringsMatch, caseExactIgnoreSubstringsIndexer, @@ -4608,6 +4635,15 @@ static slap_mrule_defs_rec mrule_defs[] = { octetStringMatch, octetStringIndexer, octetStringFilter, NULL}, +#ifdef LDAP_CLIENT_UPDATE + {"( 2.5.13.18 NAME 'octetStringOrderingMatch' " + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )", + SLAP_MR_ORDERING, NULL, + NULL, NULL, + octetStringOrderingMatch, NULL, NULL, + NULL}, +#endif /* LDAP_CLIENT_UPDATE */ + {"( 2.5.13.20 NAME 'telephoneNumberMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )", SLAP_MR_EQUALITY | SLAP_MR_EXT | SLAP_MR_DN_FOLD, NULL, @@ -4663,14 +4699,15 @@ static slap_mrule_defs_rec mrule_defs[] = { {"( 2.5.13.29 NAME 'integerFirstComponentMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )", - SLAP_MR_EQUALITY | SLAP_MR_EXT, NULL, + SLAP_MR_EQUALITY | SLAP_MR_EXT, integerFirstComponentMatchSyntaxes, NULL, NULL, integerFirstComponentMatch, NULL, NULL, NULL}, {"( 2.5.13.30 NAME 'objectIdentifierFirstComponentMatch' " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )", - SLAP_MR_EQUALITY | SLAP_MR_EXT, NULL, + SLAP_MR_EQUALITY | SLAP_MR_EXT, + objectIdentifierFirstComponentMatchSyntaxes, NULL, NULL, objectIdentifierFirstComponentMatch, NULL, NULL, NULL}, diff --git a/servers/slapd/schema_prep.c b/servers/slapd/schema_prep.c index 1a759cdde7..6c9f77f167 100644 --- a/servers/slapd/schema_prep.c +++ b/servers/slapd/schema_prep.c @@ -177,7 +177,7 @@ static int objectSubClassIndexer( k, ocvalues[k].bv_val, sup->soc_cname.bv_val ); #endif #endif - if( ber_bvcmp( &ocvalues[k], &sup->soc_cname ) == 0 ) { + if( bvmatch( &ocvalues[k], &sup->soc_cname ) ) { found++; break; } @@ -423,6 +423,9 @@ static struct slap_schema_ad_map { { "entryCSN", "( 1.3.6.1.4.1.4203.666.1.7 NAME 'entryCSN' " "DESC 'LCUP/LDUP: change sequence number' " "EQUALITY octetStringMatch " +#ifdef LDAP_CLIENT_UPDATE + "ORDERING octetStringOrderingMatch " +#endif /* LDAP_CLIENT_UPDATE */ "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{64} " "SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation )", NULL, SLAP_AT_HIDE, @@ -492,7 +495,7 @@ static struct slap_schema_ad_map { offsetof(struct slap_internal_schema, si_ad_monitorContext) }, { "vendorName", "( 1.3.6.1.1.4 NAME 'vendorName' " "DESC 'RFC3045: name of implementation vendor' " - "EQUALITY 1.3.6.1.4.1.1466.109.114.1 " + "EQUALITY caseExactMatch " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 " "SINGLE-VALUE NO-USER-MODIFICATION " "USAGE dSAOperation )", @@ -501,7 +504,7 @@ static struct slap_schema_ad_map { offsetof(struct slap_internal_schema, si_ad_vendorName) }, { "vendorVersion", "( 1.3.6.1.1.5 NAME 'vendorVersion' " "DESC 'RFC3045: version of implementation' " - "EQUALITY 1.3.6.1.4.1.1466.109.114.1 " + "EQUALITY caseExactMatch " "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 " "SINGLE-VALUE NO-USER-MODIFICATION " "USAGE dSAOperation )", @@ -768,7 +771,7 @@ slap_schema_load( void ) *synp = syn_find( syn_map[i].sssm_name ); if( *synp == NULL ) { - fprintf( stderr, "slap_schema_load: " + fprintf( stderr, "slap_schema_load: Syntax: " "No syntax \"%s\" defined in schema\n", syn_map[i].sssm_name ); return LDAP_INVALID_SYNTAX; @@ -784,7 +787,7 @@ slap_schema_load( void ) *mrp = mr_find( mr_map[i].ssmm_name ); if( *mrp == NULL ) { - fprintf( stderr, "slap_schema_load: " + fprintf( stderr, "slap_schema_load: MatchingRule: " "No matching rule \"%s\" defined in schema\n", mr_map[i].ssmm_name ); return LDAP_INAPPROPRIATE_MATCHING; @@ -802,22 +805,22 @@ slap_schema_load( void ) &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !at ) { fprintf( stderr, - "slap_schema_load: %s: %s before %s\n", + "slap_schema_load: AttributeType \"%s\": %s before %s\n", ad_map[i].ssam_name, ldap_scherr2str(code), err ); return code; } if ( at->at_oid == NULL ) { fprintf( stderr, "slap_schema_load: " - "attributeType \"%s\" has no OID\n", + "AttributeType \"%s\": no OID\n", ad_map[i].ssam_name ); return LDAP_OTHER; } code = at_add( at, &err ); if ( code ) { - fprintf( stderr, "slap_schema_load: " - "%s: %s: \"%s\"\n", + fprintf( stderr, "slap_schema_load: AttributeType " + "\"%s\": %s: \"%s\"\n", ad_map[i].ssam_name, scherr2str(code), err ); return code; } @@ -834,8 +837,8 @@ slap_schema_load( void ) rc = slap_str2ad( ad_map[i].ssam_name, adp, &text ); if( rc != LDAP_SUCCESS ) { - fprintf( stderr, "slap_schema_load: " - "No attribute \"%s\" defined in schema\n", + fprintf( stderr, "slap_schema_load: AttributeType \"%s\": " + "not defined in schema\n", ad_map[i].ssam_name ); return rc; } @@ -887,23 +890,23 @@ slap_schema_load( void ) oc = ldap_str2objectclass( oc_map[i].ssom_defn, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !oc ) { - fprintf( stderr, "slap_schema_load: " - "%s: %s before %s\n", + fprintf( stderr, "slap_schema_load: ObjectClass " + "\"%s\": %s before %s\n", oc_map[i].ssom_name, ldap_scherr2str(code), err ); return code; } if ( oc->oc_oid == NULL ) { - fprintf( stderr, "slap_schema_load: " - "%s: objectclass has no OID\n", + fprintf( stderr, "slap_schema_load: ObjectClass " + "\"%s\": no OID\n", oc_map[i].ssom_name ); return LDAP_OTHER; } code = oc_add(oc,0,&err); if ( code ) { - fprintf( stderr, "slap_schema_load: " - "%s: %s: \"%s\"\n", + fprintf( stderr, "slap_schema_load: ObjectClass " + "\"%s\": %s: \"%s\"\n", oc_map[i].ssom_name, scherr2str(code), err); return code; } @@ -919,7 +922,7 @@ slap_schema_load( void ) *ocp = oc_find( oc_map[i].ssom_name ); if( *ocp == NULL ) { fprintf( stderr, "slap_schema_load: " - "No objectClass \"%s\" defined in schema\n", + "ObjectClass \"%s\": not defined in schema\n", oc_map[i].ssom_name ); return LDAP_OBJECT_CLASS_VIOLATION; } -- 2.39.5