00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "module.h"
00016
00017 static int do_svsnick(User * u);
00018 static void myOperServHelp(User * u);
00019
00026 int AnopeInit(int argc, char **argv)
00027 {
00028 Command *c;
00029
00030 moduleAddAuthor("Anope");
00031 moduleAddVersion(VERSION_STRING);
00032 moduleSetType(CORE);
00033
00034 c = createCommand("SVSNICK", do_svsnick, is_services_root,
00035 OPER_HELP_SVSNICK, -1, -1, -1, -1);
00036 moduleAddCommand(OPERSERV, c, MOD_UNIQUE);
00037
00038 moduleSetOperHelp(myOperServHelp);
00039 if (!ircd->svsnick) {
00040 return MOD_STOP;
00041 }
00042 return MOD_CONT;
00043 }
00044
00048 void AnopeFini(void)
00049 {
00050
00051 }
00052
00053
00058 static void myOperServHelp(User * u)
00059 {
00060 if (is_services_admin(u) && u->isSuperAdmin) {
00061 notice_lang(s_OperServ, u, OPER_HELP_CMD_SVSNICK);
00062 }
00063 }
00064
00070
00071
00072 static int do_svsnick(User * u)
00073 {
00074 char *nick = strtok(NULL, " ");
00075 char *newnick = strtok(NULL, " ");
00076
00077 NickAlias *na;
00078 char *c;
00079
00080
00081 if (!u->isSuperAdmin) {
00082 notice_lang(s_OperServ, u, OPER_SUPER_ADMIN_ONLY);
00083 return MOD_CONT;
00084 }
00085
00086 if (!nick || !newnick) {
00087 syntax_error(s_OperServ, u, "SVSNICK", OPER_SVSNICK_SYNTAX);
00088 return MOD_CONT;
00089 }
00090
00091
00092 if (strlen(newnick) > (NICKMAX - 2)) {
00093 notice_lang(s_OperServ, u, NICK_X_TRUNCATED,
00094 newnick, NICKMAX - 2, newnick);
00095 newnick[NICKMAX - 2] = '\0';
00096 }
00097
00098
00099 if (*newnick == '-' || isdigit(*newnick)) {
00100 notice_lang(s_OperServ, u, NICK_X_ILLEGAL, newnick);
00101 return MOD_CONT;
00102 }
00103 for (c = newnick; *c && (c - newnick) < NICKMAX; c++) {
00104 if (!isvalidnick(*c)) {
00105 notice_lang(s_OperServ, u, NICK_X_ILLEGAL, newnick);
00106 return MOD_CONT;
00107 }
00108 }
00109
00110
00111 if (!finduser(nick)) {
00112 notice_lang(s_OperServ, u, NICK_X_NOT_IN_USE, nick);
00113 } else if (stricmp(nick, newnick) && finduser(newnick)) {
00114 notice_lang(s_OperServ, u, NICK_X_IN_USE, newnick);
00115 } else if ((na = findnick(newnick)) && (na->status & NS_VERBOTEN)) {
00116 notice_lang(s_OperServ, u, NICK_X_FORBIDDEN, newnick);
00117 } else {
00118 notice_lang(s_OperServ, u, OPER_SVSNICK_NEWNICK, nick, newnick);
00119 anope_cmd_global(s_OperServ, "%s used SVSNICK to change %s to %s",
00120 u->nick, nick, newnick);
00121 anope_cmd_svsnick(nick, newnick, time(NULL));
00122 }
00123 return MOD_CONT;
00124 }