Skip to content
Snippets Groups Projects
Commit 7221e9b1 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#6700

parent 509f3847
No related branches found
No related tags found
No related merge requests found
......@@ -70,6 +70,7 @@ OpenLDAP 2.4.24 Engineering
Fixed slapo-dynlist entry handling (ITS#6752)
Fixed slapo-memberof log messages (ITS#6748)
Fixed slapo-memberof with an empty groupOfNames (ITS#6670)
Fixed slapo-memberof with modrdn operations (ITS#6700)
Fixed slapo-pcache callback freeing (ITS#6640)
Fixed slapo-pcache to ignore undefined attrs (ITS#6600)
Fixed slapo-ppolicy don't update opattrs on consumers (ITS#6608)
......
......@@ -388,6 +388,9 @@ memberof_value_modify(
op2.orm_no_opattrs = 0;
if ( new_ndn != NULL ) {
BackendInfo *bi = op2.o_bd->bd_info;
OpExtra oex;
assert( !BER_BVISNULL( new_dn ) );
assert( !BER_BVISNULL( new_ndn ) );
......@@ -397,12 +400,17 @@ memberof_value_modify(
ml->sml_values[ 0 ] = *new_dn;
ml->sml_nvalues[ 0 ] = *new_ndn;
oex.oe_key = (void *)&memberof;
LDAP_SLIST_INSERT_HEAD(&op2.o_extra, &oex, oe_next);
op2.o_bd->bd_info = (BackendInfo *)on->on_info;
(void)op->o_bd->be_modify( &op2, &rs2 );
op2.o_bd->bd_info = bi;
LDAP_SLIST_REMOVE(&op2.o_extra, &oex, OpExtra, oe_next);
if ( rs2.sr_err != LDAP_SUCCESS ) {
char buf[ SLAP_TEXT_BUFLEN ];
snprintf( buf, sizeof( buf ),
"memberof_value_modify %s=\"%s\" failed err=%d",
ad->ad_cname.bv_val, new_dn->bv_val, rs2.sr_err );
"memberof_value_modify DN=\"%s\" add %s=\"%s\" failed err=%d",
op2.o_req_dn.bv_val, ad->ad_cname.bv_val, new_dn->bv_val, rs2.sr_err );
Debug( LDAP_DEBUG_ANY, "%s: %s\n",
op->o_log_prefix, buf, 0 );
}
......@@ -422,6 +430,9 @@ memberof_value_modify(
}
if ( old_ndn != NULL ) {
BackendInfo *bi = op2.o_bd->bd_info;
OpExtra oex;
assert( !BER_BVISNULL( old_dn ) );
assert( !BER_BVISNULL( old_ndn ) );
......@@ -431,12 +442,17 @@ memberof_value_modify(
ml->sml_values[ 0 ] = *old_dn;
ml->sml_nvalues[ 0 ] = *old_ndn;
oex.oe_key = (void *)&memberof;
LDAP_SLIST_INSERT_HEAD(&op2.o_extra, &oex, oe_next);
op2.o_bd->bd_info = (BackendInfo *)on->on_info;
(void)op->o_bd->be_modify( &op2, &rs2 );
op2.o_bd->bd_info = bi;
LDAP_SLIST_REMOVE(&op2.o_extra, &oex, OpExtra, oe_next);
if ( rs2.sr_err != LDAP_SUCCESS ) {
char buf[ SLAP_TEXT_BUFLEN ];
snprintf( buf, sizeof( buf ),
"memberof_value_modify %s=\"%s\" failed err=%d",
ad->ad_cname.bv_val, old_dn->bv_val, rs2.sr_err );
"memberof_value_modify DN=\"%s\" delete %s=\"%s\" failed err=%d",
op2.o_req_dn.bv_val, ad->ad_cname.bv_val, old_dn->bv_val, rs2.sr_err );
Debug( LDAP_DEBUG_ANY, "%s: %s\n",
op->o_log_prefix, buf, 0 );
}
......@@ -492,6 +508,12 @@ memberof_op_add( Operation *op, SlapReply *rs )
struct berval save_dn, save_ndn;
slap_callback *sc;
memberof_cbinfo_t *mci;
OpExtra *oex;
LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) {
if ( oex->oe_key == (void *)&memberof )
return SLAP_CB_CONTINUE;
}
if ( op->ora_e->e_attrs == NULL ) {
/* FIXME: global overlay; need to deal with */
......@@ -720,7 +742,12 @@ memberof_op_delete( Operation *op, SlapReply *rs )
slap_callback *sc;
memberof_cbinfo_t *mci;
OpExtra *oex;
LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) {
if ( oex->oe_key == (void *)&memberof )
return SLAP_CB_CONTINUE;
}
sc = op->o_tmpalloc( sizeof(slap_callback)+sizeof(*mci), op->o_tmpmemctx );
sc->sc_private = sc+1;
......@@ -754,6 +781,12 @@ memberof_op_modify( Operation *op, SlapReply *rs )
struct berval save_dn, save_ndn;
slap_callback *sc;
memberof_cbinfo_t *mci, mcis;
OpExtra *oex;
LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) {
if ( oex->oe_key == (void *)&memberof )
return SLAP_CB_CONTINUE;
}
if ( MEMBEROF_REVERSE( mo ) ) {
for ( mlp = &op->orm_modlist; *mlp; mlp = &(*mlp)->sml_next ) {
......@@ -1165,6 +1198,12 @@ memberof_op_modrdn( Operation *op, SlapReply *rs )
slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
slap_callback *sc;
memberof_cbinfo_t *mci;
OpExtra *oex;
LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) {
if ( oex->oe_key == (void *)&memberof )
return SLAP_CB_CONTINUE;
}
sc = op->o_tmpalloc( sizeof(slap_callback)+sizeof(*mci), op->o_tmpmemctx );
sc->sc_private = sc+1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment