#define objectIdentifierNormalize NULL
#define objectIdentifierFirstComponentNormalize NULL
#define generalizedTimeNormalize NULL
-#define uniqueMemberNormalize NULL
#define bitStringNormalize NULL
#define telephoneNumberNormalize NULL
#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
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;
return LDAP_SUCCESS;
}
-#endif
/*
* Handling boolean syntax and matching is quite rigid.
* A more flexible approach would be to allow a variety
*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,
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];
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 */
}
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 */
if( nkeys == 0 ) {
/* no keys to generate */
*keysp = NULL;
+#ifndef SLAP_NVALUES
ber_bvarray_free( tvalues );
ch_free( nvalues );
+#endif
return LDAP_SUCCESS;
}
*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,
struct berval *value;
struct berval digest;
+#ifndef SLAP_NVALUES
casefold = ( mr != slap_schema.si_mr_caseExactSubstringsMatch )
? LDAP_UTF8_CASEFOLD : LDAP_UTF8_NOCASEFOLD;
*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 )
return LDAP_SUCCESS;
}
+#ifndef SLAP_NVALUES
+
static int
caseIgnoreMatch(
int *matchp,
caseExactIA5SubstringsMatch
#else
static int
-SubstringsMatch
+octetStringSubstringsMatch
#endif
(
int *matchp,
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 ) {
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 );
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;
goto done;
}
- match = strncmp( left.bv_val,
+ match = memcmp( left.bv_val,
sub->sa_any[i].bv_val,
sub->sa_any[i].bv_len );
* 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
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,