mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-24 13:24:56 +08:00
ITS#8037 - Add support for relax control to delta-syncrepl
This commit is contained in:
parent
44e9bda0e4
commit
cb9a4d01bc
@ -175,6 +175,7 @@ typedef struct logschema {
|
||||
struct berval ls_newRdn;
|
||||
struct berval ls_delRdn;
|
||||
struct berval ls_newSup;
|
||||
struct berval ls_controls;
|
||||
} logschema;
|
||||
|
||||
static logschema changelog_sc = {
|
||||
@ -183,7 +184,8 @@ static logschema changelog_sc = {
|
||||
BER_BVC("changes"),
|
||||
BER_BVC("newRDN"),
|
||||
BER_BVC("deleteOldRDN"),
|
||||
BER_BVC("newSuperior")
|
||||
BER_BVC("newSuperior"),
|
||||
BER_BVC("controls")
|
||||
};
|
||||
|
||||
static logschema accesslog_sc = {
|
||||
@ -192,7 +194,8 @@ static logschema accesslog_sc = {
|
||||
BER_BVC("reqMod"),
|
||||
BER_BVC("reqNewRDN"),
|
||||
BER_BVC("reqDeleteOldRDN"),
|
||||
BER_BVC("reqNewSuperior")
|
||||
BER_BVC("reqNewSuperior"),
|
||||
BER_BVC("reqControls")
|
||||
};
|
||||
|
||||
static const char *
|
||||
@ -408,7 +411,7 @@ ldap_sync_search(
|
||||
int rc;
|
||||
int rhint;
|
||||
char *base;
|
||||
char **attrs, *lattrs[8];
|
||||
char **attrs, *lattrs[9];
|
||||
char *filter;
|
||||
int attrsonly;
|
||||
int scope;
|
||||
@ -437,8 +440,9 @@ ldap_sync_search(
|
||||
lattrs[3] = ls->ls_newRdn.bv_val;
|
||||
lattrs[4] = ls->ls_delRdn.bv_val;
|
||||
lattrs[5] = ls->ls_newSup.bv_val;
|
||||
lattrs[6] = slap_schema.si_ad_entryCSN->ad_cname.bv_val;
|
||||
lattrs[7] = NULL;
|
||||
lattrs[6] = ls->ls_controls.bv_val;
|
||||
lattrs[7] = slap_schema.si_ad_entryCSN->ad_cname.bv_val;
|
||||
lattrs[8] = NULL;
|
||||
|
||||
rhint = 0;
|
||||
base = si->si_logbase.bv_val;
|
||||
@ -2409,6 +2413,22 @@ syncrepl_message_to_op(
|
||||
}
|
||||
} else if ( !ber_bvstrcasecmp( &bv, &ls->ls_newSup ) ) {
|
||||
sup = bvals[0];
|
||||
} else if ( !ber_bvstrcasecmp( &bv, &ls->ls_controls ) ) {
|
||||
int i;
|
||||
struct berval rel_ctrl_bv;
|
||||
|
||||
(void)ber_str2bv( "{" LDAP_CONTROL_RELAX, 0, 0, &rel_ctrl_bv );
|
||||
for ( i = 0; bvals[i].bv_val; i++ ) {
|
||||
struct berval cbv, tmp;
|
||||
|
||||
ber_bvchr_post( &cbv, &bvals[i], '}' );
|
||||
ber_bvchr_post( &tmp, &cbv, '{' );
|
||||
ber_bvchr_pre( &cbv, &tmp, ' ' );
|
||||
if ( cbv.bv_len == tmp.bv_len ) /* control w/o value */
|
||||
ber_bvchr_pre( &cbv, &tmp, '}' );
|
||||
if ( !ber_bvcmp( &cbv, &rel_ctrl_bv ) )
|
||||
op->o_relax = SLAP_CONTROL_CRITICAL;
|
||||
}
|
||||
} else if ( !ber_bvstrcasecmp( &bv,
|
||||
&slap_schema.si_ad_entryCSN->ad_cname ) )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user