]> jfr.im git - irc/atheme/atheme.git/commitdiff
groupserv: make groupserv core entity-agnostic (ref #302)
authorWilliam Pitcock <redacted>
Fri, 8 Aug 2014 20:05:19 +0000 (15:05 -0500)
committerWilliam Pitcock <redacted>
Fri, 8 Aug 2014 20:05:19 +0000 (15:05 -0500)
modules/groupserv/fflags.c
modules/groupserv/flags.c
modules/groupserv/groupserv.h
modules/groupserv/invite.c
modules/groupserv/join.c
modules/groupserv/main/database.c
modules/groupserv/main/groupserv.c
modules/groupserv/main/groupserv_main.h
modules/groupserv/main/hooks.c
modules/groupserv/main/validation.c
modules/groupserv/register.c

index e1d11ddce4a51e821804bf04896bd16c9e3527c6..e4d3a2d5e236d770f38234acf04a4b6fe183027c 100644 (file)
@@ -53,13 +53,13 @@ static void gs_cmd_fflags(sourceinfo_t *si, int parc, char *parv[])
                return;
        }
 
-       ga = groupacs_find(mg, mu, 0);
+       ga = groupacs_find(mg, entity(mu), 0);
        if (ga != NULL)
                flags = ga->flags;
 
        flags = gs_flags_parser(parv[2], 1, flags);
 
-       if (!(flags & GA_FOUNDER) && groupacs_find(mg, mu, GA_FOUNDER))
+       if (!(flags & GA_FOUNDER) && groupacs_find(mg, entity(mu), GA_FOUNDER))
        {
                if (mygroup_count_flag(mg, GA_FOUNDER) == 1)
                {
@@ -78,7 +78,7 @@ static void gs_cmd_fflags(sourceinfo_t *si, int parc, char *parv[])
                ga->flags = flags;
        else if (ga != NULL)
        {
-               groupacs_delete(mg, mu);
+               groupacs_delete(mg, entity(mu));
                command_success_nodata(si, _("\2%s\2 has been removed from \2%s\2."), entity(mu)->name, entity(mg)->name);
                wallops("\2%s\2 is removing flags for \2%s\2 on \2%s\2", get_oper_name(si), entity(mu)->name, entity(mg)->name);
                logcommand(si, CMDLOG_ADMIN, "FFLAGS:REMOVE: \2%s\2 on \2%s\2", entity(mu)->name, entity(mg)->name);
@@ -91,7 +91,7 @@ static void gs_cmd_fflags(sourceinfo_t *si, int parc, char *parv[])
                        command_fail(si, fault_toomany, _("Group %s access list is full."), entity(mg)->name);
                        return;
                }
-               ga = groupacs_add(mg, mu, flags);
+               ga = groupacs_add(mg, entity(mu), flags);
        }
 
        MOWGLI_ITER_FOREACH(n, entity(mg)->chanacs.head)
index ca1f14b515f77eb60e783af5d62f9b7ba5371914..31020f0e5f2b01bbee5bc430459b8c0046731693 100644 (file)
@@ -103,13 +103,13 @@ static void gs_cmd_flags(sourceinfo_t *si, int parc, char *parv[])
                return;
        }
 
-       if ((MU_NEVERGROUP & mu->flags) && (groupacs_find(mg, mu, 0) == NULL))
+       if ((MU_NEVERGROUP & mu->flags) && (groupacs_find(mg, entity(mu), 0) == 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, mu, 0);
+       ga = groupacs_find(mg, entity(mu), 0);
        if (ga != NULL)
                flags = ga->flags;
 
@@ -142,7 +142,7 @@ static void gs_cmd_flags(sourceinfo_t *si, int parc, char *parv[])
                return;
        }
 
-       if (!(flags & GA_FOUNDER) && groupacs_find(mg, mu, GA_FOUNDER))
+       if (!(flags & GA_FOUNDER) && groupacs_find(mg, entity(mu), GA_FOUNDER))
        {
                if (mygroup_count_flag(mg, GA_FOUNDER) == 1)
                {
@@ -162,7 +162,7 @@ no_founder:
                ga->flags = flags;
        else if (ga != NULL)
        {
-               groupacs_delete(mg, mu);
+               groupacs_delete(mg, entity(mu));
                command_success_nodata(si, _("\2%s\2 has been removed from \2%s\2."), entity(mu)->name, entity(mg)->name);
                logcommand(si, CMDLOG_SET, "FLAGS:REMOVE: \2%s\2 on \2%s\2", entity(mu)->name, entity(mg)->name);
                return;
@@ -174,7 +174,7 @@ no_founder:
                        command_fail(si, fault_toomany, _("Group %s access list is full."), entity(mg)->name);
                        return;
                }
-               ga = groupacs_add(mg, mu, flags);
+               ga = groupacs_add(mg, entity(mu), flags);
        }
 
        MOWGLI_ITER_FOREACH(n, entity(mg)->chanacs.head)
index 7600d058284f88f04c6122e0af1d11b8c67be438..3de72aca5b867046717d3c6c31a00f50a5a7c4fa 100644 (file)
@@ -18,9 +18,10 @@ mygroup_t * (*mygroup_rename)(mygroup_t *mg, const char *name);
 unsigned int (*mygroup_count_flag)(mygroup_t *mg, unsigned int flag);
 unsigned int (*myentity_count_group_flag)(myentity_t *mu, unsigned int flagset);
 
-groupacs_t * (*groupacs_add)(mygroup_t *mg, myuser_t *mu, unsigned int flags);
-groupacs_t * (*groupacs_find)(mygroup_t *mg, myuser_t *mu, unsigned int flags);
-void (*groupacs_delete)(mygroup_t *mg, myuser_t *mu);
+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);
+void (*groupacs_delete)(mygroup_t *mg, myentity_t *mt);
+
 bool (*groupacs_sourceinfo_has_flag)(mygroup_t *mg, sourceinfo_t *si, unsigned int flag);
 unsigned int (*groupacs_sourceinfo_flags)(mygroup_t *mg, sourceinfo_t *si);
 unsigned int (*gs_flags_parser)(char *flagstring, int allow_minus, unsigned int flags);
index 4bf3b05008d893e720fcc468dbfcf53156dbaf01..d78ba6122f7b2d4cb1aa4bd735f1e86620d72a0b 100644 (file)
@@ -59,7 +59,7 @@ static void gs_cmd_invite(sourceinfo_t *si, int parc, char *parv[])
                return;
        }
 
-       if ((ga = groupacs_find(mg, mu, 0)) != NULL)
+       if ((ga = groupacs_find(mg, entity(mu), 0)) != NULL)
        {
                command_fail(si, fault_badparams, _("\2%s\2 is already a member of \2%s\2."), user, group);
                return;
index bed8d8b0af1318b097444a3e605111ebae5095d2..e2b92a8097bd3877436daa204cdf86174e0842cc 100644 (file)
@@ -78,7 +78,7 @@ static void gs_cmd_join(sourceinfo_t *si, int parc, char *parv[])
        else
                flags = gs_flags_parser(gs_config->join_flags, 0, flags);
 
-       ga = groupacs_add(mg, si->smu, flags);
+       ga = groupacs_add(mg, entity(si->smu), flags);
 
        if (invited)
                metadata_delete(si->smu, "private:groupinvite");
index 9f8512204c04a379cbfb24a2d463350145331825..cb3e418b61f3770308eef109d0c7d647eeb6e916 100644 (file)
@@ -109,15 +109,15 @@ static void db_h_grp(database_handle_t *db, const char *type)
 static void db_h_gacl(database_handle_t *db, const char *type)
 {
        mygroup_t *mg;
-       myuser_t *mu;
+       myentity_t *mt;
        unsigned int flags = GA_ALL;    /* GDBV 1 entires had full access */
 
        const char *name = db_sread_word(db);
-       const char *user = db_sread_word(db);
+       const char *entity = db_sread_word(db);
        const char *flagset;
 
        mg = mygroup_find(name);
-       mu = myuser_find(user);
+       mt = myentity_find(entity);
 
        if (mg == NULL)
        {
@@ -125,9 +125,9 @@ static void db_h_gacl(database_handle_t *db, const char *type)
                return;
        }
 
-       if (mu == NULL)
+       if (mt == NULL)
        {
-               slog(LG_INFO, "db-h-gacl: line %d: groupacs for nonexistent user %s", db->line, user);
+               slog(LG_INFO, "db-h-gacl: line %d: groupacs for nonexistent entity %s", db->line, entity);
                return;
        }
 
@@ -139,7 +139,7 @@ static void db_h_gacl(database_handle_t *db, const char *type)
                        slog(LG_INFO, "db-h-gacl: line %d: confused by flags: %s", db->line, flagset);
        }
 
-       groupacs_add(mg, mu, flags);
+       groupacs_add(mg, mt, flags);
 }
 
 static void db_h_mdg(database_handle_t *db, const char *type)
