static struct slap_control control_defs[] = {
{ LDAP_CONTROL_ASSERT,
- SLAP_CTRL_ACCESS, NULL,
+ SLAP_CTRL_HIDE|SLAP_CTRL_ACCESS, NULL,
parseAssert, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_PRE_READ,
- SLAP_CTRL_DELETE|SLAP_CTRL_MODIFY|SLAP_CTRL_RENAME, NULL,
+ SLAP_CTRL_HIDE|SLAP_CTRL_DELETE|SLAP_CTRL_MODIFY|SLAP_CTRL_RENAME, NULL,
parsePreRead, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_POST_READ,
- SLAP_CTRL_ADD|SLAP_CTRL_MODIFY|SLAP_CTRL_RENAME, NULL,
+ SLAP_CTRL_HIDE|SLAP_CTRL_ADD|SLAP_CTRL_MODIFY|SLAP_CTRL_RENAME, NULL,
parsePostRead, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_VALUESRETURNFILTER,
SLAP_CTRL_SEARCH, NULL,
SLAP_CTRL_HIDE|SLAP_CTRL_SEARCH, NULL,
parseLDAPsync, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_MODIFY_INCREMENT,
- SLAP_CTRL_MODIFY, NULL,
+ SLAP_CTRL_HIDE|SLAP_CTRL_MODIFY, NULL,
parseModifyIncrement, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_MANAGEDSAIT,
SLAP_CTRL_ACCESS, NULL,
}
siz = sizeof( AttributeName );
- off = 0;
+ off = offsetof( AttributeName, an_name );
if ( ber_scanf( ber, "{M}", &an, &siz, off ) == LBER_ERROR ) {
rs->sr_text = "preread control: decoding error";
return LDAP_PROTOCOL_ERROR;
}
siz = sizeof( AttributeName );
- off = 0;
+ off = offsetof( AttributeName, an_name );
if ( ber_scanf( ber, "{M}", &an, &siz, off ) == LBER_ERROR ) {
rs->sr_text = "postread control: decoding error";
return LDAP_PROTOCOL_ERROR;
BerElement *ber;
ber_int_t mode;
ber_len_t len;
- struct berval cookie = { 0, NULL };
+ struct slap_session_entry *se;
if ( op->o_sync != SLAP_NO_CONTROL ) {
rs->sr_text = "LDAP Sync control specified multiple times";
tag = ber_peek_tag( ber, &len );
- if ( tag == LDAP_SYNC_TAG_COOKIE ) {
- if (( ber_scanf( ber, /*{*/ "m}",
- &cookie )) == LBER_ERROR ) {
+ if ( tag == LDAP_TAG_SYNC_COOKIE ) {
+ struct berval tmp_bv;
+ if (( ber_scanf( ber, /*{*/ "o", &tmp_bv )) == LBER_ERROR ) {
rs->sr_text = "LDAP Sync control : cookie decoding error";
return LDAP_PROTOCOL_ERROR;
}
- } else {
- if (( ber_scanf( ber, /*{*/ "}")) == LBER_ERROR ) {
- rs->sr_text = "LDAP Sync control : decoding error";
+ ber_bvarray_add( &op->o_sync_state.octet_str, &tmp_bv );
+ slap_parse_sync_cookie( &op->o_sync_state );
+ }
+ if ( tag == LDAP_TAG_RELOAD_HINT ) {
+ if (( ber_scanf( ber, /*{*/ "b", &op->o_sync_rhint )) == LBER_ERROR ) {
+ rs->sr_text = "LDAP Sync control : rhint decoding error";
return LDAP_PROTOCOL_ERROR;
}
- cookie.bv_len = 0;
- cookie.bv_val = NULL;
}
-
- ber_dupbv( &op->o_sync_state, &cookie );
+ if (( ber_scanf( ber, /*{*/ "}")) == LBER_ERROR ) {
+ rs->sr_text = "LDAP Sync control : decoding error";
+ return LDAP_PROTOCOL_ERROR;
+ }
(void) ber_free( ber, 1 );