From e233a8e9ee1bcc6b19dd5f2728de951486692614 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Mon, 20 Oct 2008 23:16:40 +0000 Subject: [PATCH] NO-OP must be critical and apply to selected operations (ITS#5758) --- servers/slapd/controls.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c index f2efdd1696..05aa30e284 100644 --- a/servers/slapd/controls.c +++ b/servers/slapd/controls.c @@ -1038,6 +1038,26 @@ static int parseNoOp ( return LDAP_PROTOCOL_ERROR; } + if ( !ctrl->ldctl_iscritical ) { + rs->sr_text = "noop control not critical"; + return LDAP_PROTOCOL_ERROR; + } + + switch ( op->o_tag ) { + case LDAP_REQ_ADD: + case LDAP_REQ_MODIFY: + case LDAP_REQ_RENAME: + case LDAP_REQ_DELETE: + /* NOTE: only selected extended operations should be eligible; + * checking is delegated to the appropriate handlers */ + case LDAP_REQ_EXTENDED: + break; + + default: + rs->sr_text = "noop control on non-allowed operation"; + return LDAP_PROTOCOL_ERROR; + } + op->o_noop = ctrl->ldctl_iscritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL; -- 2.39.5