|
|
@@ -92,7 +92,6 @@ typedef struct _memberof_get_groups_data
|
|
|
MemberOfConfig *config;
|
|
|
Slapi_Value *memberdn_val;
|
|
|
Slapi_ValueSet **groupvals;
|
|
|
- void *txn;
|
|
|
} memberof_get_groups_data;
|
|
|
|
|
|
/*** function prototypes ***/
|
|
|
@@ -113,55 +112,55 @@ static int memberof_postop_close(Slapi_PBlock *pb);
|
|
|
static int memberof_oktodo(Slapi_PBlock *pb);
|
|
|
static char *memberof_getdn(Slapi_PBlock *pb);
|
|
|
static int memberof_modop_one(Slapi_PBlock *pb, MemberOfConfig *config, int mod_op,
|
|
|
- char *op_this, char *op_to, void *txn);
|
|
|
+ char *op_this, char *op_to);
|
|
|
static int memberof_modop_one_r(Slapi_PBlock *pb, MemberOfConfig *config, int mod_op,
|
|
|
- char *group_dn, char *op_this, char *op_to, memberofstringll *stack, void *txn);
|
|
|
+ char *group_dn, char *op_this, char *op_to, memberofstringll *stack);
|
|
|
static int memberof_add_one(Slapi_PBlock *pb, MemberOfConfig *config, char *addthis,
|
|
|
- char *addto, void *txn);
|
|
|
+ char *addto);
|
|
|
static int memberof_del_one(Slapi_PBlock *pb, MemberOfConfig *config, char *delthis,
|
|
|
- char *delfrom, void *txn);
|
|
|
+ char *delfrom);
|
|
|
static int memberof_mod_smod_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
- char *groupdn, Slapi_Mod *smod, void *txn);
|
|
|
+ char *groupdn, Slapi_Mod *smod);
|
|
|
static int memberof_add_smod_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Mod *smod, void *txn);
|
|
|
+ char *groupdn, Slapi_Mod *smod);
|
|
|
static int memberof_del_smod_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Mod *smod, void *txn);
|
|
|
+ char *groupdn, Slapi_Mod *smod);
|
|
|
static int memberof_mod_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
- char *groupdn, Slapi_Attr *attr, void *txn);
|
|
|
+ char *groupdn, Slapi_Attr *attr);
|
|
|
static int memberof_mod_attr_list_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- int mod, char *group_dn, char *op_this, Slapi_Attr *attr, memberofstringll *stack, void *txn);
|
|
|
+ int mod, char *group_dn, char *op_this, Slapi_Attr *attr, memberofstringll *stack);
|
|
|
static int memberof_add_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Attr *attr, void *txn);
|
|
|
+ char *groupdn, Slapi_Attr *attr);
|
|
|
static int memberof_del_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Attr *attr, void *txn);
|
|
|
+ char *groupdn, Slapi_Attr *attr);
|
|
|
static int memberof_moddn_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *pre_dn, char *post_dn, Slapi_Attr *attr, void *txn);
|
|
|
-static int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn, void *txn);
|
|
|
+ char *pre_dn, char *post_dn, Slapi_Attr *attr);
|
|
|
+static int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn);
|
|
|
static void memberof_set_plugin_id(void * plugin_id);
|
|
|
static void *memberof_get_plugin_id();
|
|
|
static int memberof_compare(MemberOfConfig *config, const void *a, const void *b);
|
|
|
static int memberof_qsort_compare(const void *a, const void *b);
|
|
|
static void memberof_load_array(Slapi_Value **array, Slapi_Attr *attr);
|
|
|
-static void memberof_del_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config, char *dn, void *txn);
|
|
|
+static void memberof_del_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config, char *dn);
|
|
|
static int memberof_call_foreach_dn(Slapi_PBlock *pb, char *dn,
|
|
|
- char **types, plugin_search_entry_callback callback, void *callback_data, void *txn);
|
|
|
+ char **types, plugin_search_entry_callback callback, void *callback_data);
|
|
|
static int memberof_is_direct_member(MemberOfConfig *config, Slapi_Value *groupdn,
|
|
|
- Slapi_Value *memberdn, void *txn);
|
|
|
+ Slapi_Value *memberdn);
|
|
|
static int memberof_is_grouping_attr(char *type, MemberOfConfig *config);
|
|
|
-static Slapi_ValueSet *memberof_get_groups(MemberOfConfig *config, char *memberdn, void *txn);
|
|
|
+static Slapi_ValueSet *memberof_get_groups(MemberOfConfig *config, char *memberdn);
|
|
|
static int memberof_get_groups_r(MemberOfConfig *config, char *memberdn,
|
|
|
- memberof_get_groups_data *data, void *txn);
|
|
|
+ memberof_get_groups_data *data);
|
|
|
static int memberof_get_groups_callback(Slapi_Entry *e, void *callback_data);
|
|
|
static int memberof_test_membership(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *group_dn, void *txn);
|
|
|
+ char *group_dn);
|
|
|
static int memberof_test_membership_callback(Slapi_Entry *e, void *callback_data);
|
|
|
static int memberof_del_dn_type_callback(Slapi_Entry *e, void *callback_data);
|
|
|
static int memberof_replace_dn_type_callback(Slapi_Entry *e, void *callback_data);
|
|
|
static void memberof_replace_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *pre_dn, char *post_dn, void *txn);
|
|
|
+ char *pre_dn, char *post_dn);
|
|
|
static int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
int mod_op, char *group_dn, char *op_this, char *replace_with, char *op_to,
|
|
|
- memberofstringll *stack, void *txn);
|
|
|
+ memberofstringll *stack);
|
|
|
static int memberof_task_add(Slapi_PBlock *pb, Slapi_Entry *e,
|
|
|
Slapi_Entry *eAfter, int *returncode, char *returntext,
|
|
|
void *arg);
|
|
|
@@ -169,7 +168,7 @@ static void memberof_task_destructor(Slapi_Task *task);
|
|
|
static const char *fetch_attr(Slapi_Entry *e, const char *attrname,
|
|
|
const char *default_val);
|
|
|
static void memberof_fixup_task_thread(void *arg);
|
|
|
-static int memberof_fix_memberof(MemberOfConfig *config, char *dn, char *filter_str, void *txn);
|
|
|
+static int memberof_fix_memberof(MemberOfConfig *config, char *dn, char *filter_str);
|
|
|
static int memberof_fix_memberof_callback(Slapi_Entry *e, void *callback_data);
|
|
|
|
|
|
|
|
|
@@ -399,10 +398,8 @@ int memberof_postop_del(Slapi_PBlock *pb)
|
|
|
if(memberof_oktodo(pb) && (normdn = memberof_getdn(pb)))
|
|
|
{
|
|
|
struct slapi_entry *e = NULL;
|
|
|
- void *txn = NULL;
|
|
|
|
|
|
slapi_pblock_get( pb, SLAPI_ENTRY_PRE_OP, &e );
|
|
|
- slapi_pblock_get( pb, SLAPI_TXN, &txn );
|
|
|
|
|
|
/* We need to get the config lock first. Trying to get the
|
|
|
* config lock after we already hold the op lock can cause
|
|
|
@@ -418,7 +415,7 @@ int memberof_postop_del(Slapi_PBlock *pb)
|
|
|
/* remove this DN from the
|
|
|
* membership lists of groups
|
|
|
*/
|
|
|
- memberof_del_dn_from_groups(pb, &configCopy, normdn, txn);
|
|
|
+ memberof_del_dn_from_groups(pb, &configCopy, normdn);
|
|
|
|
|
|
/* is the entry of interest as a group? */
|
|
|
if(e && configCopy.group_filter && !slapi_filter_test_simple(e, configCopy.group_filter))
|
|
|
@@ -431,7 +428,7 @@ int memberof_postop_del(Slapi_PBlock *pb)
|
|
|
{
|
|
|
if (0 == slapi_entry_attr_find(e, configCopy.groupattrs[i], &attr))
|
|
|
{
|
|
|
- memberof_del_attr_list(pb, &configCopy, normdn, attr, txn);
|
|
|
+ memberof_del_attr_list(pb, &configCopy, normdn, attr);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -450,12 +447,11 @@ typedef struct _memberof_del_dn_data
|
|
|
{
|
|
|
char *dn;
|
|
|
char *type;
|
|
|
- void *txn;
|
|
|
} memberof_del_dn_data;
|
|
|
|
|
|
/* Deletes a member dn from all groups that refer to it. */
|
|
|
static void
|
|
|
-memberof_del_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config, char *dn, void *txn)
|
|
|
+memberof_del_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config, char *dn)
|
|
|
{
|
|
|
int i = 0;
|
|
|
char *groupattrs[2] = {0, 0};
|
|
|
@@ -465,12 +461,12 @@ memberof_del_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config, char *dn,
|
|
|
* same grouping attribute. */
|
|
|
for (i = 0; config->groupattrs[i]; i++)
|
|
|
{
|
|
|
- memberof_del_dn_data data = {dn, config->groupattrs[i], txn};
|
|
|
+ memberof_del_dn_data data = {dn, config->groupattrs[i]};
|
|
|
|
|
|
groupattrs[0] = config->groupattrs[i];
|
|
|
|
|
|
memberof_call_foreach_dn(pb, dn, groupattrs,
|
|
|
- memberof_del_dn_type_callback, &data, txn);
|
|
|
+ memberof_del_dn_type_callback, &data);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -499,7 +495,6 @@ int memberof_del_dn_type_callback(Slapi_Entry *e, void *callback_data)
|
|
|
mods, 0, 0,
|
|
|
memberof_get_plugin_id(), 0);
|
|
|
|
|
|
- slapi_pblock_set(mod_pb, SLAPI_TXN, ((memberof_del_dn_data *)callback_data)->txn);
|
|
|
slapi_modify_internal_pb(mod_pb);
|
|
|
|
|
|
slapi_pblock_get(mod_pb,
|
|
|
@@ -518,7 +513,7 @@ int memberof_del_dn_type_callback(Slapi_Entry *e, void *callback_data)
|
|
|
* case.
|
|
|
*/
|
|
|
int memberof_call_foreach_dn(Slapi_PBlock *pb, char *dn,
|
|
|
- char **types, plugin_search_entry_callback callback, void *callback_data, void *txn)
|
|
|
+ char **types, plugin_search_entry_callback callback, void *callback_data)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
Slapi_PBlock *search_pb = slapi_pblock_new();
|
|
|
@@ -531,7 +526,6 @@ int memberof_call_foreach_dn(Slapi_PBlock *pb, char *dn,
|
|
|
int dn_len = 0;
|
|
|
int i = 0;
|
|
|
|
|
|
- slapi_pblock_set(search_pb, SLAPI_TXN, txn);
|
|
|
/* get the base dn for the backend we are in
|
|
|
(we don't support having members and groups in
|
|
|
different backends - issues with offline / read only backends)
|
|
|
@@ -634,11 +628,9 @@ int memberof_postop_modrdn(Slapi_PBlock *pb)
|
|
|
struct slapi_entry *post_e = NULL;
|
|
|
char *pre_dn = 0;
|
|
|
char *post_dn = 0;
|
|
|
- void *txn = NULL;
|
|
|
|
|
|
slapi_pblock_get( pb, SLAPI_ENTRY_PRE_OP, &pre_e );
|
|
|
slapi_pblock_get( pb, SLAPI_ENTRY_POST_OP, &post_e );
|
|
|
- slapi_pblock_get( pb, SLAPI_TXN, &txn );
|
|
|
|
|
|
if(pre_e && post_e)
|
|
|
{
|
|
|
@@ -667,7 +659,7 @@ int memberof_postop_modrdn(Slapi_PBlock *pb)
|
|
|
{
|
|
|
if(0 == slapi_entry_attr_find(post_e, configCopy.groupattrs[i], &attr))
|
|
|
{
|
|
|
- if(memberof_moddn_attr_list(pb, &configCopy, pre_dn, post_dn, attr, txn) != 0){
|
|
|
+ if(memberof_moddn_attr_list(pb, &configCopy, pre_dn, post_dn, attr) != 0){
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -678,7 +670,7 @@ int memberof_postop_modrdn(Slapi_PBlock *pb)
|
|
|
* of other group entries. We need to update any member
|
|
|
* attributes to refer to the new name. */
|
|
|
if (pre_dn && post_dn) {
|
|
|
- memberof_replace_dn_from_groups(pb, &configCopy, pre_dn, post_dn, txn);
|
|
|
+ memberof_replace_dn_from_groups(pb, &configCopy, pre_dn, post_dn);
|
|
|
}
|
|
|
|
|
|
memberof_unlock();
|
|
|
@@ -696,7 +688,6 @@ typedef struct _replace_dn_data
|
|
|
char *pre_dn;
|
|
|
char *post_dn;
|
|
|
char *type;
|
|
|
- void *txn;
|
|
|
} replace_dn_data;
|
|
|
|
|
|
|
|
|
@@ -704,7 +695,7 @@ typedef struct _replace_dn_data
|
|
|
* to use post_dn instead. */
|
|
|
static void
|
|
|
memberof_replace_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *pre_dn, char *post_dn, void *txn)
|
|
|
+ char *pre_dn, char *post_dn)
|
|
|
{
|
|
|
int i = 0;
|
|
|
char *groupattrs[2] = {0, 0};
|
|
|
@@ -714,12 +705,12 @@ memberof_replace_dn_from_groups(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
* using the same grouping attribute. */
|
|
|
for (i = 0; config->groupattrs[i]; i++)
|
|
|
{
|
|
|
- replace_dn_data data = {pre_dn, post_dn, config->groupattrs[i], txn};
|
|
|
+ replace_dn_data data = {pre_dn, post_dn, config->groupattrs[i]};
|
|
|
|
|
|
groupattrs[0] = config->groupattrs[i];
|
|
|
|
|
|
memberof_call_foreach_dn(pb, pre_dn, groupattrs,
|
|
|
- memberof_replace_dn_type_callback, &data, txn);
|
|
|
+ memberof_replace_dn_type_callback, &data);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -759,7 +750,6 @@ int memberof_replace_dn_type_callback(Slapi_Entry *e, void *callback_data)
|
|
|
mods, 0, 0,
|
|
|
memberof_get_plugin_id(), 0);
|
|
|
|
|
|
- slapi_pblock_set(mod_pb, SLAPI_TXN, ((replace_dn_data *)callback_data)->txn);
|
|
|
slapi_modify_internal_pb(mod_pb);
|
|
|
|
|
|
slapi_pblock_get(mod_pb,
|
|
|
@@ -812,9 +802,7 @@ int memberof_postop_modify(Slapi_PBlock *pb)
|
|
|
int config_copied = 0;
|
|
|
MemberOfConfig *mainConfig = 0;
|
|
|
MemberOfConfig configCopy = {0, 0, 0, 0};
|
|
|
- void *txn = NULL;
|
|
|
|
|
|
- slapi_pblock_get(pb, SLAPI_TXN, &txn);
|
|
|
/* get the mod set */
|
|
|
slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &mods);
|
|
|
smods = slapi_mods_new();
|
|
|
@@ -865,7 +853,7 @@ int memberof_postop_modify(Slapi_PBlock *pb)
|
|
|
case LDAP_MOD_ADD:
|
|
|
{
|
|
|
/* add group DN to targets */
|
|
|
- memberof_add_smod_list(pb, &configCopy, normdn, smod, txn);
|
|
|
+ memberof_add_smod_list(pb, &configCopy, normdn, smod);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -877,12 +865,12 @@ int memberof_postop_modify(Slapi_PBlock *pb)
|
|
|
* entry, which the replace code deals with. */
|
|
|
if (slapi_mod_get_num_values(smod) == 0)
|
|
|
{
|
|
|
- memberof_replace_list(pb, &configCopy, normdn, txn);
|
|
|
+ memberof_replace_list(pb, &configCopy, normdn);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
/* remove group DN from target values in smod*/
|
|
|
- memberof_del_smod_list(pb, &configCopy, normdn, smod, txn);
|
|
|
+ memberof_del_smod_list(pb, &configCopy, normdn, smod);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -890,7 +878,7 @@ int memberof_postop_modify(Slapi_PBlock *pb)
|
|
|
case LDAP_MOD_REPLACE:
|
|
|
{
|
|
|
/* replace current values */
|
|
|
- memberof_replace_list(pb, &configCopy, normdn, txn);
|
|
|
+ memberof_replace_list(pb, &configCopy, normdn);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -955,10 +943,9 @@ int memberof_postop_add(Slapi_PBlock *pb)
|
|
|
MemberOfConfig *mainConfig = 0;
|
|
|
MemberOfConfig configCopy = {0, 0, 0, 0};
|
|
|
struct slapi_entry *e = NULL;
|
|
|
- void *txn = NULL;
|
|
|
|
|
|
slapi_pblock_get( pb, SLAPI_ENTRY_POST_OP, &e );
|
|
|
- slapi_pblock_get( pb, SLAPI_TXN, &txn );
|
|
|
+
|
|
|
|
|
|
/* is the entry of interest? */
|
|
|
memberof_rlock_config();
|
|
|
@@ -983,7 +970,7 @@ int memberof_postop_add(Slapi_PBlock *pb)
|
|
|
{
|
|
|
if(0 == slapi_entry_attr_find(e, configCopy.groupattrs[i], &attr))
|
|
|
{
|
|
|
- memberof_add_attr_list(pb, &configCopy, normdn, attr, txn);
|
|
|
+ memberof_add_attr_list(pb, &configCopy, normdn, attr);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1073,9 +1060,9 @@ char *memberof_getdn(Slapi_PBlock *pb)
|
|
|
* Also, we must not delete entries that are a member of the group
|
|
|
*/
|
|
|
int memberof_modop_one(Slapi_PBlock *pb, MemberOfConfig *config, int mod_op,
|
|
|
- char *op_this, char *op_to, void *txn)
|
|
|
+ char *op_this, char *op_to)
|
|
|
{
|
|
|
- return memberof_modop_one_r(pb, config, mod_op, op_this, op_this, op_to, 0, txn);
|
|
|
+ return memberof_modop_one_r(pb, config, mod_op, op_this, op_this, op_to, 0);
|
|
|
}
|
|
|
|
|
|
/* memberof_modop_one_r()
|
|
|
@@ -1084,24 +1071,19 @@ int memberof_modop_one(Slapi_PBlock *pb, MemberOfConfig *config, int mod_op,
|
|
|
*/
|
|
|
|
|
|
int memberof_modop_one_r(Slapi_PBlock *pb, MemberOfConfig *config, int mod_op,
|
|
|
- char *group_dn, char *op_this, char *op_to, memberofstringll *stack, void *txn)
|
|
|
+ char *group_dn, char *op_this, char *op_to, memberofstringll *stack)
|
|
|
{
|
|
|
return memberof_modop_one_replace_r(
|
|
|
- pb, config, mod_op, group_dn, op_this, 0, op_to, stack, txn);
|
|
|
+ pb, config, mod_op, group_dn, op_this, 0, op_to, stack);
|
|
|
}
|
|
|
|
|
|
-struct fix_memberof_callback_data {
|
|
|
- MemberOfConfig *config;
|
|
|
- void *txn;
|
|
|
-};
|
|
|
-
|
|
|
/* memberof_modop_one_replace_r()
|
|
|
*
|
|
|
* recursive function to perform above (with added replace arg)
|
|
|
*/
|
|
|
int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
int mod_op, char *group_dn, char *op_this, char *replace_with,
|
|
|
- char *op_to, memberofstringll *stack, void *txn)
|
|
|
+ char *op_to, memberofstringll *stack)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
LDAPMod mod;
|
|
|
@@ -1125,8 +1107,8 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
|
|
|
/* determine if this is a group op or single entry */
|
|
|
op_to_sdn = slapi_sdn_new_normdn_byref(op_to);
|
|
|
- slapi_search_internal_get_entry_ext( op_to_sdn, config->groupattrs,
|
|
|
- &e, memberof_get_plugin_id(), txn);
|
|
|
+ slapi_search_internal_get_entry( op_to_sdn, config->groupattrs,
|
|
|
+ &e, memberof_get_plugin_id());
|
|
|
if(!e)
|
|
|
{
|
|
|
/* In the case of a delete, we need to worry about the
|
|
|
@@ -1165,7 +1147,6 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
slapi_search_internal_set_pb(search_pb, slapi_sdn_get_dn(base_sdn),
|
|
|
LDAP_SCOPE_SUBTREE, filter_str, 0, 0, 0, 0,
|
|
|
memberof_get_plugin_id(), 0);
|
|
|
- slapi_pblock_set(search_pb, SLAPI_TXN, txn);
|
|
|
|
|
|
if (slapi_search_internal_pb(search_pb))
|
|
|
{
|
|
|
@@ -1185,7 +1166,7 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
* entry. This will fix the references to
|
|
|
* the missing group as well as the group
|
|
|
* represented by op_this. */
|
|
|
- memberof_test_membership(pb, config, op_to, txn);
|
|
|
+ memberof_test_membership(pb, config, op_to);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1268,7 +1249,7 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
slapi_entry_attr_find( e, config->groupattrs[i], &members );
|
|
|
if(members)
|
|
|
{
|
|
|
- if(memberof_mod_attr_list_r(pb, config, mod_op, group_dn, op_this, members, ll, txn) != 0){
|
|
|
+ if(memberof_mod_attr_list_r(pb, config, mod_op, group_dn, op_this, members, ll) != 0){
|
|
|
rc = -1;
|
|
|
goto bail;
|
|
|
}
|
|
|
@@ -1309,8 +1290,7 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
if(LDAP_MOD_DELETE == mod_op || LDAP_MOD_ADD == mod_op)
|
|
|
{
|
|
|
/* find parent groups and replace our member attr */
|
|
|
- struct fix_memberof_callback_data cb_data = {config, txn};
|
|
|
- memberof_fix_memberof_callback(e, &cb_data);
|
|
|
+ memberof_fix_memberof_callback(e, config);
|
|
|
} else {
|
|
|
/* single entry - do mod */
|
|
|
mod_pb = slapi_pblock_new();
|
|
|
@@ -1347,7 +1327,6 @@ int memberof_modop_one_replace_r(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
mods, 0, 0,
|
|
|
memberof_get_plugin_id(), 0);
|
|
|
|
|
|
- slapi_pblock_set(mod_pb, SLAPI_TXN, txn);
|
|
|
slapi_modify_internal_pb(mod_pb);
|
|
|
|
|
|
slapi_pblock_get(mod_pb,
|
|
|
@@ -1373,9 +1352,9 @@ bail:
|
|
|
* Add addthis DN to the memberof attribute of addto
|
|
|
*
|
|
|
*/
|
|
|
-int memberof_add_one(Slapi_PBlock *pb, MemberOfConfig *config, char *addthis, char *addto, void *txn)
|
|
|
+int memberof_add_one(Slapi_PBlock *pb, MemberOfConfig *config, char *addthis, char *addto)
|
|
|
{
|
|
|
- return memberof_modop_one(pb, config, LDAP_MOD_ADD, addthis, addto, txn);
|
|
|
+ return memberof_modop_one(pb, config, LDAP_MOD_ADD, addthis, addto);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1384,9 +1363,9 @@ int memberof_add_one(Slapi_PBlock *pb, MemberOfConfig *config, char *addthis, ch
|
|
|
* Delete delthis DN from the memberof attribute of delfrom
|
|
|
*
|
|
|
*/
|
|
|
-int memberof_del_one(Slapi_PBlock *pb, MemberOfConfig *config, char *delthis, char *delfrom, void *txn)
|
|
|
+int memberof_del_one(Slapi_PBlock *pb, MemberOfConfig *config, char *delthis, char *delfrom)
|
|
|
{
|
|
|
- return memberof_modop_one(pb, config, LDAP_MOD_DELETE, delthis, delfrom, txn);
|
|
|
+ return memberof_modop_one(pb, config, LDAP_MOD_DELETE, delthis, delfrom);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1396,7 +1375,7 @@ int memberof_del_one(Slapi_PBlock *pb, MemberOfConfig *config, char *delthis, ch
|
|
|
*
|
|
|
*/
|
|
|
int memberof_mod_smod_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
- char *group_dn, Slapi_Mod *smod, void *txn)
|
|
|
+ char *group_dn, Slapi_Mod *smod)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
struct berval *bv = slapi_mod_get_first_value(smod);
|
|
|
@@ -1428,7 +1407,7 @@ int memberof_mod_smod_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
|
|
|
strncpy(dn_str, bv->bv_val, (size_t)bv->bv_len);
|
|
|
|
|
|
- memberof_modop_one(pb, config, mod, group_dn, dn_str, txn);
|
|
|
+ memberof_modop_one(pb, config, mod, group_dn, dn_str);
|
|
|
|
|
|
bv = slapi_mod_get_next_value(smod);
|
|
|
}
|
|
|
@@ -1446,9 +1425,9 @@ int memberof_mod_smod_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
*
|
|
|
*/
|
|
|
int memberof_add_smod_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Mod *smod, void *txn)
|
|
|
+ char *groupdn, Slapi_Mod *smod)
|
|
|
{
|
|
|
- return memberof_mod_smod_list(pb, config, LDAP_MOD_ADD, groupdn, smod, txn);
|
|
|
+ return memberof_mod_smod_list(pb, config, LDAP_MOD_ADD, groupdn, smod);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1459,9 +1438,9 @@ int memberof_add_smod_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
*
|
|
|
*/
|
|
|
int memberof_del_smod_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *groupdn, Slapi_Mod *smod, void *txn)
|
|
|
+ char *groupdn, Slapi_Mod *smod)
|
|
|
{
|
|
|
- return memberof_mod_smod_list(pb, config, LDAP_MOD_DELETE, groupdn, smod, txn);
|
|
|
+ return memberof_mod_smod_list(pb, config, LDAP_MOD_DELETE, groupdn, smod);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1485,13 +1464,13 @@ void * memberof_get_plugin_id()
|
|
|
*
|
|
|
*/
|
|
|
int memberof_mod_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
- char *group_dn, Slapi_Attr *attr, void *txn)
|
|
|
+ char *group_dn, Slapi_Attr *attr)
|
|
|
{
|
|
|
- return memberof_mod_attr_list_r(pb, config, mod, group_dn, group_dn, attr, 0, txn);
|
|
|
+ return memberof_mod_attr_list_r(pb, config, mod, group_dn, group_dn, attr, 0);
|
|
|
}
|
|
|
|
|
|
int memberof_mod_attr_list_r(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
- char *group_dn, char *op_this, Slapi_Attr *attr, memberofstringll *stack, void *txn)
|
|
|
+ char *group_dn, char *op_this, Slapi_Attr *attr, memberofstringll *stack)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
Slapi_Value *val = 0;
|
|
|
@@ -1538,11 +1517,11 @@ int memberof_mod_attr_list_r(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
if(mod == LDAP_MOD_REPLACE)
|
|
|
{
|
|
|
memberof_modop_one_replace_r(pb, config, mod, group_dn, op_this,
|
|
|
- group_dn, dn_str, stack, txn);
|
|
|
+ group_dn, dn_str, stack);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- memberof_modop_one_r(pb, config, mod, group_dn, op_this, dn_str, stack, txn);
|
|
|
+ memberof_modop_one_r(pb, config, mod, group_dn, op_this, dn_str, stack);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1564,9 +1543,9 @@ int memberof_mod_attr_list_r(Slapi_PBlock *pb, MemberOfConfig *config, int mod,
|
|
|
*
|
|
|
*/
|
|
|
int memberof_add_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, char *groupdn,
|
|
|
- Slapi_Attr *attr, void *txn)
|
|
|
+ Slapi_Attr *attr)
|
|
|
{
|
|
|
- return memberof_mod_attr_list(pb, config, LDAP_MOD_ADD, groupdn, attr, txn);
|
|
|
+ return memberof_mod_attr_list(pb, config, LDAP_MOD_ADD, groupdn, attr);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1576,9 +1555,9 @@ int memberof_add_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group
|
|
|
*
|
|
|
*/
|
|
|
int memberof_del_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, char *groupdn,
|
|
|
- Slapi_Attr *attr, void *txn)
|
|
|
+ Slapi_Attr *attr)
|
|
|
{
|
|
|
- return memberof_mod_attr_list(pb, config, LDAP_MOD_DELETE, groupdn, attr, txn);
|
|
|
+ return memberof_mod_attr_list(pb, config, LDAP_MOD_DELETE, groupdn, attr);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1588,7 +1567,7 @@ int memberof_del_attr_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group
|
|
|
*
|
|
|
*/
|
|
|
int memberof_moddn_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
- char *pre_dn, char *post_dn, Slapi_Attr *attr, void *txn)
|
|
|
+ char *pre_dn, char *post_dn, Slapi_Attr *attr)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
Slapi_Value *val = 0;
|
|
|
@@ -1623,7 +1602,7 @@ int memberof_moddn_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
strncpy(dn_str, bv->bv_val, (size_t)bv->bv_len);
|
|
|
|
|
|
memberof_modop_one_replace_r(pb, config, LDAP_MOD_REPLACE,
|
|
|
- post_dn, pre_dn, post_dn, dn_str, 0, txn);
|
|
|
+ post_dn, pre_dn, post_dn, dn_str, 0);
|
|
|
|
|
|
hint = slapi_attr_next_value(attr, hint, &val);
|
|
|
}
|
|
|
@@ -1641,25 +1620,25 @@ int memberof_moddn_attr_list(Slapi_PBlock *pb, MemberOfConfig *config,
|
|
|
* A Slapi_ValueSet* is returned. It is up to the caller to
|
|
|
* free it.
|
|
|
*/
|
|
|
-Slapi_ValueSet *memberof_get_groups(MemberOfConfig *config, char *memberdn, void *txn)
|
|
|
+Slapi_ValueSet *memberof_get_groups(MemberOfConfig *config, char *memberdn)
|
|
|
{
|
|
|
Slapi_Value *memberdn_val = slapi_value_new_string(memberdn);
|
|
|
Slapi_ValueSet *groupvals = slapi_valueset_new();
|
|
|
- memberof_get_groups_data data = {config, memberdn_val, &groupvals, txn};
|
|
|
+ memberof_get_groups_data data = {config, memberdn_val, &groupvals};
|
|
|
|
|
|
- memberof_get_groups_r(config, memberdn, &data, txn);
|
|
|
+ memberof_get_groups_r(config, memberdn, &data);
|
|
|
|
|
|
slapi_value_free(&memberdn_val);
|
|
|
|
|
|
return groupvals;
|
|
|
}
|
|
|
|
|
|
-int memberof_get_groups_r(MemberOfConfig *config, char *memberdn, memberof_get_groups_data *data, void *txn)
|
|
|
+int memberof_get_groups_r(MemberOfConfig *config, char *memberdn, memberof_get_groups_data *data)
|
|
|
{
|
|
|
/* Search for any grouping attributes that point to memberdn.
|
|
|
* For each match, add it to the list, recurse and do same search */
|
|
|
return memberof_call_foreach_dn(NULL, memberdn, config->groupattrs,
|
|
|
- memberof_get_groups_callback, data, txn);
|
|
|
+ memberof_get_groups_callback, data);
|
|
|
}
|
|
|
|
|
|
/* memberof_get_groups_callback()
|
|
|
@@ -1728,7 +1707,7 @@ int memberof_get_groups_callback(Slapi_Entry *e, void *callback_data)
|
|
|
|
|
|
/* now recurse to find parent groups of e */
|
|
|
memberof_get_groups_r(((memberof_get_groups_data*)callback_data)->config,
|
|
|
- group_dn, callback_data, ((memberof_get_groups_data*)callback_data)->txn);
|
|
|
+ group_dn, callback_data);
|
|
|
|
|
|
bail:
|
|
|
return rc;
|
|
|
@@ -1740,7 +1719,7 @@ bail:
|
|
|
* returns non-zero when true, zero otherwise
|
|
|
*/
|
|
|
int memberof_is_direct_member(MemberOfConfig *config, Slapi_Value *groupdn,
|
|
|
- Slapi_Value *memberdn, void *txn)
|
|
|
+ Slapi_Value *memberdn)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
Slapi_DN *sdn = 0;
|
|
|
@@ -1750,8 +1729,8 @@ int memberof_is_direct_member(MemberOfConfig *config, Slapi_Value *groupdn,
|
|
|
|
|
|
sdn = slapi_sdn_new_normdn_byref(slapi_value_get_string(groupdn));
|
|
|
|
|
|
- slapi_search_internal_get_entry_ext(sdn, config->groupattrs,
|
|
|
- &group_e, memberof_get_plugin_id(), txn);
|
|
|
+ slapi_search_internal_get_entry(sdn, config->groupattrs,
|
|
|
+ &group_e, memberof_get_plugin_id());
|
|
|
|
|
|
if(group_e)
|
|
|
{
|
|
|
@@ -1798,11 +1777,6 @@ static int memberof_is_grouping_attr(char *type, MemberOfConfig *config)
|
|
|
return match;
|
|
|
}
|
|
|
|
|
|
-struct test_membership_cb_data {
|
|
|
- MemberOfConfig *config;
|
|
|
- void *txn;
|
|
|
-};
|
|
|
-
|
|
|
/* memberof_test_membership()
|
|
|
*
|
|
|
* Finds all entries who are a "memberOf" the group
|
|
|
@@ -1818,13 +1792,12 @@ struct test_membership_cb_data {
|
|
|
* iterate until a pass fails to move a group over to member groups
|
|
|
* remaining groups should be deleted
|
|
|
*/
|
|
|
-int memberof_test_membership(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn, void *txn)
|
|
|
+int memberof_test_membership(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn)
|
|
|
{
|
|
|
char *attrs[2] = {config->memberof_attr, 0};
|
|
|
- struct test_membership_cb_data cb_data = {config, txn};
|
|
|
|
|
|
return memberof_call_foreach_dn(pb, group_dn, attrs,
|
|
|
- memberof_test_membership_callback , &cb_data, txn);
|
|
|
+ memberof_test_membership_callback , config);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -1842,8 +1815,7 @@ int memberof_test_membership_callback(Slapi_Entry *e, void *callback_data)
|
|
|
Slapi_Value **member_array = 0;
|
|
|
Slapi_Value **candidate_array = 0;
|
|
|
Slapi_Value *entry_dn = 0;
|
|
|
- struct test_membership_cb_data *cb_data = (struct test_membership_cb_data *)callback_data;
|
|
|
- MemberOfConfig *config = cb_data->config;
|
|
|
+ MemberOfConfig *config = (MemberOfConfig *)callback_data;
|
|
|
|
|
|
entry_dn = slapi_value_new_string(slapi_entry_get_dn(e));
|
|
|
|
|
|
@@ -1880,7 +1852,7 @@ int memberof_test_membership_callback(Slapi_Entry *e, void *callback_data)
|
|
|
while(val)
|
|
|
{
|
|
|
/* test for direct membership */
|
|
|
- if(memberof_is_direct_member(config, val, entry_dn, cb_data->txn))
|
|
|
+ if(memberof_is_direct_member(config, val, entry_dn))
|
|
|
{
|
|
|
/* it is a member */
|
|
|
member_array[m_index] = val;
|
|
|
@@ -1929,7 +1901,7 @@ int memberof_test_membership_callback(Slapi_Entry *e, void *callback_data)
|
|
|
if(memberof_is_direct_member(
|
|
|
config,
|
|
|
candidate_array[inner_index],
|
|
|
- member_array[outer_index], cb_data->txn))
|
|
|
+ member_array[outer_index]))
|
|
|
{
|
|
|
member_array[m_index] =
|
|
|
candidate_array
|
|
|
@@ -1969,7 +1941,7 @@ int memberof_test_membership_callback(Slapi_Entry *e, void *callback_data)
|
|
|
0, config,
|
|
|
(char*)slapi_value_get_string(
|
|
|
candidate_array[outer_index]),
|
|
|
- (char*)slapi_value_get_string(entry_dn), cb_data->txn);
|
|
|
+ (char*)slapi_value_get_string(entry_dn));
|
|
|
|
|
|
outer_index++;
|
|
|
}
|
|
|
@@ -2001,7 +1973,7 @@ bail:
|
|
|
* Perform replace the group DN list in the memberof attribute of the list of targets
|
|
|
*
|
|
|
*/
|
|
|
-int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn, void *txn)
|
|
|
+int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_dn)
|
|
|
{
|
|
|
struct slapi_entry *pre_e = NULL;
|
|
|
struct slapi_entry *post_e = NULL;
|
|
|
@@ -2091,7 +2063,7 @@ int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_
|
|
|
pb, config,
|
|
|
group_dn,
|
|
|
(char*)slapi_value_get_string(
|
|
|
- post_array[post_index]), txn);
|
|
|
+ post_array[post_index]));
|
|
|
|
|
|
post_index++;
|
|
|
}
|
|
|
@@ -2102,7 +2074,7 @@ int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_
|
|
|
pb, config,
|
|
|
group_dn,
|
|
|
(char*)slapi_value_get_string(
|
|
|
- pre_array[pre_index]), txn);
|
|
|
+ pre_array[pre_index]));
|
|
|
|
|
|
pre_index++;
|
|
|
}
|
|
|
@@ -2121,7 +2093,7 @@ int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_
|
|
|
pb, config,
|
|
|
group_dn,
|
|
|
(char*)slapi_value_get_string(
|
|
|
- pre_array[pre_index]), txn);
|
|
|
+ pre_array[pre_index]));
|
|
|
|
|
|
pre_index++;
|
|
|
}
|
|
|
@@ -2132,7 +2104,7 @@ int memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config, char *group_
|
|
|
pb, config,
|
|
|
group_dn,
|
|
|
(char*)slapi_value_get_string(
|
|
|
- post_array[post_index]), txn);
|
|
|
+ post_array[post_index]));
|
|
|
|
|
|
post_index++;
|
|
|
}
|
|
|
@@ -2252,7 +2224,7 @@ void memberof_fixup_task_thread(void *arg)
|
|
|
memberof_lock();
|
|
|
|
|
|
/* do real work */
|
|
|
- rc = memberof_fix_memberof(&configCopy, td->dn, td->filter_str, NULL /* no txn? */);
|
|
|
+ rc = memberof_fix_memberof(&configCopy, td->dn, td->filter_str);
|
|
|
|
|
|
/* release the memberOf operation lock */
|
|
|
memberof_unlock();
|
|
|
@@ -2372,10 +2344,9 @@ memberof_task_destructor(Slapi_Task *task)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int memberof_fix_memberof(MemberOfConfig *config, char *dn, char *filter_str, void *txn)
|
|
|
+int memberof_fix_memberof(MemberOfConfig *config, char *dn, char *filter_str)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
- struct fix_memberof_callback_data cb_data = {config, txn};
|
|
|
Slapi_PBlock *search_pb = slapi_pblock_new();
|
|
|
|
|
|
slapi_search_internal_set_pb(search_pb, dn,
|
|
|
@@ -2384,9 +2355,8 @@ int memberof_fix_memberof(MemberOfConfig *config, char *dn, char *filter_str, vo
|
|
|
memberof_get_plugin_id(),
|
|
|
0);
|
|
|
|
|
|
- slapi_pblock_set(search_pb, SLAPI_TXN, txn);
|
|
|
rc = slapi_search_internal_callback_pb(search_pb,
|
|
|
- &cb_data,
|
|
|
+ config,
|
|
|
0, memberof_fix_memberof_callback,
|
|
|
0);
|
|
|
|
|
|
@@ -2407,13 +2377,12 @@ int memberof_fix_memberof_callback(Slapi_Entry *e, void *callback_data)
|
|
|
int rc = 0;
|
|
|
char *dn = slapi_entry_get_dn(e);
|
|
|
Slapi_DN *sdn = slapi_entry_get_sdn(e);
|
|
|
- struct fix_memberof_callback_data *cb_data = (struct fix_memberof_callback_data *)callback_data;
|
|
|
- MemberOfConfig *config = cb_data->config;
|
|
|
- memberof_del_dn_data del_data = {0, config->memberof_attr, cb_data->txn};
|
|
|
+ MemberOfConfig *config = (MemberOfConfig *)callback_data;
|
|
|
+ memberof_del_dn_data del_data = {0, config->memberof_attr};
|
|
|
Slapi_ValueSet *groups = 0;
|
|
|
|
|
|
/* get a list of all of the groups this user belongs to */
|
|
|
- groups = memberof_get_groups(config, dn, cb_data->txn);
|
|
|
+ groups = memberof_get_groups(config, dn);
|
|
|
|
|
|
/* If we found some groups, replace the existing memberOf attribute
|
|
|
* with the found values. */
|
|
|
@@ -2446,7 +2415,6 @@ int memberof_fix_memberof_callback(Slapi_Entry *e, void *callback_data)
|
|
|
mod_pb, sdn, mods, 0, 0,
|
|
|
memberof_get_plugin_id(), 0);
|
|
|
|
|
|
- slapi_pblock_set(mod_pb, SLAPI_TXN, cb_data->txn);
|
|
|
slapi_modify_internal_pb(mod_pb);
|
|
|
|
|
|
slapi_pblock_get(mod_pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
|