]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_init.c
cleanup bind
[openldap] / servers / slapd / schema_init.c
index e4dcb06b3b938d6aa7479677502c5ae5d398113d..0001b381dc25bdc27c176d348cb8474d12a125d7 100644 (file)
@@ -56,7 +56,6 @@
 #define objectIdentifierNormalize                                      NULL
 #define objectIdentifierFirstComponentNormalize                NULL
 #define generalizedTimeNormalize                                       NULL
-#define uniqueMemberNormalize                                          NULL
 #define bitStringNormalize                                                     NULL
 #define telephoneNumberNormalize                                       NULL
 
@@ -65,7 +64,7 @@
 #define distinguishedNameIndexer       octetStringIndexer
 #define distinguishedNameFilter                octetStringFilter
 
-#define uniqueMemberMatch                              dnMatch
+#define uniqueMemberMatch                      dnMatch
 
 #define objectIdentifierMatch  octetStringMatch
 #define objectIdentifierIndexer        octetStringIndexer
 #define caseIgnoreIndexer      octetStringIndexer
 #define caseIgnoreFilter       octetStringFilter
 
-#define caseIgnoreSubstringsMatch              SubstringsMatch
-#define caseIgnoreSubstringsIndexer            NULL
-#define caseIgnoreSubstringsFilter             NULL
+#define caseIgnoreSubstringsMatch              octetStringSubstringsMatch
+#define caseIgnoreSubstringsIndexer            octetStringSubstringsIndexer
+#define caseIgnoreSubstringsFilter             octetStringSubstringsFilter
 
 #define caseExactMatch         octetStringMatch
 #define caseExactOrderingMatch         octetStringOrderingMatch
 #define caseExactIndexer       octetStringIndexer
 #define caseExactFilter                octetStringFilter
 
-#define caseExactSubstringsMatch               NULL
-#define caseExactSubstringsIndexer             NULL
-#define caseExactSubstringsFilter              NULL
+#define caseExactSubstringsMatch               octetStringSubstringsMatch
+#define caseExactSubstringsIndexer             octetStringSubstringsIndexer
+#define caseExactSubstringsFilter              octetStringSubstringsFilter
 
 #define caseExactIA5Match              octetStringMatch
 #define caseExactIA5Indexer            octetStringIndexer
 #define caseExactIA5Filter             octetStringFilter
 
-#define caseExactIA5SubstringsMatch                    NULL
-#define caseExactIA5SubstringsIndexer          NULL
-#define caseExactIA5SubstringsFilter           NULL
+#define caseExactIA5SubstringsMatch                    octetStringSubstringsMatch
+#define caseExactIA5SubstringsIndexer          octetStringSubstringsIndexer
+#define caseExactIA5SubstringsFilter           octetStringSubstringsFilter
 
 #define caseIgnoreIA5Match             octetStringMatch
 #define caseIgnoreIA5Indexer   octetStringIndexer
 #define objectIdentifierIndexer                        caseIgnoreIA5Indexer
 #define objectIdentifierFilter                 caseIgnoreIA5Filter
 
-#define OpenLDAPaciMatch                                               NULL
+#define octetStringSubstringsMatch             NULL
+#define OpenLDAPaciMatch                               NULL
 
 #define generalizedTimeMatch                   caseIgnoreIA5Match
 #define generalizedTimeOrderingMatch   caseIgnoreIA5Match
@@ -486,13 +486,21 @@ nameUIDValidate(
        return rc;
 }
 
-#ifndef SLAP_NVALUES
-
+#ifdef SLAP_NVALUES
+static int
+uniqueMemberNormalize(
+       slap_mask_t usage,
+       Syntax *syntax,
+       MatchingRule *mr,
+       struct berval *val,
+       struct berval *normalized )
+#else
 static int
 xnameUIDNormalize(
        Syntax *syntax,
        struct berval *val,
        struct berval *normalized )
