[Date Prev][Date Next] [Chronological] [Thread] [Top]

[Fwd: Support for ordering matching rules in extensible match filters?]



Hi,

first of all, please excuse me if I've hit the wrong openldap mailinglist.

My question below is related to section 4.1 of RFC4517 which says:

  Servers that implement the extensibleMatch filter SHOULD allow the
  matching rules listed in Section 4.2 to be used in the
  extensibleMatch filter and SHOULD allow matching rules to be used
  with all attribute types known to the server, where the assertion
  syntax of the matching rule is the same as the value syntax of the
  attribute.

Could someone please explain to me why openldap currently doesn't support for example 'caseIgnoreOrderingMatch' (which is listed in section 4.2 of RFC4517) in extensible match filters? Of course I've seen the two SHOULDs above - I just don't understand the openldap related technical/design decision regarding the missing support and would be very happy if someone could please explain this to me.

Another more common question but also related to my previous mail (below): could someone please also tell me the RFC(s) in which the evaluation of ordering matching rules (especially when used in extensible match filters) is specified?

Thanks again!



Betreff: 	Support for ordering matching rules in extensible match filters?
Datum: 	Thu, 22 Apr 2010 11:18:35 +0200
Von: 	Daniel <deepee@gmx.net>
An: 	openldap-technical@openldap.org



Hi,

why doesn't slapd support ordering matching rules in extensible match filters?

Does the small code enhancement for slapd's generalizedTimeOrderingMatch() would make sense into the direction to support ordering matching in extensible filters (in this particular case)?

Thanks a lot!




static int
generalizedTimeOrderingMatch(
  int *matchp,
  slap_mask_t flags,
  Syntax *syntax,
  MatchingRule *mr,
  struct berval *value,
  void *assertedValue )
{
  struct berval *asserted = (struct berval *) assertedValue;
  ber_len_t v_len  = value->bv_len;
  ber_len_t av_len = asserted->bv_len;

  /* ignore trailing 'Z' when comparing */
  int match = memcmp( value->bv_val, asserted->bv_val,
      (v_len < av_len ? v_len : av_len) - 1 );

  Debug( LDAP_DEBUG_TRACE, "gTOM1: %s %s %d\n",
      value->bv_val, asserted->bv_val, match);

  if ( flags & SLAP_MR_EXT ) {
      Debug( LDAP_DEBUG_TRACE,
          "gTOM: MR => SLAP_MR_EXT (%ld) [%d %d]\n", flags, 0, 0);
      if ( match == -1 ) match = 0;
      else if ( match == 0 ) match = 1;
  } else {
      Debug( LDAP_DEBUG_TRACE,
          "gTOM: MR => ? (%ld) [%d %d]\n", flags, 0, 0);
      if ( match == 0 ) match = v_len - av_len;
  }

  Debug( LDAP_DEBUG_TRACE, "gTOM2: %s %s %d\n",
      value->bv_val, asserted->bv_val, match);

  *matchp = match;
  return LDAP_SUCCESS;
}