index 92ef271ee6209c3fb23b926ce1bc194285237a73..819ec4fb618b1dbbb1b1dbe2da74fef4c91aca31 100644 (file)
@@ -114,32 +114,32 @@ static void groupacs_des(groupacs_t *ga)
        mowgli_heap_free(groupacs_heap, ga);
 }
 
-groupacs_t *groupacs_add(mygroup_t *mg, myuser_t *mu, unsigned int flags)
+groupacs_t *groupacs_add(mygroup_t *mg, myentity_t *mt, unsigned int flags)
 {
        groupacs_t *ga;
 
        return_val_if_fail(mg != NULL, NULL);
-       return_val_if_fail(mu != NULL, NULL);
+       return_val_if_fail(mt != NULL, NULL);
 
        ga = mowgli_heap_alloc(groupacs_heap);
        object_init(object(ga), NULL, (destructor_t) groupacs_des);
 
        ga->mg = mg;
-       ga->mt = entity(mu);
+       ga->mt = mt;
        ga->flags = flags;
 
        mowgli_node_add(ga, &ga->gnode, &mg->acs);
-       mowgli_node_add(ga, &ga->unode, myentity_get_membership_list(entity(mu)));
+       mowgli_node_add(ga, &ga->unode, myentity_get_membership_list(mt));
 
        return ga;
 }
 
-groupacs_t *groupacs_find(mygroup_t *mg, myuser_t *mu, unsigned int flags)
+groupacs_t *groupacs_find(mygroup_t *mg, myentity_t *mt, unsigned int flags)
 {
        mowgli_node_t *n;
 
        return_val_if_fail(mg != NULL, NULL);
-       return_val_if_fail(mu != NULL, NULL);
+       return_val_if_fail(mt != NULL, NULL);
 
        MOWGLI_ITER_FOREACH(n, mg->acs.head)
        {
@@ -147,39 +147,39 @@ groupacs_t *groupacs_find(mygroup_t *mg, myuser_t *mu, unsigned int flags)
 
                if (flags)
                {
-                       if (ga->mt == entity(mu) && ga->mg == mg && (ga->flags & flags))
+                       if (ga->mt == mt && ga->mg == mg && (ga->flags & flags))
                                return ga;
                }
-               else if (ga->mt == entity(mu) && ga->mg == mg)
+               else if (ga->mt == mt && ga->mg == mg)
                        return ga;
        }
 
        return NULL;
 }
 
