[openldap] update fix: count constraint broken when using multiple modifications

jvcelak jvcelak at fedoraproject.org
Wed Jun 27 11:27:01 UTC 2012


commit 5172ff7830aa994e8e7b789508018fc37a6b1792
Author: Jan Vcelak <jvcelak at redhat.com>
Date:   Wed Jun 27 13:26:24 2012 +0200

    update fix: count constraint broken when using multiple modifications
    
    Resolves: #795766

 openldap-constraint-count.patch |   31 ++++++++++++++++++++++---------
 openldap.spec                   |    5 ++++-
 2 files changed, 26 insertions(+), 10 deletions(-)
---
diff --git a/openldap-constraint-count.patch b/openldap-constraint-count.patch
index 1a7677a..8329c00 100644
--- a/openldap-constraint-count.patch
+++ b/openldap-constraint-count.patch
@@ -28,13 +28,18 @@ This patch fixes the behavior in case multiple modifications are used.
 
 Author: Jan Synacek <jsynacek at redhat.com>
 Upstream ITS: #7168
+Upstream commit: bb8112c382c24db25b175459e340ce248fe25563
 Resolves: #742163
 
+---
+ servers/slapd/overlays/constraint.c |  117 ++++++++++++++++++++++++-----------
+ 1 file changed, 80 insertions(+), 37 deletions(-)
+
 diff --git a/servers/slapd/overlays/constraint.c b/servers/slapd/overlays/constraint.c
-index e6a9267..2988af6 100644
+index e6a9267..538d383 100644
 --- a/servers/slapd/overlays/constraint.c
 +++ b/servers/slapd/overlays/constraint.c
-@@ -838,6 +838,60 @@ add_violation:
+@@ -838,6 +838,68 @@ add_violation:
  
  
  static int
@@ -56,7 +61,15 @@ index e6a9267..2988af6 100644
 +			if ( cp->ap[j] == m->sml_desc ) {
 +				switch ( m->sml_op ) {
 +				case LDAP_MOD_DELETE:
-+					ce = 0;
++					if (( b = m->sml_values ) == NULL  || b[0].bv_val == NULL ) {
++						ce = 0;
++					}
++					else {
++						/* No need to check for values' validity. Invalid values
++						 * cause the whole transaction to die anyway. */
++						for ( ca = 0; b[ca].bv_val; ++ca );
++						ce -= ca;
++					}
 +					break;
 +
 +				case LDAP_MOD_ADD:
@@ -95,7 +108,7 @@ index e6a9267..2988af6 100644
  constraint_update( Operation *op, SlapReply *rs )
  {
  	slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
-@@ -850,6 +904,8 @@ constraint_update( Operation *op, SlapReply *rs )
+@@ -850,6 +912,8 @@ constraint_update( Operation *op, SlapReply *rs )
  	struct berval rsv = BER_BVC("modify breaks constraint");
  	int rc;
  	char *msg = NULL;
@@ -104,7 +117,7 @@ index e6a9267..2988af6 100644
  
  	if (get_relax(op)) {
  		return SLAP_CB_CONTINUE;
-@@ -880,10 +936,12 @@ constraint_update( Operation *op, SlapReply *rs )
+@@ -880,10 +944,12 @@ constraint_update( Operation *op, SlapReply *rs )
  	/* Do we need to count attributes? */
  	for(cp = c; cp; cp = cp->ap_next) {
  		if (cp->count != 0 || cp->set || cp->restrict_lud != 0) {
@@ -121,7 +134,7 @@ index e6a9267..2988af6 100644
  			if (rc != 0 || target_entry == NULL) {
  				Debug(LDAP_DEBUG_TRACE, 
  					"==> constraint_update rc = %d DN=\"%s\"%s\n",
-@@ -893,7 +951,16 @@ constraint_update( Operation *op, SlapReply *rs )
+@@ -893,7 +959,16 @@ constraint_update( Operation *op, SlapReply *rs )
  					rc = LDAP_CONSTRAINT_VIOLATION;
  				goto mod_violation;
  			}
@@ -139,7 +152,7 @@ index e6a9267..2988af6 100644
  		}
  	}
  
-@@ -912,10 +979,6 @@ constraint_update( Operation *op, SlapReply *rs )
+@@ -912,10 +987,6 @@ constraint_update( Operation *op, SlapReply *rs )
  		if ((( b = m->sml_values ) == NULL ) || (b[0].bv_val == NULL))
  			continue;
  
@@ -150,7 +163,7 @@ index e6a9267..2988af6 100644
  		for(cp = c; cp; cp = cp->ap_next) {
  			int j;
  			for (j = 0; cp->ap[j]; j++) {
-@@ -929,34 +992,6 @@ constraint_update( Operation *op, SlapReply *rs )
+@@ -929,34 +1000,6 @@ constraint_update( Operation *op, SlapReply *rs )
  				continue;
  			}
  
@@ -186,5 +199,5 @@ index e6a9267..2988af6 100644
  			if (( m->sml_op & LDAP_MOD_OP ) == LDAP_MOD_DELETE)
  				continue;
 -- 
-1.7.7.6
+1.7.10.4
 
diff --git a/openldap.spec b/openldap.spec
index 230efff..3c8dbbc 100644
--- a/openldap.spec
+++ b/openldap.spec
@@ -8,7 +8,7 @@
 
 Name: openldap
 Version: 2.4.31
-Release: 2%{?dist}
+Release: 3%{?dist}
 Summary: LDAP support libraries
 Group: System Environment/Daemons
 License: OpenLDAP
@@ -658,6 +658,9 @@ exit 0
 %{evolution_connector_prefix}/
 
 %changelog
+* Wed Jun 27 2012 Jan Vcelak <jvcelak at redhat.com> 2.4.31-3
+- update fix: count constraint broken when using multiple modifications (#795766)
+
 * Fri May 18 2012 Jan Vcelak <jvcelak at redhat.com> 2.4.31-2
 - fix: nss-tools package is required by the base package, not the server subpackage
 - fix: MozNSS CA certdir does not work together with PEM CA cert file (#819536)


More information about the scm-commits mailing list