From: Ondřej Kuzník Date: Mon, 6 Dec 2021 15:58:10 +0000 (+0000) Subject: ITS#9758 Fix slapd-sock value add/delete X-Git-Tag: OPENLDAP_REL_ENG_2_6_1~53 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=961b3f2d99a100180acb60b9fd47d22bbece8246;p=thirdparty%2Fopenldap.git ITS#9758 Fix slapd-sock value add/delete --- diff --git a/servers/slapd/back-sock/config.c b/servers/slapd/back-sock/config.c index 15caaddc9a..50ed5d6b00 100644 --- a/servers/slapd/back-sock/config.c +++ b/servers/slapd/back-sock/config.c @@ -160,6 +160,8 @@ bs_cf_gen( ConfigArgs *c ) case BS_RESP: return mask_to_verbs( ov_resps, si->si_resps, &c->rvalue_vals ); case BS_DNPAT: + if ( BER_BVISEMPTY( &si->si_dnpatstr ) ) + return 1; value_add_one( &c->rvalue_vals, &si->si_dnpatstr ); return 0; } @@ -171,9 +173,9 @@ bs_cf_gen( ConfigArgs *c ) rc = 0; } else { slap_mask_t dels = 0; - rc = verbs_to_mask( c->argc, c->argv, bs_exts, &dels ); + rc = verbstring_to_mask( bs_exts, c->line, ' ', &dels ); if ( rc == 0 ) - si->si_extensions ^= dels; + si->si_extensions &= ~dels; } return rc; case BS_OPS: @@ -182,9 +184,9 @@ bs_cf_gen( ConfigArgs *c ) rc = 0; } else { slap_mask_t dels = 0; - rc = verbs_to_mask( c->argc, c->argv, ov_ops, &dels ); + rc = verbstring_to_mask( ov_ops, c->line, ' ', &dels ); if ( rc == 0 ) - si->si_ops ^= dels; + si->si_ops &= ~dels; } return rc; case BS_RESP: @@ -193,9 +195,9 @@ bs_cf_gen( ConfigArgs *c ) rc = 0; } else { slap_mask_t dels = 0; - rc = verbs_to_mask( c->argc, c->argv, ov_resps, &dels ); + rc = verbstring_to_mask( ov_resps, c->line, ' ', &dels ); if ( rc == 0 ) - si->si_resps ^= dels; + si->si_resps &= ~dels; } return rc; case BS_DNPAT: @@ -207,12 +209,30 @@ bs_cf_gen( ConfigArgs *c ) } else { switch( c->type ) { - case BS_EXT: - return verbs_to_mask( c->argc, c->argv, bs_exts, &si->si_extensions ); - case BS_OPS: - return verbs_to_mask( c->argc, c->argv, ov_ops, &si->si_ops ); - case BS_RESP: - return verbs_to_mask( c->argc, c->argv, ov_resps, &si->si_resps ); + case BS_EXT: { + slap_mask_t adds = 0; + if ( verbs_to_mask( c->argc, c->argv, bs_exts, &adds ) ) { + return LDAP_INVALID_SYNTAX; + } + si->si_extensions |= adds; + return 0; + } + case BS_OPS: { + slap_mask_t adds = 0; + if ( verbs_to_mask( c->argc, c->argv, ov_ops, &adds ) ) { + return LDAP_INVALID_SYNTAX; + } + si->si_ops |= adds; + return 0; + } + case BS_RESP: { + slap_mask_t adds = 0; + if ( verbs_to_mask( c->argc, c->argv, ov_resps, &adds ) ) { + return LDAP_INVALID_SYNTAX; + } + si->si_resps |= adds; + return 0; + } case BS_DNPAT: if ( !regcomp( &si->si_dnpat, c->argv[1], REG_EXTENDED|REG_ICASE|REG_NOSUB )) { ber_str2bv( c->argv[1], 0, 1, &si->si_dnpatstr );