h.b.furuseth@usit.uio.no wrote:
Full_Name: Hallvard B Furuseth Version: HEAD OS: Linux URL: Submission from: (NULL) (129.240.6.233) Submitted by: hallvard
RFC 3909 says both the Cancel operation and the canceled operation shall respond. However I'm getting tooLate reply from Cancel and no response from the successfully cancelled operation:
The tooLate reply is correct; back-null doesn't ever check for cancel/abandon therefore the operation is *not* successfully canceled. Likewise, back-bdb/hdb only checks in Delete if there is a transaction retry.
The lack of reply from the original op - that's a simple oversight. send_ldap_ber() checks for op->o_abandon and returns silently if it's set. I guess we need to also check for o_cancel to let it proceed.
slapd.conf: include servers/slapd/schema/core.schema database null suffix "cn=null" client: DEL cn=null sleep 0.1 sec CANCEL<previous op> sleep 0.2 sec UNBIND receives the folllowing statslog: conn=1 fd=9 ACCEPT from IP=127.0.0.1:48774 (IP=127.0.0.1:3890) conn=1 op=0 DEL dn="cn=null" conn=1 op=1 EXT oid=1.3.6.1.1.8 conn=1 op=1 CANCEL msg=1 conn=1 op=0 ABANDONED conn=1 op=1 RESULT oid= err=120 text= conn=1 op=2 UNBIND conn=1 fd=9 closed and the client gets just ExtendedResponse tooLate before connection closes
with the following patch to slapd:
Index: delete.c --- delete.c 21 Jan 2009 23:40:26 -0000 1.144 +++ delete.c 9 May 2009 22:06:07 -0000 @@ -75,4 +75,9 @@ op->o_log_prefix, op->o_req_dn.bv_val, 0, 0, 0 );
- {
struct timeval timeout = { 0, 200000 };
select(0, NULL, NULL, NULL,&timeout);
- }
- if( op->o_req_ndn.bv_len == 0 ) { Debug( LDAP_DEBUG_ANY, "%s do_delete: root dse!\n",
Index: result.c --- result.c 14 Mar 2009 05:47:43 -0000 1.329 +++ result.c 9 May 2009 22:06:07 -0000 @@ -418,4 +418,6 @@ if ( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) { rc = SLAPD_ABANDON;
Statslog( LDAP_DEBUG_STATS,
goto clean2; }"%s ABANDONED\n", op->o_log_prefix, 0, 0, 0, 0 );