diff options
author | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-28 00:49:37 +0000 |
---|---|---|
committer | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-28 00:49:37 +0000 |
commit | bd7f4f8c4995ddc81d5c5ab9cb32ed05048908c2 (patch) | |
tree | 3638f54db859023ca2a9cfbf8983b7b07527005e /src | |
parent | 090107db5f2afa16e155f56d7928e38d0a17a295 (diff) |
Patch from Adam, reducing duplication in cs_modes. Untested.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2135 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/chanserv.c | 5 | ||||
-rw-r--r-- | src/core/cs_modes.c | 67 | ||||
-rw-r--r-- | src/modules.c | 19 | ||||
-rw-r--r-- | src/protocol/inspircd11.c | 1 | ||||
-rw-r--r-- | src/protocol/inspircd12.cpp | 1 | ||||
-rw-r--r-- | src/protocol/unreal32.c | 1 |
6 files changed, 29 insertions, 65 deletions
diff --git a/src/chanserv.c b/src/chanserv.c index b8442051a..0c950d1ee 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -111,8 +111,11 @@ CSModeUtil csmodeutils[] = { { "VOICE", "voice", "+v", 0, CA_VOICE, CA_VOICEME }, { "DEHALFOP", "dehalfop", "-h", 0, CA_HALFOP, CA_HALFOPME }, { "HALFOP", "halfop", "+h", 0, CA_HALFOP, CA_HALFOPME }, + /* These get set later */ { "DEPROTECT", "", "", 0, CA_PROTECT, CA_PROTECTME }, { "PROTECT", "", "", 0, CA_PROTECT, CA_PROTECTME }, + { "DEOWNER", "", "", 0, ACCESS_FOUNDER, ACCESS_FOUNDER}, + { "OWNER", "", "", 0, ACCESS_FOUNDER, ACCESS_FOUNDER}, { NULL } }; @@ -1576,6 +1579,8 @@ int check_access(User * user, ChannelInfo * ci, int what) if (level > 0) ci->last_used = time(NULL); + if (what == ACCESS_FOUNDER) + return is_founder(user, ci); if (level >= ACCESS_FOUNDER) return (what == CA_AUTODEOP || what == CA_NOJOIN) ? 0 : 1; /* Hacks to make flags work */ diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c index 445f1dc9e..e0a7f3111 100644 --- a/src/core/cs_modes.c +++ b/src/core/cs_modes.c @@ -296,39 +296,7 @@ class CommandCSOwner : public Command CommandReturn Execute(User *u, std::vector<std::string> ¶ms) { - const char *av[2]; - const char *chan = params[0].c_str(); - const char *nick = params.size() > 1 ? params[1].c_str() : NULL; - User *u2; - Channel *c; - ChannelInfo *ci; - - if (!ircd->owner) - { - return MOD_CONT; - } - - if (!(c = findchan(chan))) { - notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan); - } else if (!(ci = c->ci)) { - notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name); - } else if (ci->flags & CI_FORBIDDEN) { - notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name); - } else if (!(u2 = finduser(nick))) { - notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick); - } else if (!is_on_chan(c, u2)) { - notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name); - } else if (!is_founder(u, ci)) { - notice_lang(s_ChanServ, u, ACCESS_DENIED); - } else { - ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerset, - u2->nick); - - av[0] = ircd->ownerset; - av[1] = u2->nick; - chan_set_modes(s_ChanServ, c, 2, av, 1); - } - return MOD_CONT; + return do_util(u, &csmodeutils[MUT_OWNER], (params.size() > 0 ? params[0].c_str() : NULL), NULL); } bool OnHelp(User *u, const std::string &subcommand) @@ -350,38 +318,7 @@ class CommandCSDeOwner : public Command CommandReturn Execute(User *u, std::vector<std::string> ¶ms) { - const char *av[2]; - const char *chan = params[0].c_str(); - const char *nick = params.size() > 1 ? params[1].c_str() : NULL; - User *u2; - - Channel *c; - ChannelInfo *ci; - - if (!ircd->owner) { - return MOD_CONT; - } - - if (!(c = findchan(chan))) { - notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan); - } else if (!(ci = c->ci)) { - notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name); - } else if (ci->flags & CI_FORBIDDEN) { - notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name); - } else if (!(u2 = finduser(nick))) { - notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick); - } else if (!is_on_chan(c, u2)) { - notice_lang(s_ChanServ, u, NICK_X_NOT_ON_CHAN, u2->nick, c->name); - } else if (!is_founder(u, ci)) { - notice_lang(s_ChanServ, u, ACCESS_DENIED); - } else { - ircdproto->SendMode(whosends(ci), c->name, "%s %s", ircd->ownerunset, u2->nick); - - av[0] = ircd->ownerunset; - av[1] = u2->nick; - chan_set_modes(s_ChanServ, c, 2, av, 1); - } - return MOD_CONT; + return do_util(u, &csmodeutils[MUT_DEOWNER], (params.size() > 0 ? params[0].c_str() : NULL), NULL); } bool OnHelp(User *u, const std::string &subcommand) diff --git a/src/modules.c b/src/modules.c index caf25fa04..bb0cfeca7 100644 --- a/src/modules.c +++ b/src/modules.c @@ -1035,6 +1035,25 @@ void updateProtectDetails(const char *level_info_protect_word, } } +void updateOwnerDetails(const char *fant_owner_add, const char *fant_owner_del, const char *owner_set_mode, const char *owner_del_mode) +{ + CSModeUtil ptr; + int i = 0; + + ptr = csmodeutils[i]; + while (ptr.name) { + if (!strcmp(ptr.name, "OWNER")) { + csmodeutils[i].bsname = sstrdup(fant_owner_add); + csmodeutils[i].mode = sstrdup(owner_set_mode); + } + else if (!strcmp(ptr.name, "DEOWNER")) { + csmodeutils[i].bsname = sstrdup(fant_owner_del); + csmodeutils[i].mode = sstrdup(owner_del_mode); + } + ptr = csmodeutils[++i]; + } +} + void Module::NoticeLang(char *source, User * u, int number, ...) { va_list va; diff --git a/src/protocol/inspircd11.c b/src/protocol/inspircd11.c index 187dbcddf..5748f62a1 100644 --- a/src/protocol/inspircd11.c +++ b/src/protocol/inspircd11.c @@ -1276,6 +1276,7 @@ void moduleAddIRCDMsgs() { Message *m; updateProtectDetails("PROTECT","PROTECTME","protect","deprotect","AUTOPROTECT","+a","-a"); + updateOwnerDetails("OWNER", "DEOWNER", ircd->ownerset, ircd->ownerunset); m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m); m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m); diff --git a/src/protocol/inspircd12.cpp b/src/protocol/inspircd12.cpp index d5373105e..f47810c20 100644 --- a/src/protocol/inspircd12.cpp +++ b/src/protocol/inspircd12.cpp @@ -1331,6 +1331,7 @@ void moduleAddIRCDMsgs() { Message *m; updateProtectDetails("PROTECT","PROTECTME","protect","deprotect","AUTOPROTECT","+a","-a"); + updateOwnerDetails("OWNER", "DEOWNER", ircd->ownerset, ircd->ownerunset); m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m); m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m); diff --git a/src/protocol/unreal32.c b/src/protocol/unreal32.c index 23789ff3f..b00b89379 100644 --- a/src/protocol/unreal32.c +++ b/src/protocol/unreal32.c @@ -1342,6 +1342,7 @@ void moduleAddIRCDMsgs() { Message *m; updateProtectDetails("PROTECT","PROTECTME","protect","deprotect","AUTOPROTECT","+a","-a"); + updateOwnerDetails("OWNER", "DEOWNER", ircd->ownerset, ircd->ownerunset); m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m); m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m); |