summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-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
5 files changed, 23 insertions, 661 deletions
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)