static int
mr_index_name_cmp(
- char *name,
+ char *name,
struct mindexrec *mir
)
{
struct mindexrec *mir = NULL;
if ( (mir = (struct mindexrec *) avl_find( mr_index, mrname,
- (AVL_CMP) mr_index_name_cmp )) != NULL ) {
+ (AVL_CMP) mr_index_name_cmp )) != NULL ) {
return( mir->mir_mr );
}
return( NULL );
int
mr_add(
- LDAP_MATCHING_RULE *mr,
+ LDAPMatchingRule *mr,
unsigned usage,
slap_mr_convert_func *convert,
slap_mr_normalize_func *normalize,
slap_mr_match_func *match,
slap_mr_indexer_func *indexer,
slap_mr_filter_func *filter,
+ MatchingRule *amr,
const char **err
)
{
int code;
smr = (MatchingRule *) ch_calloc( 1, sizeof(MatchingRule) );
- memcpy( &smr->smr_mrule, mr, sizeof(LDAP_MATCHING_RULE));
+ AC_MEMCPY( &smr->smr_mrule, mr, sizeof(LDAPMatchingRule));
smr->smr_usage = usage;
smr->smr_convert = convert;
smr->smr_match = match;
smr->smr_indexer = indexer;
smr->smr_filter = filter;
+ smr->smr_associated = amr;
if ( smr->smr_syntax_oid ) {
if ( (syn = syn_find(smr->smr_syntax_oid)) ) {
slap_mr_normalize_func *normalize,
slap_mr_match_func *match,
slap_mr_indexer_func *indexer,
- slap_mr_filter_func *filter )
+ slap_mr_filter_func *filter,
+ const char* associated )
{
- LDAP_MATCHING_RULE *mr;
+ LDAPMatchingRule *mr;
+ MatchingRule *amr = NULL;
int code;
const char *err;
if( usage == SLAP_MR_NONE ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
+ "register_matching_rule: %s not usable\n", desc ));
+#else
Debug( LDAP_DEBUG_ANY, "register_matching_rule: not usable %s\n",
desc, 0, 0 );
+#endif
+
return -1;
}
+ if( associated != NULL ) {
+ amr = mr_find( associated );
+
+#if 0
+ /* ignore for now */
+
+ if( amr == NULL ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
+ "register_matching_rule: could not locate associated matching rule %s for %s\n",
+ associated, desc ));
+#else
+ Debug( LDAP_DEBUG_ANY, "register_matching_rule: could not locate "
+ "associated matching rule %s for %s\n",
+ associated, desc, 0 );
+#endif
+
+ return -1;
+ }
+#endif
+
+ }
+
mr = ldap_str2matchingrule( desc, &code, &err, LDAP_SCHEMA_ALLOW_ALL);
if ( !mr ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
+ "register_matching_rule: %s before %s in %s.\n",
+ ldap_scherr2str(code), err, desc ));
+#else
Debug( LDAP_DEBUG_ANY, "Error in register_matching_rule: %s before %s in %s\n",
ldap_scherr2str(code), err, desc );
+#endif
+
return( -1 );
}
code = mr_add( mr, usage,
- convert, normalize, match, indexer, filter,
+ convert, normalize, match, indexer, filter, amr,
&err );
+ ldap_memfree( mr );
+
if ( code ) {
- Debug( LDAP_DEBUG_ANY, "Error in register_syntax: %s for %s in %s\n",
+#ifdef NEW_LOGGING
+ LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
+ "register_matching_rule: %s for %s in %s.\n",
+ scherr2str(code), err, desc ));
+#else
+ Debug( LDAP_DEBUG_ANY, "Error in register_matching_rule: %s for %s in %s\n",
scherr2str(code), err, desc );
+#endif
+
return( -1 );
}
vals[1] = NULL;
for ( mr = mr_list; mr; mr = mr->smr_next ) {
+ if ( ! mr->smr_match ) {
+ /* skip rules without matching functions */
+ continue;
+ }
+
val.bv_val = ldap_matchingrule2str( &mr->smr_mrule );
if ( val.bv_val == NULL ) {