]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10076 suffixmassage in back-asyncmeta does not handle empty remote suffix correctly
authorNadezhda Ivanova <nivanova@symas.com>
Fri, 30 Jun 2023 12:52:48 +0000 (15:52 +0300)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 9 Oct 2023 20:26:59 +0000 (20:26 +0000)
servers/slapd/back-asyncmeta/map.c

index b811708762f735f0f545a8bf1de3b202746cd832..66bb8b037b319364c0ec921db2db7812b036476f 100644 (file)
@@ -197,16 +197,26 @@ ignore:
        }
 
        /* DN longer than our suffix and doesn't match */
-       if ( diff > 0 && !DN_SEPARATOR(dn->bv_val[diff-1]))
+       if ( osuff->bv_len != 0 && diff > 0 && !DN_SEPARATOR(dn->bv_val[diff-1]) )
                goto ignore;
 
        /* suffix is same length as ours, but doesn't match */
        if ( strcasecmp( osuff->bv_val, &dn->bv_val[diff] ))
                goto ignore;
 
+       /* if remote suffix is empty, remove or add the dn separator*/
+       if ( nsuff->bv_len == 0 ) {
+               diff--;
+       } else if ( osuff->bv_len == 0 ) {
+               diff++;
+       }
+
+
        res->bv_len = diff + nsuff->bv_len;
        res->bv_val = dc->op->o_tmpalloc( res->bv_len + 1, dc->memctx );
        strncpy( res->bv_val, dn->bv_val, diff );
+       if ( osuff->bv_len == 0 )
+               res->bv_val[diff-1] = ',';
        strcpy( &res->bv_val[diff], nsuff->bv_val );
 
        if (pretty.bv_val)