--- servers/slapd/overlays/syncprov.c 2005/11/14 18:06:14 1.56.2.21 +++ servers/slapd/overlays/syncprov.c 2005/10/06 16:45:53 1.115 @@ -1,4 +1,4 @@ -/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.124 2005/11/07 23:40:20 ando Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.114 2005/10/04 00:29:25 hyc Exp $ */ /* syncprov.c - syncrepl provider */ /* This work is part of OpenLDAP Software . * @@ -122,7 +122,6 @@ typedef struct syncprov_info_t { int si_chktime; int si_numops; /* number of ops since last checkpoint */ int si_nopres; /* Skip present phase */ - int si_usehint; /* use reload hint */ time_t si_chklast; /* time of last checkpoint */ Avlnode *si_mods; /* entries being modified */ sessionlog *si_logs; @@ -383,9 +382,6 @@ findbase_cb( Operation *op, SlapReply *r return LDAP_SUCCESS; } -static Filter generic_filter = { LDAP_FILTER_PRESENT, { 0 }, NULL }; -static struct berval generic_filterstr = BER_BVC("(objectclass=*)"); - static int syncprov_findbase( Operation *op, fbase_cookie *fc ) { @@ -425,8 +421,6 @@ syncprov_findbase( Operation *op, fbase_ fop.ors_tlimit = SLAP_NO_LIMIT; fop.ors_attrs = slap_anlist_no_attrs; fop.ors_attrsonly = 1; - fop.ors_filter = &generic_filter; - fop.ors_filterstr = generic_filterstr; fop.o_bd->bd_info = on->on_info->oi_orig; rc = fop.o_bd->be_search( &fop, &frs ); @@ -483,11 +477,9 @@ syncprov_findbase( Operation *op, fbase_ * CSN, and generate Present records for them. We always collect this result * in SyncID sets, even if there's only one match. */ -typedef enum find_csn_t { - FIND_MAXCSN = 1, - FIND_CSN = 2, - FIND_PRESENT = 3 -} find_csn_t; +#define FIND_MAXCSN 1 +#define FIND_CSN 2 +#define FIND_PRESENT 3 static int findmax_cb( Operation *op, SlapReply *rs ) @@ -566,7 +558,7 @@ findpres_cb( Operation *op, SlapReply *r } static int -syncprov_findcsn( Operation *op, find_csn_t mode ) +syncprov_findcsn( Operation *op, int mode ) { slap_overinst *on = (slap_overinst *)op->o_bd->bd_info; syncprov_info_t *si = on->on_bi.bi_private; @@ -736,8 +728,7 @@ syncprov_free_syncop( syncops *so ) /* Send a persistent search response */ static int -syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, - Entry **e, int mode ) +syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, Entry **e, int mode) { slap_overinst *on = opc->son; @@ -870,11 +861,11 @@ syncprov_qtask( void *ctx, void *arg ) struct re_s *rtask = arg; syncops *so = rtask->arg; slap_overinst *on = so->s_op->o_private; - OperationBuffer opbuf; + char opbuf[OPERATION_BUFFER_SIZE]; Operation *op; BackendDB be; - op = (Operation *) &opbuf; + op = (Operation *)opbuf; *op = *so->s_op; op->o_hdr = (Opheader *)(op+1); op->o_controls = (void **)(op->o_hdr+1); @@ -920,14 +911,13 @@ syncprov_qresp( opcookie *opc, syncops * sr->s_dn.bv_len = opc->sdn.bv_len; sr->s_mode = mode; sr->s_isreference = opc->sreference; - sr->s_ndn.bv_val = lutil_strcopy( sr->s_dn.bv_val, - opc->sdn.bv_val ) + 1; + sr->s_ndn.bv_val = lutil_strcopy( sr->s_dn.bv_val, opc->sdn.bv_val ); sr->s_ndn.bv_len = opc->sndn.bv_len; - sr->s_uuid.bv_val = lutil_strcopy( sr->s_ndn.bv_val, - opc->sndn.bv_val ) + 1; + *(sr->s_ndn.bv_val++) = '\0'; + sr->s_uuid.bv_val = lutil_strcopy( sr->s_ndn.bv_val, opc->sndn.bv_val ); sr->s_uuid.bv_len = opc->suuid.bv_len; - AC_MEMCPY( sr->s_uuid.bv_val, opc->suuid.bv_val, opc->suuid.bv_len ); - sr->s_csn.bv_val = sr->s_uuid.bv_val + sr->s_uuid.bv_len + 1; + *(sr->s_uuid.bv_val++) = '\0'; + sr->s_csn.bv_val = lutil_strcopy( sr->s_uuid.bv_val, opc->suuid.bv_val ); sr->s_csn.bv_len = opc->sctxcsn.bv_len; strcpy( sr->s_csn.bv_val, opc->sctxcsn.bv_val ); @@ -1224,6 +1214,7 @@ syncprov_checkpoint( Operation *op, Slap Operation opm; struct berval bv[2]; slap_callback cb = {0}; + int manage = get_manageDSAit(op); mod.sml_values = bv; bv[1].bv_val = NULL; @@ -1244,9 +1235,7 @@ syncprov_checkpoint( Operation *op, Slap opm.o_bd->bd_info = on->on_info->oi_orig; opm.o_managedsait = SLAP_CONTROL_NONCRITICAL; opm.o_bd->be_modify( &opm, rs ); - if ( mod.sml_next != NULL ) { - slap_mods_free( mod.sml_next, 1 ); - } + opm.o_managedsait = manage; } static void @@ -1953,11 +1942,12 @@ syncprov_op_search( Operation *op, SlapR /* Is the CSN still present in the database? */ if ( syncprov_findcsn( op, FIND_CSN ) != LDAP_SUCCESS ) { /* No, so a reload is required */ - /* the 2.2 consumer doesn't send this hint */ - if ( si->si_usehint && srs->sr_rhint == 0 ) { +#if 0 /* the consumer doesn't seem to send this hint */ + if ( op->o_sync_rhint == 0 ) { send_ldap_error( op, rs, LDAP_SYNC_REFRESH_REQUIRED, "sync cookie is stale" ); return rs->sr_err; } +#endif } else { gotstate = 1; /* If changed and doing Present lookup, send Present UUIDs */ @@ -2078,8 +2068,7 @@ syncprov_operational( enum { SP_CHKPT = 1, SP_SESSL, - SP_NOPRES, - SP_USEHINT + SP_NOPRES }; static ConfigDriver sp_cf_gen; @@ -2097,10 +2086,6 @@ static ConfigTable spcfg[] = { sp_cf_gen, "( OLcfgOvAt:1.3 NAME 'olcSpNoPresent' " "DESC 'Omit Present phase processing' " "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL }, - { "syncprov-reloadhint", NULL, 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|SP_USEHINT, - sp_cf_gen, "( OLcfgOvAt:1.4 NAME 'olcSpReloadHint' " - "DESC 'Observe Reload Hint in Request control' " - "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL }, { NULL, NULL, 0, 0, 0, ARG_IGNORED } }; @@ -2148,13 +2133,6 @@ sp_cf_gen(ConfigArgs *c) rc = 1; } break; - case SP_USEHINT: - if ( si->si_usehint ) { - c->value_int = 1; - } else { - rc = 1; - } - break; } return rc; } else if ( c->op == LDAP_MOD_DELETE ) { @@ -2175,12 +2153,6 @@ sp_cf_gen(ConfigArgs *c) else rc = LDAP_NO_SUCH_ATTRIBUTE; break; - case SP_USEHINT: - if ( si->si_usehint ) - si->si_usehint = 0; - else - rc = LDAP_NO_SUCH_ATTRIBUTE; - break; } return rc; } @@ -2215,9 +2187,6 @@ sp_cf_gen(ConfigArgs *c) case SP_NOPRES: si->si_nopres = c->value_int; break; - case SP_USEHINT: - si->si_usehint = c->value_int; - break; } return rc; } @@ -2247,9 +2216,9 @@ syncprov_db_open( syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private; Connection conn; - OperationBuffer opbuf; + char opbuf[OPERATION_BUFFER_SIZE]; char ctxcsnbuf[LDAP_LUTIL_CSNSTR_BUFSIZE]; - Operation *op = (Operation *) &opbuf; + Operation *op = (Operation *)opbuf; Entry *e; Attribute *a; int rc; @@ -2305,8 +2274,8 @@ syncprov_db_open( } if ( BER_BVISEMPTY( &si->si_ctxcsn ) ) { - si->si_ctxcsn.bv_len = sizeof( si->si_ctxcsnbuf ); - slap_get_csn( op, &si->si_ctxcsn, 0 ); + slap_get_csn( op, si->si_ctxcsnbuf, sizeof(si->si_ctxcsnbuf), + &si->si_ctxcsn, 0 ); } /* If our ctxcsn is different from what was read from the root @@ -2337,8 +2306,8 @@ syncprov_db_close( } if ( si->si_numops ) { Connection conn; - OperationBuffer opbuf; - Operation *op = (Operation *) &opbuf; + char opbuf[OPERATION_BUFFER_SIZE]; + Operation *op = (Operation *)opbuf; SlapReply rs = {REP_RESULT}; void *thrctx; @@ -2465,7 +2434,6 @@ static int syncprov_parseCtrl ( rs->sr_text = "Sync control : cookie decoding error"; return LDAP_PROTOCOL_ERROR; } - tag = ber_peek_tag( ber, &len ); } if ( tag == LDAP_TAG_RELOAD_HINT ) { if (( ber_scanf( ber, /*{*/ "b", &rhint )) == LBER_ERROR ) { @@ -2540,8 +2508,6 @@ syncprov_init() syncprov.on_bi.bi_cf_ocs = spocs; - generic_filter.f_desc = slap_schema.si_ad_objectClass; - rc = config_register_schema( spcfg, spocs ); if ( rc ) return rc;