]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9758 Make sure we don't end up with duplicates in entry
authorOndřej Kuzník <ondra@mistotebe.net>
Mon, 6 Dec 2021 15:58:54 +0000 (15:58 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 10 Dec 2021 19:13:40 +0000 (19:13 +0000)
servers/slapd/back-sock/config.c

index 50ed5d6b00c734697c3cf60253ab1fd620cadd9f..4ae1bdf47fd1df1eef6fec646306da0b754c0d96 100644 (file)
@@ -214,6 +214,10 @@ bs_cf_gen( ConfigArgs *c )
                        if ( verbs_to_mask( c->argc, c->argv, bs_exts, &adds ) ) {
                                return LDAP_INVALID_SYNTAX;
                        }
+                       /* Tolerate overlaps in slapd.conf */
+                       if ( c->op != SLAP_CONFIG_ADD && adds & si->si_extensions ) {
+                               return LDAP_TYPE_OR_VALUE_EXISTS;
+                       }
                        si->si_extensions |= adds;
                        return 0;
                }
@@ -222,6 +226,10 @@ bs_cf_gen( ConfigArgs *c )
                        if ( verbs_to_mask( c->argc, c->argv, ov_ops, &adds ) ) {
                                return LDAP_INVALID_SYNTAX;
                        }
+                       /* Tolerate overlaps in slapd.conf */
+                       if ( c->op != SLAP_CONFIG_ADD && adds & si->si_ops ) {
+                               return LDAP_TYPE_OR_VALUE_EXISTS;
+                       }
                        si->si_ops |= adds;
                        return 0;
                }
@@ -230,6 +238,10 @@ bs_cf_gen( ConfigArgs *c )
                        if ( verbs_to_mask( c->argc, c->argv, ov_resps, &adds ) ) {
                                return LDAP_INVALID_SYNTAX;
                        }
+                       /* Tolerate overlaps in slapd.conf */
+                       if ( c->op != SLAP_CONFIG_ADD && adds & si->si_resps ) {
+                               return LDAP_TYPE_OR_VALUE_EXISTS;
+                       }
                        si->si_resps |= adds;
                        return 0;
                }