diff --git a/CHANGES b/CHANGES
index 1a7f00a1f21eccbe13e8a93d63b31228d6fd3470..4b86a70969b259f965e0d77f51d3b6459f327ca2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.12 Engineering
+	Fixed slapo-constraint string termination (ITS#5609)
 
 OpenLDAP 2.4.11 Release (2008/07/16)
 	Fixed liblber ber_get_next length decoding (ITS#5580)
diff --git a/doc/man/man5/slapo-constraint.5 b/doc/man/man5/slapo-constraint.5
index 1a60c0e2449ade893cc71168d603a2a78640040f..2c6a0592154259b9a86175962f230c06ddae68bb 100644
--- a/doc/man/man5/slapo-constraint.5
+++ b/doc/man/man5/slapo-constraint.5
@@ -72,8 +72,7 @@ constraint_attribute title uri
 A specification like the above would reject any
 .B mail
 attribute which did not look like
-.B
-<alpha-numeric string>@mydomain.com
+.BR "<alpha-numeric string>@mydomain.com" .
 It would also reject any
 .B title
 attribute whose values were not listed in the
diff --git a/servers/slapd/overlays/constraint.c b/servers/slapd/overlays/constraint.c
index bb4d9504b121764d2bef8081d15f71c9e095f1b1..09fae8e0201e3fdac5b69a75b78692a01497ad2e 100644
--- a/servers/slapd/overlays/constraint.c
+++ b/servers/slapd/overlays/constraint.c
@@ -282,8 +282,16 @@ constraint_cf_gen( ConfigArgs *c )
 				if (ap.lud->lud_dn == NULL)
 					ap.lud->lud_dn = ch_strdup("");
 
-				if (ap.lud->lud_filter == NULL)
+				if (ap.lud->lud_filter == NULL) {
 					ap.lud->lud_filter = ch_strdup("objectClass=*");
+				} else if ( ap.lud->lud_filter[0] == '(' ) {
+					ber_len_t len = strlen( ap.lud->lud_filter );
+					if ( ap.lud->lud_filter[len - 1] != ')' ) {
+							return( ARG_BAD_CONF );
+					}
+					AC_MEMCPY( &ap.lud->lud_filter[0], &ap.lud->lud_filter[1], len - 2 );
+					ap.lud->lud_filter[len - 2] = '\0';
+				}
 
 				ber_str2bv( c->argv[3], 0, 1, &ap.val );
 			} else {
@@ -427,6 +435,7 @@ constraint_violation( constraint *c, struct berval *bv, Operation *op, SlapReply
 		}
 		*ptr++ = ')';
 		*ptr++ = ')';
+		*ptr++ = '\0';
 
 		Debug(LDAP_DEBUG_TRACE, 
 			"==> constraint_violation uri filter = %s\n",