From ba33a35baffe60092877123ef53fce1186c6f98f Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 18 May 2009 19:51:55 +0000
Subject: [PATCH] ITS#6109

---
 CHANGES                 | 1 +
 servers/slapd/backend.c | 3 ++-
 servers/slapd/bconfig.c | 7 +++----
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/CHANGES b/CHANGES
index a9819d7f9a..4bf93961a9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -13,6 +13,7 @@ OpenLDAP 2.4.17 Engineering
 	Fixed slapd moduleload with static backends and modules (ITS#6016)
 	Fixed slapd normalization of updated schema attributes (ITS#5540)
 	Fixed slapd pagedresults stacked control with overlays (ITS#6056)
+	Fixed slapd readonly restrictions (ITS#6109)
 	Fixed slapd sending cancelled operations results (ITS#6103)
 	Fixed slapd sockets usage on windows (ITS#6039)
 	Fixed slapd-hdb freeing of already freed entries (ITS#6074)
diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c
index 7e0dbce7d9..ac9dda235f 100644
--- a/servers/slapd/backend.c
+++ b/servers/slapd/backend.c
@@ -1296,7 +1296,8 @@ backend_check_restrictions(
 	}
 
 	if( ( restrictops & opflag )
-			|| ( exopflag && ( restrictops & exopflag ) ) ) {
+			|| ( exopflag && ( restrictops & exopflag ) )
+			|| (( restrictops & SLAP_RESTRICT_READONLY ) && updateop )) {
 		if( ( restrictops & SLAP_RESTRICT_OP_MASK) == SLAP_RESTRICT_OP_READS ) {
 			rs->sr_text = "read operations restricted";
 		} else if ( restrictops & exopflag ) {
diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index cd7f43ab89..569046000d 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -893,8 +893,7 @@ config_generic(ConfigArgs *c) {
 			if ( !c->rvalue_vals ) rc = 1;
 			break;
 		case CFG_RO:
-			c->value_int = (c->be->be_restrictops & SLAP_RESTRICT_OP_WRITES) ==
-				SLAP_RESTRICT_OP_WRITES;
+			c->value_int = (c->be->be_restrictops & SLAP_RESTRICT_READONLY);
 			break;
 		case CFG_AZPOLICY:
 			c->value_string = ch_strdup( slap_sasl_getpolicy());
@@ -1466,9 +1465,9 @@ config_generic(ConfigArgs *c) {
 
 		case CFG_RO:
 			if(c->value_int)
-				c->be->be_restrictops |= SLAP_RESTRICT_OP_WRITES;
+				c->be->be_restrictops |= SLAP_RESTRICT_READONLY;
 			else
-				c->be->be_restrictops &= ~SLAP_RESTRICT_OP_WRITES;
+				c->be->be_restrictops &= ~SLAP_RESTRICT_READONLY;
 			break;
 
 		case CFG_AZPOLICY:
-- 
GitLab