]> git.sur5r.net Git - openldap/commitdiff
ITS#5927
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 9 Feb 2009 17:01:20 +0000 (17:01 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 9 Feb 2009 17:01:20 +0000 (17:01 +0000)
CHANGES
servers/slapd/ad.c

diff --git a/CHANGES b/CHANGES
index 0a62820edf419248f20afbb416d00cc7f4758aea..3c662de1d8eced07df8ee134fb7261f4f7c91902 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -16,6 +16,7 @@ OpenLDAP 2.4.14 Engineering
        Added slapd val.regex expansion (ITS#5804)
        Added slapd TLS_PROTOCOL_MIN (ITS#5655)
        Added slapd slapi_pw_find (ITS#2615,ITS#4359)
+       Fixed slapd ad compatibility with ranged values (ITS#5927)
        Fixed slapd bconfig to return error codes (ITS#5867)
        Fixed slapd bconfig encoding incorrectly (ITS#5897)
        Fixed slapd bconfig dangling pointers (ITS#5924)
index 9a7cea8316c51b544b9174621514e999f868b6f8..e1dab72b3e9c67fb118c453743add7c11ba270b0 100644 (file)
@@ -64,6 +64,8 @@ static Attr_option lang_option = { BER_BVC("lang-"), 1 };
 static Attr_option *options = &lang_option;
 static int option_count = 1;
 
+static int msad_range_hack = 0;
+
 static Attr_option *ad_find_option_definition( const char *opt, int optlen );
 
 static int ad_keystring(
@@ -76,7 +78,9 @@ static int ad_keystring(
        }
 
        for( i=1; i<bv->bv_len; i++ ) {
-               if( !AD_CHAR( bv->bv_val[i] ) ) {
+               if( !AD_CHAR( bv->bv_val[i] )) {
+                       if ( msad_range_hack && bv->bv_val[i] == '=' )
+                               continue;
                        return 1;
                }
        }
@@ -234,7 +238,8 @@ int slap_bv2ad(
                } else if ( ad_find_option_definition( opt, optlen ) ) {
                        int i;
 
-                       if( opt[optlen-1] == '-' ) {
+                       if( opt[optlen-1] == '-' ||
+                               ( opt[optlen-1] == '=' && msad_range_hack )) {
                                desc.ad_flags |= SLAP_DESC_TAG_RANGE;
                        }
 
@@ -1178,6 +1183,11 @@ ad_define_option( const char *name, const char *fname, int lineno )
        optlen = 0;
        do {
                if ( !DESC_CHAR( name[optlen] ) ) {
+                       /* allow trailing '=', same as '-' */
+                       if ( name[optlen] == '=' && !name[optlen+1] ) {
+                               msad_range_hack = 1;
+                               continue;
+                       }
                        Debug( LDAP_DEBUG_ANY,
                               "%s: line %d: illegal option name \"%s\"\n",
                                    fname, lineno, name );
@@ -1204,7 +1214,8 @@ ad_define_option( const char *name, const char *fname, int lineno )
 
        options[i].name.bv_val = ch_strdup( name );
        options[i].name.bv_len = optlen;
-       options[i].prefix = (name[optlen-1] == '-');
+       options[i].prefix = (name[optlen-1] == '-') ||
+               (name[optlen-1] == '=');
 
        if ( i != option_count &&
             options[i].prefix &&