From f6881dcdad2ad36bd88c05e283a98006fd92e95b Mon Sep 17 00:00:00 2001 From: Ludwig Krispenz Date: Tue, 22 Nov 2016 15:16:21 +0100 Subject: [PATCH 1/4] Ticket 49050 - make objectclass ldapsubentry effective immediately --- ldap/servers/slapd/back-ldbm/ldbm_modify.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modify.c b/ldap/servers/slapd/back-ldbm/ldbm_modify.c index 307f7c2..241ca1b 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_modify.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_modify.c @@ -275,7 +275,27 @@ modify_apply_check_expand( */ for ( i = 0; mods && mods[i]; ++i ) { if ( 0 == strcasecmp( SLAPI_ATTR_OBJECTCLASS, mods[i]->mod_type )) { + int j; slapi_schema_expand_objectclasses( ec->ep_entry ); + /* if the objectclass ldapsubentry is added or removed, the flag in the entry + * has to be updated. Otherwise it would only be effective after a reload + * of the entry. + */ + for ( j = 0; mods[i]->mod_bvalues != NULL && mods[i]->mod_bvalues[j] != NULL; j++ ) { + if (strncasecmp((const char *)mods[i]->mod_bvalues[j]->bv_val, + "ldapsubentry", mods[i]->mod_bvalues[j]->bv_len) == 0) { + switch ( mods[i]->mod_op & ~LDAP_MOD_BVALUES ) { + case LDAP_MOD_ADD: + case LDAP_MOD_REPLACE: + ec->ep_entry->e_flags |= SLAPI_ENTRY_LDAPSUBENTRY; + break; + case LDAP_MOD_DELETE: + ec->ep_entry->e_flags &= ~SLAPI_ENTRY_LDAPSUBENTRY; + break; + } + break; + } + } break; } } -- 2.5.5