~jscott/OpenLDAP

6cbcfa0af3160b7ed5b250929739f8db9ab18026 — Nadezhda Ivanova 9 months ago 4b7b217
ITS#10076 suffixmassage in back-asyncmeta does not handle empty remote suffix correctly
1 files changed, 11 insertions(+), 1 deletions(-)

M servers/slapd/back-asyncmeta/map.c
M servers/slapd/back-asyncmeta/map.c => servers/slapd/back-asyncmeta/map.c +11 -1
@@ 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)