return;
}
- ga = groupacs_find(mg, mt, 0);
+ ga = groupacs_find(mg, mt, 0, false);
if (ga != NULL)
flags = ga->flags;
flags = gs_flags_parser(parv[2], 1, flags);
- if (!(flags & GA_FOUNDER) && groupacs_find(mg, mt, GA_FOUNDER))
+ if (!(flags & GA_FOUNDER) && groupacs_find(mg, mt, GA_FOUNDER, false))
{
if (mygroup_count_flag(mg, GA_FOUNDER) == 1)
{
return;
}
- if (isuser(mt) && (MU_NEVERGROUP & user(mt)->flags) && (groupacs_find(mg, mt, 0) == NULL))
+ if (isuser(mt) && (MU_NEVERGROUP & user(mt)->flags) && (groupacs_find(mg, mt, 0, true) == NULL))
{
command_fail(si, fault_noprivs, _("\2%s\2 does not wish to have flags in any groups."), parv[1]);
return;
}
- ga = groupacs_find(mg, mt, 0);
+ ga = groupacs_find(mg, mt, 0, false);
if (ga != NULL)
flags = ga->flags;
return;
}
- if (!(flags & GA_FOUNDER) && groupacs_find(mg, mt, GA_FOUNDER))
+ if (!(flags & GA_FOUNDER) && groupacs_find(mg, mt, GA_FOUNDER, false))
{
if (mygroup_count_flag(mg, GA_FOUNDER) == 1)
{
unsigned int (*myentity_count_group_flag)(myentity_t *mu, unsigned int flagset);
groupacs_t * (*groupacs_add)(mygroup_t *mg, myentity_t *mt, unsigned int flags);
-groupacs_t * (*groupacs_find)(mygroup_t *mg, myentity_t *mt, unsigned int flags);
+groupacs_t * (*groupacs_find)(mygroup_t *mg, myentity_t *mt, unsigned int flags, bool allow_recurse);
void (*groupacs_delete)(mygroup_t *mg, myentity_t *mt);
bool (*groupacs_sourceinfo_has_flag)(mygroup_t *mg, sourceinfo_t *si, unsigned int flag);
return;
}
- if ((ga = groupacs_find(mg, entity(mu), 0)) != NULL)
+ if ((ga = groupacs_find(mg, entity(mu), 0, false)) != NULL)
{
command_fail(si, fault_badparams, _("\2%s\2 is already a member of \2%s\2."), user, group);
return;
return ga;
}
-groupacs_t *groupacs_find(mygroup_t *mg, myentity_t *mt, unsigned int flags)
+groupacs_t *groupacs_find(mygroup_t *mg, myentity_t *mt, unsigned int flags, bool allow_recurse)
{
- static bool recursing = false;
mowgli_node_t *n;
return_val_if_fail(mg != NULL, NULL);
{
groupacs_t *ga = n->data;
- if (!recursing && isgroup(ga->mt))
+ if (isgroup(ga->mt) && allow_recurse)
{
groupacs_t *ga2;
- recursing = true;
- ga2 = groupacs_find(group(ga->mt), mt, flags);
- recursing = false;
+ ga2 = groupacs_find(group(ga->mt), mt, flags, false);
if (ga2 != NULL)
return ga;
{
groupacs_t *ga;
- ga = groupacs_find(mg, mt, 0);
+ ga = groupacs_find(mg, mt, 0, false);
if (ga != NULL)
{
mowgli_node_delete(&ga->gnode, &mg->acs);
bool groupacs_sourceinfo_has_flag(mygroup_t *mg, sourceinfo_t *si, unsigned int flag)
{
- return groupacs_find(mg, entity(si->smu), flag) != NULL;
+ return groupacs_find(mg, entity(si->smu), flag, true) != NULL;
}
unsigned int groupacs_sourceinfo_flags(mygroup_t *mg, sourceinfo_t *si)
{
groupacs_t *ga;
- ga = groupacs_find(mg, entity(si->smu), 0);
+ ga = groupacs_find(mg, entity(si->smu), 0, true);
if (ga == NULL)
return 0;
E mygroup_t *mygroup_find(const char *name);
E groupacs_t *groupacs_add(mygroup_t *mg, myentity_t *mt, unsigned int flags);
-E groupacs_t *groupacs_find(mygroup_t *mg, myentity_t *mt, unsigned int flags);
+E groupacs_t *groupacs_find(mygroup_t *mg, myentity_t *mt, unsigned int flags, bool allow_recurse);
E void groupacs_delete(mygroup_t *mg, myentity_t *mt);
E bool groupacs_sourceinfo_has_flag(mygroup_t *mg, sourceinfo_t *si, unsigned int flag);
if (!isuser(mt))
return NULL;
- return groupacs_find(mg, mt, GA_CHANACS) != NULL ? ca : NULL;
+ return groupacs_find(mg, mt, GA_CHANACS, true) != NULL ? ca : NULL;
}
static bool mygroup_can_register_channel(myentity_t *mt)