summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-06-11 10:16:35 +0000
committerrburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>2009-06-11 10:16:35 +0000
commit8fa67528583b83a23030d5d358e070586672cc87 (patch)
treefc2f1a81de12c8a1f8bb73148b102b0a5461111a /src
parenta68b5efe279cafc3b2d81b335871091813c940d2 (diff)
Cleanup of internals of new opertype stuff by Adam. Removes OS OPER and OS ADMIN, changes OS STAFF to be more helpful in their place.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2319 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r--src/config.c38
-rw-r--r--src/core/ns_group.c35
-rw-r--r--src/core/ns_register.c31
-rw-r--r--src/core/os_admin.c270
-rw-r--r--src/core/os_oper.c273
-rw-r--r--src/core/os_staff.c75
-rw-r--r--src/messages.c18
-rw-r--r--src/modules/hs_request.c15
-rw-r--r--src/nickserv.c14
-rw-r--r--src/operserv.c73
10 files changed, 53 insertions, 789 deletions
diff --git a/src/config.c b/src/config.c
index fe04e019c..cc3dfec17 100644
--- a/src/config.c
+++ b/src/config.c
@@ -151,9 +151,6 @@ bool AnonymousGlobal;
bool RestrictOperNicks;
char *GlobalOnCycleMessage;
char *GlobalOnCycleUP;
-static char *ServicesRoot;
-char **ServicesRoots;
-int RootNumber;
bool SuperAdmin;
bool LogBot;
bool LogMaxUsers;
@@ -896,7 +893,6 @@ int ServerConfig::Read(bool bail)
{"operserv", "newsdatabase", "news.db", new ValueContainerChar(&NewsDBName), DT_CHARPTR, ValidateNotEmpty},
{"operserv", "exceptiondatabase", "exception.db", new ValueContainerChar(&ExceptionDBName), DT_CHARPTR, ValidateNotEmpty},
{"operserv", "modules", "", new ValueContainerChar(&OperCoreModules), DT_CHARPTR, NoValidation},
- {"operserv", "servicesroot", "", new ValueContainerChar(&ServicesRoot), DT_CHARPTR, ValidateNotEmpty},
{"operserv", "superadmin", "no", new ValueContainerBool(&SuperAdmin), DT_BOOLEAN, NoValidation},
{"operserv", "logmaxusers", "no", new ValueContainerBool(&LogMaxUsers), DT_BOOLEAN, NoValidation},
{"operserv", "autokillexpiry", "0", new ValueContainerTime(&AutokillExpiry), DT_TIME, ValidateNotZero},
@@ -1617,7 +1613,20 @@ int read_config(int reload)
int retval = 1;
char *s;
int defconCount = 0;
+ std::list<std::pair<std::string, std::string> >::iterator it;
+ NickCore *nc;
+ std::string nick;
+
+ /* Clear current opers for reload */
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
+ {
+ nick = it->first;
+ if ((nc = findcore(nick.c_str())))
+ nc->ot = NULL;
+ }
+ svsopers_in_config.clear();
+
retval = serverConfig.Read(reload ? false : true);
if (!retval) return 0; // Temporary until most of the below is modified to use the new parser -- CyberBotX
@@ -1747,27 +1756,6 @@ int read_config(int reload)
}
}
- /* Services Root building */
-
- if (ServicesRoot && !reload) { /* Check to prevent segmentation fault if it's missing */
- RootNumber = 0;
-
- s = strtok(ServicesRoot, " ");
- do {
- if (s) {
- RootNumber++;
- ServicesRoots =
- static_cast<char **>(realloc(ServicesRoots, sizeof(char *) * RootNumber));
- ServicesRoots[RootNumber - 1] = sstrdup(s);
- }
- } while ((s = strtok(NULL, " ")));
- }
-
- if (!RootNumber) {
- error(0, "No ServicesRoot defined");
- retval = 0;
- }
-
/* Ulines */
if (UlineServers) {
diff --git a/src/core/ns_group.c b/src/core/ns_group.c
index 11030ffcf..e19a12f8e 100644
--- a/src/core/ns_group.c
+++ b/src/core/ns_group.c
@@ -35,6 +35,7 @@ class CommandNSGroup : public Command
char tsbuf[16];
char modes[512];
int len;
+ std::list<std::pair<std::string, std::string> >::iterator it;
if (NSEmailReg && findrequestnick(u->nick))
{
@@ -61,25 +62,11 @@ class CommandNSGroup : public Command
if (RestrictOperNicks)
{
- for (i = 0; i < RootNumber; ++i)
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
{
- if (stristr(u->nick, ServicesRoots[i]) && !is_oper(u))
- {
- notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
- return MOD_CONT;
- }
- }
- for (i = 0; i < servadmins.count && (nc = static_cast<NickCore *>(servadmins.list[i])); ++i)
- {
- if (stristr(u->nick, nc->display) && !is_oper(u))
- {
- notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
- return MOD_CONT;
- }
- }
- for (i = 0; i < servopers.count && (nc = static_cast<NickCore *>(servopers.list[i])); ++i)
- {
- if (stristr(u->nick, nc->display) && !is_oper(u))
+ const std::string nick = it->first;
+
+ if (stristr(u->nick, const_cast<char *>(it->first.c_str())) && !is_oper(u))
{
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
return MOD_CONT;
@@ -141,18 +128,6 @@ class CommandNSGroup : public Command
na->time_registered = na->last_seen = time(NULL);
na->status = static_cast<int16>(NS_IDENTIFIED | NS_RECOGNIZED);
- if (!(na->nc->flags & NI_SERVICES_ROOT))
- {
- for (i = 0; i < RootNumber; ++i)
- {
- if (!stricmp(ServicesRoots[i], u->nick))
- {
- na->nc->flags |= NI_SERVICES_ROOT;
- break;
- }
- }
- }
-
u->nc = na->nc;
FOREACH_MOD(I_OnNickGroup, OnNickGroup(u, target));
diff --git a/src/core/ns_register.c b/src/core/ns_register.c
index 26d6046e7..5e7088a93 100644
--- a/src/core/ns_register.c
+++ b/src/core/ns_register.c
@@ -44,14 +44,6 @@ class CommandNSConfirm : public Command
na->status = static_cast<int16>(NS_IDENTIFIED | NS_RECOGNIZED);
na->nc->flags |= NSDefFlags;
- for (i = 0; i < RootNumber; ++i)
- {
- if (!stricmp(ServicesRoots[i], nr->nick))
- {
- na->nc->flags |= NI_SERVICES_ROOT;
- break;
- }
- }
na->nc->memos.memomax = MSMaxMemos;
@@ -225,6 +217,7 @@ class CommandNSRegister : public CommandNSConfirm
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};
+ std::list<std::pair<std::string, std::string> >::iterator it;
if (readonly)
{
@@ -269,25 +262,11 @@ class CommandNSRegister : public CommandNSConfirm
if (RestrictOperNicks)
{
- for (i = 0; i < RootNumber; ++i)
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
{
- if (stristr(u->nick, ServicesRoots[i]) && !is_oper(u))
- {
- notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
- return MOD_CONT;
- }
- }
- for (i = 0; i < servadmins.count && (nc = static_cast<NickCore *>(servadmins.list[i])); ++i)
- {
- if (stristr(u->nick, nc->display) && !is_oper(u))
- {
- notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
- return MOD_CONT;
- }
- }
- for (i = 0; i < servopers.count && (nc = static_cast<NickCore *>(servopers.list[i])); ++i)
- {
- if (stristr(u->nick, nc->display) && !is_oper(u))
+ const std::string nick = it->first;
+
+ if (stristr(u->nick, const_cast<char *>(it->first.c_str())) && !is_oper(u))
{
notice_lang(s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick);
return MOD_CONT;
diff --git a/src/core/os_admin.c b/src/core/os_admin.c
deleted file mode 100644
index 86b97520e..000000000
--- a/src/core/os_admin.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* OperServ core functions
- *
- * (C) 2003-2009 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- * $Id$
- *
- */
-/*************************************************************************/
-
-#include "module.h"
-
-int admin_list_callback(SList *slist, int number, void *item, va_list args);
-int admin_list(int number, NickCore *nc, User *u, int *sent_header);
-
-class CommandOSAdmin : public Command
-{
- private:
- CommandReturn DoAdd(User *u, std::vector<std::string> &params)
- {
- NickAlias *na;
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- int res = 0;
-
- if (!nick)
- {
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- if (!(na = findnick(nick)))
- {
- notice_lang(s_OperServ, u, NICK_X_NOT_REGISTERED, nick);
- return MOD_CONT;
- }
-
- if (na->status & NS_FORBIDDEN)
- {
- notice_lang(s_OperServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
-
- if (na->nc->flags & NI_SERVICES_ADMIN || slist_indexof(&servadmins, na->nc) != -1)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_EXISTS, nick);
- return MOD_CONT;
- }
-
- res = slist_add(&servadmins, na->nc);
- if (res == -2)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_REACHED_LIMIT, nick);
- return MOD_CONT;
- }
- else
- {
- if (na->nc->flags & NI_SERVICES_OPER && (res = slist_indexof(&servopers, na->nc)) != -1)
- {
- slist_delete(&servopers, res);
- na->nc->flags |= NI_SERVICES_ADMIN;
- notice_lang(s_OperServ, u, OPER_ADMIN_MOVED, nick);
- }
- else
- {
- na->nc->flags |= NI_SERVICES_ADMIN;
- notice_lang(s_OperServ, u, OPER_ADMIN_ADDED, nick);
- }
- }
-
- if (readonly)
- notice_lang(s_OperServ, u, READ_ONLY_MODE);
-
- return MOD_CONT;
- }
-
- CommandReturn DoDel(User *u, std::vector<std::string> &params)
- {
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- NickAlias *na;
- int res = 0;
-
- if (!nick)
- {
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- if (!servadmins.count)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_LIST_EMPTY);
- return MOD_CONT;
- }
-
- if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick))
- {
- /* Deleting a range */
- res = slist_delete_range(&servadmins, nick, NULL);
- if (!res)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_NO_MATCH);
- return MOD_CONT;
- }
- else if (res == 1)
- notice_lang(s_OperServ, u, OPER_ADMIN_DELETED_ONE);
- else
- notice_lang(s_OperServ, u, OPER_ADMIN_DELETED_SEVERAL, res);
- }
- else
- {
- if (!(na = findnick(nick)))
- {
- notice_lang(s_OperServ, u, NICK_X_NOT_REGISTERED, nick);
- return MOD_CONT;
- }
-
- if (na->status & NS_FORBIDDEN)
- {
- notice_lang(s_OperServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
-
- if (!(na->nc->flags & NI_SERVICES_ADMIN) || (res = slist_indexof(&servadmins, na->nc)) == -1)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_NOT_FOUND, nick);
- return MOD_CONT;
- }
-
- slist_delete(&servadmins, res);
- notice_lang(s_OperServ, u, OPER_ADMIN_DELETED, nick);
- }
-
- if (readonly)
- notice_lang(s_OperServ, u, READ_ONLY_MODE);
-
- return MOD_CONT;
- }
-
- CommandReturn DoList(User *u, std::vector<std::string> &params)
- {
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- int sent_header = 0, res = 0;
-
- if (!servadmins.count)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_LIST_EMPTY);
- return MOD_CONT;
- }
-
- if (!nick || (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)))
- {
- res = slist_enum(&servadmins, nick, &admin_list_callback, u, &sent_header);
- if (!res)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_NO_MATCH);
- return MOD_CONT;
- }
- else
- notice_lang(s_OperServ, u, END_OF_ANY_LIST, "Admin");
- }
- else
- {
- int i;
-
- for (i = 0; i < servadmins.count; ++i) {
- if (!stricmp(nick, (static_cast<NickCore *>(servadmins.list[i]))->display) || Anope::Match((static_cast<NickCore *>(servadmins.list[i]))->display, nick, false))
- admin_list(i + 1, static_cast<NickCore *>(servadmins.list[i]), u, &sent_header);
- }
-
- if (!sent_header)
- notice_lang(s_OperServ, u, OPER_ADMIN_NO_MATCH);
- else
- notice_lang(s_OperServ, u, END_OF_ANY_LIST, "Admin");
- }
-
- return MOD_CONT;
- }
-
- CommandReturn DoClear(User *u, std::vector<std::string> &params)
- {
- if (!servadmins.count)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_LIST_EMPTY);
- return MOD_CONT;
- }
-
- slist_clear(&servadmins, 1);
- notice_lang(s_OperServ, u, OPER_ADMIN_CLEAR);
-
- return MOD_CONT;
- }
- public:
- CommandOSAdmin() : Command("ADMIN", 1, 2, "operserv/admin")
- {
- }
-
- CommandReturn Execute(User *u, std::vector<std::string> &params)
- {
- const char *cmd = params[0].c_str();
-
- if (!stricmp(cmd, "ADD"))
- return this->DoAdd(u, params);
- else if (!stricmp(cmd, "DEL"))
- return this->DoDel(u, params);
- else if (!stricmp(cmd, "LIST"))
- return this->DoList(u, params);
- else if (!stricmp(cmd, "CLEAR"))
- return this->DoClear(u, params);
- else
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- bool OnHelp(User *u, const std::string &subcommand)
- {
- notice_help(s_OperServ, u, OPER_HELP_ADMIN, s_NickServ);
- return true;
- }
-
- void OnSyntaxError(User *u)
- {
- syntax_error(s_OperServ, u, "ADMIN", OPER_ADMIN_SYNTAX);
- }
-};
-
-class OSAdmin : public Module
-{
- public:
- OSAdmin(const std::string &modname, const std::string &creator) : Module(modname, creator)
- {
- this->SetAuthor("Anope");
- this->SetVersion("$Id$");
- this->SetType(CORE);
-
- this->AddCommand(OPERSERV, new CommandOSAdmin(), MOD_UNIQUE);
- }
- void OperServHelp(User *u)
- {
- notice_lang(s_OperServ, u, OPER_HELP_CMD_ADMIN);
- }
-};
-
-int admin_list_callback(SList *slist, int number, void *item, va_list args)
-{
- User *u = va_arg(args, User *);
- int *sent_header = va_arg(args, int *);
-
- return admin_list(number, static_cast<NickCore *>(item), u, sent_header);
-}
-
-int admin_list(int number, NickCore *nc, User *u, int *sent_header)
-{
- if (!nc)
- return 0;
-
- if (!*sent_header)
- {
- notice_lang(s_OperServ, u, OPER_ADMIN_LIST_HEADER);
- *sent_header = 1;
- }
-
- notice_lang(s_OperServ, u, OPER_ADMIN_LIST_FORMAT, number, nc->display);
- return 1;
-}
-
-MODULE_INIT("os_admin", OSAdmin)
diff --git a/src/core/os_oper.c b/src/core/os_oper.c
deleted file mode 100644
index 88d82b1c6..000000000
--- a/src/core/os_oper.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/* OperServ core functions
- *
- * (C) 2003-2009 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- * $Id$
- *
- */
-/*************************************************************************/
-
-#include "module.h"
-
-int oper_list_callback(SList *slist, int number, void *item, va_list args);
-int oper_list(int number, NickCore *nc, User *u, int *sent_header);
-
-class CommandOSOper : public Command
-{
- private:
- CommandReturn DoAdd(User *u, std::vector<std::string> &params)
- {
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- NickAlias *na;
- int res = 0;
-
- if (!nick)
- {
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- if (!(na = findnick(nick)))
- {
- notice_lang(s_OperServ, u, NICK_X_NOT_REGISTERED, nick);
- return MOD_CONT;
- }
-
- if (na->status & NS_FORBIDDEN)
- {
- notice_lang(s_OperServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
-
- if (na->nc->flags & NI_SERVICES_OPER || slist_indexof(&servopers, na->nc) != -1)
- {
- notice_lang(s_OperServ, u, OPER_OPER_EXISTS, nick);
- return MOD_CONT;
- }
-
- res = slist_add(&servopers, na->nc);
- if (res == -2)
- {
- notice_lang(s_OperServ, u, OPER_OPER_REACHED_LIMIT, nick);
- return MOD_CONT;
- }
- else
- {
- if (na->nc->flags & NI_SERVICES_ADMIN && (res = slist_indexof(&servadmins, na->nc)) != -1)
- {
- slist_delete(&servadmins, res);
- na->nc->flags |= NI_SERVICES_OPER;
- notice_lang(s_OperServ, u, OPER_OPER_MOVED, nick);
- }
- else
- {
- na->nc->flags |= NI_SERVICES_OPER;
- notice_lang(s_OperServ, u, OPER_OPER_ADDED, nick);
- }
- }
-
- if (readonly)
- notice_lang(s_OperServ, u, READ_ONLY_MODE);
-
- return MOD_CONT;
- }
-
- CommandReturn DoDel(User *u, std::vector<std::string> &params)
- {
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- NickAlias *na;
- int res = 0;
-
- if (!nick)
- {
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- if (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick))
- {
- /* Deleting a range */
- res = slist_delete_range(&servopers, nick, NULL);
- if (res == 0)
- {
- notice_lang(s_OperServ, u, OPER_OPER_NO_MATCH);
- return MOD_CONT;
- }
- else if (res == 1)
- notice_lang(s_OperServ, u, OPER_OPER_DELETED_ONE);
- else
- notice_lang(s_OperServ, u, OPER_OPER_DELETED_SEVERAL, res);
- }
- else
- {
- if (!(na = findnick(nick)))
- {
- notice_lang(s_OperServ, u, NICK_X_NOT_REGISTERED, nick);
- return MOD_CONT;
- }
-
- if (na->status & NS_FORBIDDEN)
- {
- notice_lang(s_OperServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
-
- if (!(na->nc->flags & NI_SERVICES_OPER) || (res = slist_indexof(&servopers, na->nc)) == -1)
- {
- notice_lang(s_OperServ, u, OPER_OPER_NOT_FOUND, nick);
- return MOD_CONT;
- }
-
- slist_delete(&servopers, res);
- notice_lang(s_OperServ, u, OPER_OPER_DELETED, nick);
- }
-
- if (readonly)
- notice_lang(s_OperServ, u, READ_ONLY_MODE);
-
- return MOD_CONT;
- }
-
- CommandReturn DoList(User *u, std::vector<std::string> &params)
- {
- int sent_header = 0;
- const char *nick = params.size() > 1 ? params[1].c_str() : NULL;
- int res = 0;
-
- if (!is_oper(u))
- {
- notice_lang(s_OperServ, u, ACCESS_DENIED);
- return MOD_CONT;
- }
-
- if (!servopers.count)
- {
- notice_lang(s_OperServ, u, OPER_OPER_LIST_EMPTY);
- return MOD_CONT;
- }
-
- if (!nick || (isdigit(*nick) && strspn(nick, "1234567890,-") == strlen(nick)))
- {
- int res = slist_enum(&servopers, nick, &oper_list_callback, u, &sent_header);
- if (!res)
- {
- notice_lang(s_OperServ, u, OPER_OPER_NO_MATCH);
- return MOD_CONT;
- }
- else
- notice_lang(s_OperServ, u, END_OF_ANY_LIST, "Oper");
- }
- else
- {
- int i;
-
- for (i = 0; i < servopers.count; ++i)
- {
- if (!stricmp(nick, (static_cast<NickCore *>(servopers.list[i]))->display) || Anope::Match((static_cast<NickCore *>(servopers.list[i]))->display, nick, false))
- oper_list(i + 1, static_cast<NickCore *>(servopers.list[i]), u, &sent_header);
- }
-
- if (!sent_header)
- notice_lang(s_OperServ, u, OPER_OPER_NO_MATCH);
- else
- notice_lang(s_OperServ, u, END_OF_ANY_LIST, "Oper");
- }
-
- return MOD_CONT;
- }
-
- CommandReturn DoClear(User *u, std::vector<std::string> &params)
- {
- if (!servopers.count)
- {
- notice_lang(s_OperServ, u, OPER_OPER_LIST_EMPTY);
- return MOD_CONT;
- }
-
- slist_clear(&servopers, 1);
- notice_lang(s_OperServ, u, OPER_OPER_CLEAR);
-
- return MOD_CONT;
- }
- public:
- CommandOSOper() : Command("OPER", 1, 2, "operserv/oper")
- {
- }
-
- CommandReturn Execute(User *u, std::vector<std::string> &params)
- {
- const char *cmd = params[0].c_str();
-
- if (!stricmp(cmd, "ADD"))
- return this->DoAdd(u, params);
- else if (!stricmp(cmd, "DEL"))
- return this->DoDel(u, params);
- else if (!stricmp(cmd, "LIST"))
- return this->DoList(u, params);
- else if (!stricmp(cmd, "CLEAR"))
- return this->DoClear(u, params);
- else
- this->OnSyntaxError(u);
- return MOD_CONT;
- }
-
- bool OnHelp(User *u, const std::string &subcommand)
- {
- notice_help(s_OperServ, u, OPER_HELP_OPER, s_NickServ);
- return true;
- }
-
- void OnSyntaxError(User *u)
- {
- syntax_error(s_OperServ, u, "OPER", OPER_OPER_SYNTAX);
- }
-};
-
-class OSOper : public Module
-{
- public:
- OSOper(const std::string &modname, const std::string &creator) : Module(modname, creator)
- {
- this->SetAuthor("Anope");
- this->SetVersion("$Id$");
- this->SetType(CORE);
- this->AddCommand(OPERSERV, new CommandOSOper(), MOD_UNIQUE);
- }
- void OperServHelp(User *u)
- {
- notice_lang(s_OperServ, u, OPER_HELP_CMD_OPER);
- }
-};
-
-/* Lists an oper entry, prefixing it with the header if needed */
-int oper_list(int number, NickCore *nc, User *u, int *sent_header)
-{
- if (!nc)
- return 0;
-
- if (!*sent_header)
- {
- notice_lang(s_OperServ, u, OPER_OPER_LIST_HEADER);
- *sent_header = 1;
- }
-
- notice_lang(s_OperServ, u, OPER_OPER_LIST_FORMAT, number, nc->display);
- return 1;
-}
-
-/* Callback for enumeration purposes */
-int oper_list_callback(SList *slist, int number, void *item, va_list args)
-{
- User *u = va_arg(args, User *);
- int *sent_header = va_arg(args, int *);
-
- return oper_list(number, static_cast<NickCore *>(item), u, sent_header);
-}
-
-MODULE_INIT("os_oper", OSOper)
diff --git a/src/core/os_staff.c b/src/core/os_staff.c
index 3aa5bc3c2..28de7768a 100644
--- a/src/core/os_staff.c
+++ b/src/core/os_staff.c
@@ -27,42 +27,43 @@ class CommandOSStaff : public Command
CommandReturn Execute(User *u, std::vector<std::string> &params)
{
- int idx = 0;
User *au = NULL;
NickCore *nc;
NickAlias *na;
int found;
int i;
+ std::list<std::pair<std::string, std::string> >::iterator it;
notice_lang(s_OperServ, u, OPER_STAFF_LIST_HEADER);
- slist_enum(&servopers, NULL, &opers_list_callback, u, "OPER");
- slist_enum(&servadmins, NULL, &opers_list_callback, u, "ADMN");
- for (idx = 0; idx < RootNumber; ++idx)
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
{
found = 0;
- if ((au = finduser(ServicesRoots[idx]))) /* see if user is online */
+ const std::string nick = it->first;
+ const std::string type = it->second;
+
+ if ((au = finduser(nick.c_str())))
{
found = 1;
- notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, '*', "ROOT", ServicesRoots[idx]);
+ notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, '*', type.c_str(), nick.c_str());
}
- else if ((nc = findcore(ServicesRoots[idx])))
+ else if ((nc = findcore(nick.c_str())))
{
- for (i = 0; i < nc->aliases.count; ++i) /* check all aliases */
+ for (i = 0; i < nc->aliases.count; i++)
{
na = static_cast<NickAlias *>(nc->aliases.list[i]);
- if ((au = finduser(na->nick))) /* see if user is online */
+ if ((au = finduser(na->nick)))
{
found = 1;
- notice_lang(s_OperServ, u, OPER_STAFF_AFORMAT, '*', "ROOT", ServicesRoots[idx], na->nick);
+ notice_lang(s_OperServ, u, OPER_STAFF_AFORMAT, '*', type.c_str(), nick.c_str(), u->nick);
}
}
}
if (!found)
- notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, ' ', "ROOT", ServicesRoots[idx]);
-
+ notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, ' ', type.c_str(), nick.c_str());
}
+
notice_lang(s_OperServ, u, END_OF_ANY_LIST, "Staff");
return MOD_CONT;
}
@@ -91,54 +92,4 @@ class OSStaff : public Module
}
};
-/**
- * Function for the enumerator to call
- **/
-int opers_list_callback(SList *slist, int number, void *item, va_list args)
-{
- User *u = va_arg(args, User *);
- char *level = va_arg(args, char *);
-
- return opers_list(number, static_cast<NickCore *>(item), u, level);
-}
-
-
-/**
- * Display an Opers list Entry
- **/
-int opers_list(int number, NickCore *nc, User *u, char *level)
-{
- User *au = NULL;
- NickAlias *na;
- int found;
- int i;
-
- if (!nc)
- return 0;
-
- found = 0;
- if ((au = finduser(nc->display))) /* see if user is online */
- {
- found = 1;
- notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, '*', level, nc->display);
- }
- else
- {
- for (i = 0; i < nc->aliases.count; ++i) /* check all aliases */
- {
- na = static_cast<NickAlias *>(nc->aliases.list[i]);
- if ((au = finduser(na->nick))) /* see if user is online */
- {
- found = 1;
- notice_lang(s_OperServ, u, OPER_STAFF_AFORMAT, '*', level, nc->display, na->nick);
- }
- }
- }
-
- if (!found)
- notice_lang(s_OperServ, u, OPER_STAFF_FORMAT, ' ', level, nc->display);
-
- return 1;
-}
-
MODULE_INIT("os_staff", OSStaff)
diff --git a/src/messages.c b/src/messages.c
index a1135b2f1..a29841b6a 100644
--- a/src/messages.c
+++ b/src/messages.c
@@ -243,14 +243,16 @@ int m_stats(const char *source, int ac, const char **av)
if (u && !is_oper(u) && HideStatsO) {
ircdproto->SendNumeric(ServerName, 219, source, "%c :End of /STATS report.", *av[0] ? *av[0] : '*');
} else {
- for (i = 0; i < RootNumber; i++)
- ircdproto->SendNumeric(ServerName, 243, source, "O * * %s Root 0", ServicesRoots[i]);
- for (i = 0; i < servadmins.count && (nc = static_cast<NickCore *>(servadmins.list[i]));
- i++)
- ircdproto->SendNumeric(ServerName, 243, source, "O * * %s Admin 0", nc->display);
- for (i = 0; i < servopers.count && (nc = static_cast<NickCore *>(servopers.list[i]));
- i++)
- ircdproto->SendNumeric(ServerName, 243, source, "O * * %s Oper 0", nc->display);
+ std::list<std::pair<std::string, std::string> >::iterator it;
+
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
+ {
+ const std::string nick = it->first;
+ const std::string type = it->second;
+
+ if ((nc = findcore(it->first.c_str())))
+ ircdproto->SendNumeric(ServerName, 243, source, "O * * %s %s 0", it->first.c_str(), it->second.c_str());
+ }
ircdproto->SendNumeric(ServerName, 219, source, "%c :End of /STATS report.", *av[0] ? *av[0] : '*');
}
diff --git a/src/modules/hs_request.c b/src/modules/hs_request.c
index 919f42b2d..71efc4c12 100644
--- a/src/modules/hs_request.c
+++ b/src/modules/hs_request.c
@@ -818,9 +818,9 @@ void my_memo_lang(User *u, char *name, int z, int number, ...)
void req_send_memos(User *u, char *vIdent, char *vHost)
{
- int i;
int z = 2;
- char host[50];
+ char host[BUFSIZE];
+ std::list<std::pair<std::string, std::string> >::iterator it;
if (checkDefCon(DEFCON_NO_NEW_MEMOS))
return;
@@ -832,12 +832,11 @@ void req_send_memos(User *u, char *vIdent, char *vHost)
if (HSRequestMemoOper == 1)
{
- for (i = 0; i < servopers.count; ++i)
- my_memo_lang(u, (static_cast<NickCore *>(servopers.list[i]))->display, z, LNG_REQUEST_MEMO, host);
- for (i = 0; i < servadmins.count; ++i)
- my_memo_lang(u, (static_cast<NickCore *>(servadmins.list[i]))->display, z, LNG_REQUEST_MEMO, host);
- for (i = 0; i < RootNumber; ++i)
- my_memo_lang(u, ServicesRoots[i], z, LNG_REQUEST_MEMO, host);
+ for (it = svsopers_in_config.begin(); it != svsopers_in_config.end(); it++)
+ {
+ const std::string nick = it->first;
+ my_memo_lang(u, const_cast<char *>(nick.c_str()), z, LNG_REQUEST_MEMO, host);
+ }
}
if (HSRequestMemoSetters == 1)
{
diff --git a/src/nickserv.c b/src/nickserv.c
index 38384d0b0..0c9042cc1 100644
--- a/src/nickserv.c
+++ b/src/nickserv.c
@@ -355,13 +355,6 @@ void load_ns_dbase()
nc->flags &= ~NI_KILL_IMMED;
SAFE(read_int16(&nc->language, f));
- /* Add services opers and admins to the appropriate list, but
- only if the database version is more than 10. */
- if (nc->flags & NI_SERVICES_ADMIN)
- slist_add(&servadmins, nc);
- if (nc->flags & NI_SERVICES_OPER)
- slist_add(&servopers, nc);
-
uint16 accesscount;
SAFE(read_int16(&accesscount, f));
if (accesscount)
@@ -441,8 +434,6 @@ void load_ns_dbase()
na->last_realname = sstrdup("");
}
- na->nc->flags &= ~NI_SERVICES_ROOT;
-
*nalast = na;
nalast = &na->next;
na->prev = naprev;
@@ -470,10 +461,6 @@ void load_ns_dbase()
continue;
}
- /* Add the Services root flag if needed. */
- for (j = 0; j < RootNumber; j++)
- if (!stricmp(ServicesRoots[j], na->nick))
- na->nc->flags |= NI_SERVICES_ROOT;
}
}
}
@@ -1121,7 +1108,6 @@ static int delcore(NickCore * nc)
int i;
/* (Hopefully complete) cleanup */
cs_remove_nick(nc);
- os_remove_nick(nc);
/* Remove the core from the list */
if (nc->next)
diff --git a/src/operserv.c b/src/operserv.c
index 9249d8292..aa5a0f7a0 100644
--- a/src/operserv.c
+++ b/src/operserv.c
@@ -17,22 +17,11 @@
/*************************************************************************/
-/* List of Services administrators */
-SList servadmins;
-/* List of Services operators */
-SList servopers;
/* AKILL, SGLINE, SQLINE and SZLINE lists */
SList akills, sglines, sqlines, szlines;
/*************************************************************************/
-static int compare_adminlist_entries(SList * slist, void *item1,
- void *item2);
-static int compare_operlist_entries(SList * slist, void *item1,
- void *item2);
-static void free_adminlist_entry(SList * slist, void *item);
-static void free_operlist_entry(SList * slist, void *item);
-
static int is_akill_entry_equal(SList * slist, void *item1, void *item2);
static void free_akill_entry(SList * slist, void *item);
static int is_sgline_entry_equal(SList * slist, void *item1, void *item2);
@@ -60,13 +49,8 @@ void moduleAddOperServCmds();
/* Options for the lists */
SListOpts akopts = { 0, NULL, &is_akill_entry_equal, &free_akill_entry };
-SListOpts saopts = { SLISTF_SORT, &compare_adminlist_entries, NULL,
- &free_adminlist_entry
-};
SListOpts sgopts = { 0, NULL, &is_sgline_entry_equal, &free_sgline_entry };
-SListOpts soopts =
- { SLISTF_SORT, &compare_operlist_entries, NULL, &free_operlist_entry };
SListOpts sqopts =
{ SLISTF_SORT, NULL, &is_sqline_entry_equal, &free_sqline_entry };
SListOpts szopts = { 0, NULL, &is_szline_entry_equal, &free_szline_entry };
@@ -87,12 +71,6 @@ void os_init()
{
moduleAddOperServCmds();
- /* Initialization of the lists */
- slist_init(&servadmins);
- servadmins.opts = &saopts;
- slist_init(&servopers);
- servopers.opts = &soopts;
-
slist_init(&akills);
akills.opts = &akopts;
@@ -332,15 +310,6 @@ void save_os_dbase()
#undef SAFE
-/*************************************************************************/
-
-/* Removes the nick structure from OperServ lists. */
-
-void os_remove_nick(NickCore * nc)
-{
- slist_remove(&servadmins, nc);
- slist_remove(&servopers, nc);
-}
/*************************************************************************/
/*********************** OperServ command functions **********************/
@@ -1204,48 +1173,6 @@ static int is_szline_entry_equal(SList * slist, void *item1, void *item2)
/*************************************************************************/
-/* Callback function used to sort the admin list */
-
-static int compare_adminlist_entries(SList * slist, void *item1,
- void *item2)
-{
- NickCore *nc1 = static_cast<NickCore *>(item1), *nc2 = static_cast<NickCore *>(item2);
- if (!nc1 || !nc2)
- return -1; /* To tell to continue */
- return stricmp(nc1->display, nc2->display);
-}
-
-/* Callback function used when an admin list entry is deleted */
-
-static void free_adminlist_entry(SList * slist, void *item)
-{
- NickCore *nc = static_cast<NickCore *>(item);
- nc->flags &= ~NI_SERVICES_ADMIN;
-}
-
-/*************************************************************************/
-
-/* Callback function used to sort the oper list */
-
-static int compare_operlist_entries(SList * slist, void *item1,
- void *item2)
-{
- NickCore *nc1 = static_cast<NickCore *>(item1), *nc2 = static_cast<NickCore *>(item2);
- if (!nc1 || !nc2)
- return -1; /* To tell to continue */
- return stricmp(nc1->display, nc2->display);
-}
-
-/* Callback function used when an oper list entry is deleted */
-
-static void free_operlist_entry(SList * slist, void *item)
-{
- NickCore *nc = static_cast<NickCore *>(item);
- nc->flags &= ~NI_SERVICES_OPER;
-}
-
-/*************************************************************************/
-
/**
* Returns 1 if the passed level is part of the CURRENT defcon, else 0 is returned
**/