From 528b6c7e25b85a8f302be2c5c62bf074f9128d8f Mon Sep 17 00:00:00 2001
From: Pierangelo Masarati <ando@openldap.org>
Date: Mon, 21 Jun 2004 21:31:55 +0000
Subject: [PATCH] clear pagedresults_state if reusing an inactive connection;
 prepare for more consistent behavior of pagedResults control

---
 servers/slapd/connection.c |  4 ++++
 servers/slapd/controls.c   | 10 ++++++++++
 2 files changed, 14 insertions(+)

diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c
index 228c2ee009..934e067f8d 100644
--- a/servers/slapd/connection.c
+++ b/servers/slapd/connection.c
@@ -1573,6 +1573,10 @@ connection_input(
 	op->o_preread_attrs = NULL;
 	op->o_postread_attrs = NULL;
 	op->o_vrFilter = NULL;
+	/* clear state if the connection is being reused from inactive */
+	if ( conn->c_conn_state == SLAP_C_INACTIVE ) {
+		memset( &conn->c_pagedresults_state, 0, sizeof( conn->c_pagedresults_state ) );
+	}
 	op->o_pagedresults_state = conn->c_pagedresults_state;
 
 	op->o_res_ber = NULL;
diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c
index 1e06552ccb..097bfd4964 100644
--- a/servers/slapd/controls.c
+++ b/servers/slapd/controls.c
@@ -917,6 +917,16 @@ static int parsePagedResults (
 
 	} else {
 		/* Initial request.  Initialize state. */
+#if 0
+		if ( op->o_conn->c_pagedresults_state.ps_cookie != 0 ) {
+			/* There's another pagedResults control on the
+			 * same connection; reject new pagedResults controls 
+			 * (allowed by RFC2696) */
+			rs->sr_text = "paged results cookie unavailable; try later";
+			rc = LDAP_UNWILLING_TO_PERFORM;
+			goto done;
+		}
+#endif
 		op->o_pagedresults_state.ps_cookie = 0;
 		op->o_pagedresults_state.ps_count = 0;
 	}
-- 
GitLab