diff options
author | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-06-11 10:16:35 +0000 |
---|---|---|
committer | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-06-11 10:16:35 +0000 |
commit | 8fa67528583b83a23030d5d358e070586672cc87 (patch) | |
tree | fc2f1a81de12c8a1f8bb73148b102b0a5461111a /src | |
parent | a68b5efe279cafc3b2d81b335871091813c940d2 (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.c | 38 | ||||
-rw-r--r-- | src/core/ns_group.c | 35 | ||||
-rw-r--r-- | src/core/ns_register.c | 31 | ||||
-rw-r--r-- | src/core/os_admin.c | 270 | ||||
-rw-r--r-- | src/core/os_oper.c | 273 | ||||
-rw-r--r-- | src/core/os_staff.c | 75 | ||||
-rw-r--r-- | src/messages.c | 18 | ||||
-rw-r--r-- | src/modules/hs_request.c | 15 | ||||
-rw-r--r-- | src/nickserv.c | 14 | ||||
-rw-r--r-- | src/operserv.c | 73 |
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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) { - 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 **/ |