summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chanserv.c5
-rw-r--r--src/core/cs_modes.c67
-rw-r--r--src/modules.c19
-rw-r--r--src/protocol/inspircd11.c1
-rw-r--r--src/protocol/inspircd12.cpp1
-rw-r--r--src/protocol/unreal32.c1
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> &params)
{
- 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> &params)
{
- 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);