]> git.sur5r.net Git - openldap/commitdiff
ITS#8266 Allow empty mods
authorOndřej Kuzník <ondra@mistotebe.net>
Sun, 22 Nov 2015 18:36:45 +0000 (18:36 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 30 Mar 2017 22:27:45 +0000 (15:27 -0700)
servers/slapd/overlays/unique.c
tests/scripts/test024-unique

index 03832cd858fc764841e2cfa3cb399b4b5388bcf9..8a880f78d47ea75c47d4055433d2d93d1dce070c 100644 (file)
@@ -1170,6 +1170,11 @@ unique_modify(
        Debug(LDAP_DEBUG_TRACE, "==> unique_modify <%s>\n",
              op->o_req_dn.bv_val, 0, 0);
 
+       if ( !op->orm_modlist ) {
+               Debug(LDAP_DEBUG_TRACE, "unique_modify: got empty modify op\n", 0, 0, 0);
+               return rc;
+       }
+
        /* skip the checks if the operation has manageDsaIt control in it
         * (for replication) */
        if ( op->o_managedsait > SLAP_CONTROL_IGNORED
@@ -1203,22 +1208,14 @@ unique_modify(
                             && !dnIsSuffix( &op->o_req_ndn, &uri->ndn ))
                                continue;
 
-                       if ( !(m = op->orm_modlist) ) {
-                               op->o_bd->bd_info = (BackendInfo *) on->on_info;
-                               send_ldap_error(op, rs, LDAP_INVALID_SYNTAX,
-                                               "unique_modify() got null op.orm_modlist");
-                               rc = rs->sr_err;
-                               break;
-
-                       } else
-                               for ( ; m; m = m->sml_next)
-                                       if ( (m->sml_op & LDAP_MOD_OP)
-                                            != LDAP_MOD_DELETE )
-                                               ks += count_filter_len
-                                                       ( domain,
-                                                         uri,
-                                                         m->sml_desc,
-                                                         m->sml_values);
+                       for ( m = op->orm_modlist; m; m = m->sml_next)
+                               if ( (m->sml_op & LDAP_MOD_OP)
+                                    != LDAP_MOD_DELETE )
+                                       ks += count_filter_len
+                                               ( domain,
+                                                 uri,
+                                                 m->sml_desc,
+                                                 m->sml_values);
 
                        /* skip this domain-uri if it isn't involved */
                        if ( !ks ) continue;
index fe67d37ef6a71fb02884f35f4e380d0c8eb307b0..566475c46d735982daffc40e1aba19c005086e22 100755 (executable)
@@ -555,6 +555,21 @@ if test $RC != 0 ; then
        exit -1
 fi
 
+echo "Sending an empty modification"
+
+$LDAPMODIFY -D "$UNIQUEDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
+        $TESTOUT 2>&1 << EOF
+dn: uid=empty,ou=users,o=unique
+changetype: modify
+EOF
+
+RC=$?
+if test $RC != 0 ; then
+       echo "spurious unique error ($RC)!"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit -1
+fi
+
 echo "Making a record non-unique"
 $LDAPMODIFY -D "uid=dave,ou=users,o=unique" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
     $TESTOUT 2>&1 << EOF