+#endif
 {
        struct berval out;
        int rc;
@@ -548,7 +556,6 @@ xnameUIDNormalize(
        return LDAP_SUCCESS;
 }
 
-#endif
 /*
  * Handling boolean syntax and matching is quite rigid.
  * A more flexible approach would be to allow a variety
@@ -1589,10 +1596,16 @@ static int caseExactIgnoreFilter(
        *keysp = keys;
        return LDAP_SUCCESS;
 }
+#endif
 
 /* Substrings Index generation function */
-static int caseExactIgnoreSubstringsIndexer(
-       slap_mask_t use,
+static int
+#ifdef SLAP_NVALUES
+octetStringSubstringsIndexer
+#else
+caseExactIgnoreSubstringsIndexer
+#endif
+       ( slap_mask_t use,
        slap_mask_t flags,
        Syntax *syntax,
        MatchingRule *mr,
@@ -1600,11 +1613,13 @@ static int caseExactIgnoreSubstringsIndexer(
        BerVarray values,
        BerVarray *keysp )
 {
-       unsigned casefold, wasspace;
        ber_len_t i, j, nkeys;
        size_t slen, mlen;
        BerVarray keys;
+#ifndef SLAP_NVALUES
        BerVarray tvalues, nvalues;
+       unsigned casefold, wasspace;
+#endif
 
        HASH_CONTEXT   HASHcontext;
        unsigned char   HASHdigest[HASH_BYTES];
@@ -1612,8 +1627,7 @@ static int caseExactIgnoreSubstringsIndexer(
        digest.bv_val = HASHdigest;
        digest.bv_len = sizeof(HASHdigest);
 
-       nkeys=0;
-
+#ifndef SLAP_NVALUES
        for( i=0; values[i].bv_val != NULL; i++ ) {
                /* empty - just count them */
        }
@@ -1659,6 +1673,9 @@ static int caseExactIgnoreSubstringsIndexer(
        tvalues[i].bv_val = NULL;
        nvalues[i].bv_val = NULL;
        values = nvalues;
+#endif
+
+       nkeys=0;
 
        for( i=0; values[i].bv_val != NULL; i++ ) {
                /* count number of indices to generate */
@@ -1694,8 +1711,10 @@ static int caseExactIgnoreSubstringsIndexer(
        if( nkeys == 0 ) {
                /* no keys to generate */
                *keysp = NULL;
+#ifndef SLAP_NVALUES
                ber_bvarray_free( tvalues );
                ch_free( nvalues );
+#endif
                return LDAP_SUCCESS;
        }
 
@@ -1796,14 +1815,21 @@ static int caseExactIgnoreSubstringsIndexer(
                *keysp = NULL;
        }
 
+#ifndef SLAP_NVALUES
        ber_bvarray_free( tvalues );
        ch_free( nvalues );
+#endif
 
        return LDAP_SUCCESS;
 }
 
-static int caseExactIgnoreSubstringsFilter(
-       slap_mask_t use,
+static int
+#ifdef SLAP_NVALUES
+octetStringSubstringsFilter
+#else
+caseExactIgnoreSubstringsFilter
+#endif
+       ( slap_mask_t use,
        slap_mask_t flags,
        Syntax *syntax,
        MatchingRule *mr,
@@ -1822,6 +1848,7 @@ static int caseExactIgnoreSubstringsFilter(
        struct berval *value;
        struct berval digest;
 
+#ifndef SLAP_NVALUES
        casefold = ( mr != slap_schema.si_mr_caseExactSubstringsMatch )
                ? LDAP_UTF8_CASEFOLD : LDAP_UTF8_NOCASEFOLD;
 
@@ -1830,6 +1857,9 @@ static int caseExactIgnoreSubstringsFilter(
                *keysp = NULL;
                return LDAP_SUCCESS;
        }
+#else
+       sa = (SubstringsAssertion *) assertedValue;
+#endif
 
        if( flags & SLAP_INDEX_SUBSTR_INITIAL && sa->sa_initial.bv_val != NULL &&
                sa->sa_initial.bv_len >= SLAP_INDEX_SUBSTR_MINLEN )
@@ -1978,6 +2008,8 @@ static int caseExactIgnoreSubstringsFilter(
        return LDAP_SUCCESS;
 }
 
+#ifndef SLAP_NVALUES
+
 static int
 caseIgnoreMatch(
        int *matchp,
@@ -2497,7 +2529,7 @@ static int
 caseExactIA5SubstringsMatch
 #else
 static int
-SubstringsMatch
+octetStringSubstringsMatch
 #endif
 (
        int *matchp,
@@ -2532,7 +2564,7 @@ SubstringsMatch
                        goto done;
                }
 
-               match = strncmp( sub->sa_initial.bv_val, left.bv_val,
+               match = memcmp( sub->sa_initial.bv_val, left.bv_val,
                        sub->sa_initial.bv_len );
 
                if( match != 0 ) {
@@ -2550,7 +2582,7 @@ SubstringsMatch
                        goto done;
                }
 
-               match = strncmp( sub->sa_final.bv_val,
+               match = memcmp( sub->sa_final.bv_val,
                        &left.bv_val[left.bv_len - sub->sa_final.bv_len],
                        sub->sa_final.bv_len );
 
@@ -2578,7 +2610,7 @@ retry:
                                continue;
                        }
 
-                       p = strchr( left.bv_val, *sub->sa_any[i].bv_val );
+                       p = memchr( left.bv_val, *sub->sa_any[i].bv_val, left.bv_len );
 
                        if( p == NULL ) {
                                match = 1;
@@ -2601,7 +2633,7 @@ retry:
                                goto done;
                        }
 
-                       match = strncmp( left.bv_val,
+                       match = memcmp( left.bv_val,
                                sub->sa_any[i].bv_val,
                                sub->sa_any[i].bv_len );
 
@@ -4749,7 +4781,6 @@ char *objectIdentifierFirstComponentMatchSyntaxes[] = {
  * Other matching rules in X.520 that we do not use (yet):
  *
  * 2.5.13.9            numericStringOrderingMatch
- * 2.5.13.19   octetStringSubstringsMatch
  * 2.5.13.25   uTCTimeMatch
  * 2.5.13.26   uTCTimeOrderingMatch
  * 2.5.13.31   directoryStringFirstComponentMatch
@@ -4920,6 +4951,13 @@ static slap_mrule_defs_rec mrule_defs[] = {
                octetStringOrderingMatch, NULL, NULL,
                NULL},
 
+       {"( 2.5.13.19 NAME 'octetStringSubstringsMatch' "
+               "SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )",
+               SLAP_MR_SUBSTR, NULL,
+               NULL, NULL,
+               octetStringSubstringsMatch, NULL, NULL,
+               NULL},
+
        {"( 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,