-void groupacs_delete(mygroup_t *mg, myuser_t *mu)
+void groupacs_delete(mygroup_t *mg, myentity_t *mt)
 {
        groupacs_t *ga;
 
-       ga = groupacs_find(mg, mu, 0);
+       ga = groupacs_find(mg, mt, 0);
        if (ga != NULL)
        {
                mowgli_node_delete(&ga->gnode, &mg->acs);
-               mowgli_node_delete(&ga->unode, myentity_get_membership_list(entity(mu)));
+               mowgli_node_delete(&ga->unode, myentity_get_membership_list(mt));
                object_unref(ga);
        }
 }
 
 bool groupacs_sourceinfo_has_flag(mygroup_t *mg, sourceinfo_t *si, unsigned int flag)
 {
-       return groupacs_find(mg, si->smu, flag) != NULL;
+       return groupacs_find(mg, entity(si->smu), flag) != NULL;
 }
 
 unsigned int groupacs_sourceinfo_flags(mygroup_t *mg, sourceinfo_t *si)
 {
        groupacs_t *ga;
 
-       ga = groupacs_find(mg, si->smu, 0);
+       ga = groupacs_find(mg, entity(si->smu), 0);
        if (ga == NULL)
                return 0;
 
index da5514a87e152c653864d047d6793ddc57b0c7bc..2b385554824cb8b265ea9a85719046e13402b5f8 100644 (file)
@@ -16,9 +16,10 @@ E mygroup_t *mygroup_add(const char *name);
 E mygroup_t *mygroup_add_id(const char *id, const char *name);
 E mygroup_t *mygroup_find(const char *name);
 
-E groupacs_t *groupacs_add(mygroup_t *mg, myuser_t *mu, unsigned int flags);
-E groupacs_t *groupacs_find(mygroup_t *mg, myuser_t *mu, unsigned int flags);
-E void groupacs_delete(mygroup_t *mg, myuser_t *mu);
+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 void groupacs_delete(mygroup_t *mg, myentity_t *mt);
+
 E bool groupacs_sourceinfo_has_flag(mygroup_t *mg, sourceinfo_t *si, unsigned int flag);
 
 E void gs_db_init(void);
index c192ae836f53e01858f5f92c28dd58898950253a..77a0f7b00896c341e382d784b05a7045a7768426 100644 (file)
@@ -122,7 +122,7 @@ static void user_info_hook(hook_user_req_t *req)
        {
                groupacs_t *ga = n->data;
 
-               if (groupacs_find(ga->mg, req->mu, GA_BAN) != NULL)
+               if (ga->flags & GA_BAN)
                        continue;
 
                if ((ga->mg->flags & MG_PUBLIC) || (req->si->smu == req->mu || has_priv(req->si, PRIV_GROUP_AUSPEX)))
@@ -175,7 +175,7 @@ static void myuser_delete_hook(myuser_t *mu)
        {
                groupacs_t *ga = n->data;
 
-               groupacs_delete(ga->mg, user(ga->mt));
+               groupacs_delete(ga->mg, ga->mt);
        }
 
        mowgli_list_free(l);
index 3f8d1354e1139ec908cee3c3ad65f8c54b82e99c..7a7924e1de6a59d7d5673f667c0cdbb151d1a755 100644 (file)
@@ -15,7 +15,7 @@ static chanacs_t *mygroup_chanacs_match_entity(chanacs_t *ca, myentity_t *mt)
        if (!isuser(mt))
                return NULL;
 
-       return groupacs_find(mg, user(mt), GA_CHANACS) != NULL ? ca : NULL;
+       return groupacs_find(mg, mt, GA_CHANACS) != NULL ? ca : NULL;
 }
 
 static bool mygroup_can_register_channel(myentity_t *mt)
index 8598f9a5df6c060cbf6ba1ad206b163cd6a12498..e03fabfc01d6f1cf67bb54e4f095b60e91cb1c76 100644 (file)
@@ -64,7 +64,7 @@ static void gs_cmd_register(sourceinfo_t *si, int parc, char *parv[])
         }
 
        mg = mygroup_add(parv[0]);
-       groupacs_add(mg, si->smu, GA_ALL | GA_FOUNDER);
+       groupacs_add(mg, entity(si->smu), GA_ALL | GA_FOUNDER);
 
        logcommand(si, CMDLOG_REGISTER, "REGISTER: \2%s\2", entity(mg)->name);
        command_success_nodata(si, _("The group \2%s\2 has been registered to \2%s\2."), entity(mg)->name, entity(si->smu)->name);