From f30269f5d2e4bb5ee7486fe6542078d1b59dba6d Mon Sep 17 00:00:00 2001 From: Rein Tollevik Date: Sun, 15 Mar 2009 23:05:08 +0000 Subject: [PATCH] ITS#6024 Don't send cookies without csn. --- servers/slapd/overlays/syncprov.c | 37 ++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index f1af8c9e58..d4bbeaab4f 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -775,7 +775,7 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, SlapReply rs = { REP_SEARCH }; LDAPControl *ctrls[2]; - struct berval cookie, csns[2]; + struct berval cookie = BER_BVNULL, csns[2]; Entry e_uuid = {0}; Attribute a_uuid = {0}; @@ -783,18 +783,22 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, return SLAPD_ABANDON; ctrls[1] = NULL; - csns[0] = opc->sctxcsn; - BER_BVZERO( &csns[1] ); - slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, slap_serverID ? slap_serverID : -1 ); + if ( !BER_BVISNULL( &opc->sctxcsn )) { + csns[0] = opc->sctxcsn; + BER_BVZERO( &csns[1] ); + slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, slap_serverID ? slap_serverID : -1 ); + } #ifdef LDAP_DEBUG - if ( so->s_sid > 0 ) { - Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: to=%03x, cookie=%s\n", - so->s_sid, cookie.bv_val, 0 ); - } else { - Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n", - cookie.bv_val, 0, 0 ); - } + if ( !BER_BVISNULL( &cookie )) { + if ( so->s_sid > 0 ) { + Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: to=%03x, cookie=%s\n", + so->s_sid, cookie.bv_val , 0 ); + } else { + Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n", + cookie.bv_val, 0, 0 ); + } + } #endif e_uuid.e_attrs = &a_uuid; @@ -802,7 +806,9 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, a_uuid.a_nvals = &opc->suuid; rs.sr_err = syncprov_state_ctrl( op, &rs, &e_uuid, mode, ctrls, 0, 1, &cookie ); - op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx ); + if ( !BER_BVISNULL( &cookie )) { + op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx ); + } rs.sr_ctrls = ctrls; op->o_bd->bd_info = (BackendInfo *)on->on_info; @@ -2203,9 +2209,10 @@ syncprov_search_response( Operation *op, SlapReply *rs ) LDAP_SYNC_ADD, rs->sr_ctrls, 0, 0, NULL ); } } else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) { - struct berval cookie; + struct berval cookie = BER_BVNULL; - if ( ss->ss_flags & SS_CHANGED ) { + if ( ( ss->ss_flags & SS_CHANGED ) && + ss->ss_ctxcsn && !BER_BVISNULL( &ss->ss_ctxcsn[0] )) { slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn, srs->sr_state.rid, slap_serverID ? slap_serverID : -1 ); @@ -2229,7 +2236,7 @@ syncprov_search_response( Operation *op, SlapReply *rs ) LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE, ( ss->ss_flags & SS_CHANGED ) ? &cookie : NULL, 1, NULL, 0 ); - if ( ss->ss_flags & SS_CHANGED ) + if ( !BER_BVISNULL( &cookie )) op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx ); /* Detach this Op from frontend control */ -- 2.39.5