diff --git a/Changes b/Changes index 38061849b..7c7e8653e 100644 --- a/Changes +++ b/Changes @@ -6,6 +6,7 @@ Provided by Anope Dev. - 2004 05/21 F Removed threads.c file. [ #64] 05/21 F Check for VHOST capable ircd on HostServAlias induction. [ #56] 05/21 F Allow /CS SUSPEND on registered channels only. [ #54] +05/21 F Reserved nicks (Q-lined) will be KILLed if taken on induction. [ #50] Anope Version 1.7.3 ------------------- diff --git a/botserv.c b/botserv.c index 3e4160f24..2c76155bf 100644 --- a/botserv.c +++ b/botserv.c @@ -1280,7 +1280,6 @@ static int do_bot(User * u) else if (findbot(nick)) notice_lang(s_BotServ, u, BOT_BOT_ALREADY_EXISTS, nick); else { - User *u2; NickAlias *na; /** @@ -1379,9 +1378,7 @@ static int do_bot(User * u) bi->chancount = 0; /* We check whether user with this nick is online, and kill it if so */ - if ((u2 = finduser(nick))) - kill_user(s_BotServ, u2->nick, - "This nick is now used by Services"); + EnforceQlinedNick(nick, s_BotServ); /* We make the bot online, ready to serve */ #if defined(IRC_UNREAL) || defined (IRC_VIAGRA) @@ -1411,7 +1408,6 @@ static int do_bot(User * u) else if (!(bi = findbot(oldnick))) notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick); else { - User *u2; NickAlias *na; /* Checks whether there *are* changes. @@ -1511,9 +1507,7 @@ static int do_bot(User * u) delnick(na); /* We check whether user with this nick is online, and kill it if so */ - if ((u2 = finduser(nick))) - kill_user(s_BotServ, u2->nick, - "This nick is now used by Services"); + EnforceQlinedNick(nick, s_BotServ); } if (strcmp(nick, bi->nick)) diff --git a/extern.h b/extern.h index 3b5b3fd0c..d1e45269d 100644 --- a/extern.h +++ b/extern.h @@ -609,6 +609,8 @@ E char *myStrSubString(const char *src, int start, int end); E char *myStrGetTokenRemainder(const char *str, const char dilim, int token_number); E void doCleanBuffer(char *str); +E void EnforceQlinedNick(char *nick, char *killer); + /**** news.c ****/ diff --git a/init.c b/init.c index 7053d0dde..c92b54ae1 100644 --- a/init.c +++ b/init.c @@ -76,6 +76,7 @@ extern void moduleAddMsgs(void); void introduce_user(const char *user) { + /* Watch out for infinite loops... */ #define LTSIZE 20 static int lasttimes[LTSIZE]; @@ -85,7 +86,8 @@ void introduce_user(const char *user) lasttimes[LTSIZE - 1] = time(NULL); #undef LTSIZE - if (!user || stricmp(user, s_NickServ) == 0) + if (!user || stricmp(user, s_NickServ) == 0) { + EnforceQlinedNick(s_NickServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_NickServ, desc_NickServ, "+S"); #elif defined(IRC_RAGE2) @@ -95,7 +97,10 @@ void introduce_user(const char *user) #else NICK(s_NickServ, desc_NickServ, "+o"); #endif - if (!user || stricmp(user, s_ChanServ) == 0) + } + + if (!user || stricmp(user, s_ChanServ) == 0) { + EnforceQlinedNick(s_ChanServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_ChanServ, desc_ChanServ, "+S"); #elif defined(IRC_RAGE2) @@ -105,9 +110,10 @@ void introduce_user(const char *user) #else NICK(s_ChanServ, desc_ChanServ, "+o"); #endif - + } #ifdef HAS_VHOST - if (s_HostServ && (!user || stricmp(user, s_HostServ) == 0)) + if (s_HostServ && (!user || stricmp(user, s_HostServ) == 0)) { + EnforceQlinedNick(s_HostServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_HostServ, desc_HostServ, "+oS"); #elif defined(IRC_RAGE2) @@ -115,9 +121,11 @@ void introduce_user(const char *user) #else NICK(s_HostServ, desc_HostServ, "+o"); #endif + } #endif - if (!user || stricmp(user, s_MemoServ) == 0) + if (!user || stricmp(user, s_MemoServ) == 0) { + EnforceQlinedNick(s_MemoServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_MemoServ, desc_MemoServ, "+S"); #elif defined(IRC_RAGE2) @@ -127,7 +135,10 @@ void introduce_user(const char *user) #else NICK(s_MemoServ, desc_MemoServ, "+o"); #endif - if (s_BotServ && (!user || stricmp(user, s_BotServ) == 0)) + } + + if (s_BotServ && (!user || stricmp(user, s_BotServ) == 0)) { + EnforceQlinedNick(s_BotServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_BotServ, desc_BotServ, "+S"); #elif defined(IRC_RAGE2) @@ -137,7 +148,10 @@ void introduce_user(const char *user) #else NICK(s_BotServ, desc_BotServ, "+o"); #endif - if (!user || stricmp(user, s_HelpServ) == 0) + } + + if (!user || stricmp(user, s_HelpServ) == 0) { + EnforceQlinedNick(s_HelpServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_HelpServ, desc_HelpServ, "+Sh"); #elif defined(IRC_RAGE2) @@ -147,7 +161,10 @@ void introduce_user(const char *user) #else NICK(s_HelpServ, desc_HelpServ, "+h"); #endif - if (!user || stricmp(user, s_OperServ) == 0) + } + + if (!user || stricmp(user, s_OperServ) == 0) { + EnforceQlinedNick(s_OperServ, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_OperServ, desc_OperServ, "+iS"); #elif defined(IRC_RAGE2) @@ -157,7 +174,10 @@ void introduce_user(const char *user) #else NICK(s_OperServ, desc_OperServ, "+io"); #endif - if (s_DevNull && (!user || stricmp(user, s_DevNull) == 0)) + } + + if (s_DevNull && (!user || stricmp(user, s_DevNull) == 0)) { + EnforceQlinedNick(s_DevNull, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_ULTIMATE3) NICK(s_DevNull, desc_DevNull, "+iS"); #elif defined(IRC_RAGE2) @@ -165,7 +185,10 @@ void introduce_user(const char *user) #else NICK(s_DevNull, desc_DevNull, "+i"); #endif - if (!user || stricmp(user, s_GlobalNoticer) == 0) + } + + if (!user || stricmp(user, s_GlobalNoticer) == 0) { + EnforceQlinedNick(s_GlobalNoticer, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_ULTIMATE3) NICK(s_GlobalNoticer, desc_GlobalNoticer, "+iS"); #elif defined(IRC_RAGE2) @@ -175,67 +198,91 @@ void introduce_user(const char *user) #else NICK(s_GlobalNoticer, desc_GlobalNoticer, "+io"); #endif + } -/* We make aliases go online */ - if (s_NickServAlias && (!user || stricmp(user, s_NickServAlias) == 0)) + /* We make aliases go online */ + if (s_NickServAlias && (!user || stricmp(user, s_NickServAlias) == 0)) { + EnforceQlinedNick(s_NickServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_NickServAlias, desc_NickServAlias, "+oS"); #else NICK(s_NickServAlias, desc_NickServAlias, "+o"); #endif - if (s_ChanServAlias && (!user || stricmp(user, s_ChanServAlias) == 0)) + } + + if (s_ChanServAlias && (!user || stricmp(user, s_ChanServAlias) == 0)) { + EnforceQlinedNick(s_ChanServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_ChanServAlias, desc_ChanServAlias, "+oS"); #else NICK(s_ChanServAlias, desc_ChanServAlias, "+o"); #endif - if (s_MemoServAlias && (!user || stricmp(user, s_MemoServAlias) == 0)) + } + + if (s_MemoServAlias && (!user || stricmp(user, s_MemoServAlias) == 0)) { + EnforceQlinedNick(s_MemoServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_MemoServAlias, desc_MemoServAlias, "+oS"); #else NICK(s_MemoServAlias, desc_MemoServAlias, "+o"); #endif - if (s_BotServAlias && (!user || stricmp(user, s_BotServAlias) == 0)) + } + + if (s_BotServAlias && (!user || stricmp(user, s_BotServAlias) == 0)) { + EnforceQlinedNick(s_BotServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_BotServAlias, desc_BotServAlias, "+oS"); #else NICK(s_BotServAlias, desc_BotServAlias, "+o"); #endif - if (s_HelpServAlias && (!user || stricmp(user, s_HelpServAlias) == 0)) + } + + if (s_HelpServAlias && (!user || stricmp(user, s_HelpServAlias) == 0)) { + EnforceQlinedNick(s_HelpServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_HelpServAlias, desc_HelpServAlias, "+oS"); #else NICK(s_HelpServAlias, desc_HelpServAlias, "+h"); #endif - if (s_OperServAlias && (!user || stricmp(user, s_OperServAlias) == 0)) + } + + if (s_OperServAlias && (!user || stricmp(user, s_OperServAlias) == 0)) { + EnforceQlinedNick(s_OperServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_OperServAlias, desc_OperServAlias, "+ioS"); #else NICK(s_OperServAlias, desc_OperServAlias, "+io"); #endif - if (s_DevNullAlias && (!user || stricmp(user, s_DevNullAlias) == 0)) + } + + if (s_DevNullAlias && (!user || stricmp(user, s_DevNullAlias) == 0)) { + EnforceQlinedNick(s_DevNullAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_DevNullAlias, desc_DevNullAlias, "+iS"); #else NICK(s_DevNullAlias, desc_DevNullAlias, "+i"); #endif - + } #ifdef HAS_VHOST - if (s_HostServAlias && (!user || stricmp(user, s_HostServAlias) == 0)) + if (s_HostServAlias && (!user || stricmp(user, s_HostServAlias) == 0)) { + EnforceQlinedNick(s_HostServAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) || defined(IRC_VIAGRA) NICK(s_HostServAlias, desc_HostServAlias, "+ioS"); #else NICK(s_HostServAlias, desc_HostServAlias, "+io"); #endif + } #endif if (s_GlobalNoticerAlias - && (!user || stricmp(user, s_GlobalNoticerAlias) == 0)) + && (!user || stricmp(user, s_GlobalNoticerAlias) == 0)) { + EnforceQlinedNick(s_GlobalNoticerAlias, NULL); #if defined(IRC_ULTIMATE) || defined(IRC_UNREAL) NICK(s_GlobalNoticerAlias, desc_GlobalNoticerAlias, "+ioS"); #else NICK(s_GlobalNoticerAlias, desc_GlobalNoticerAlias, "+io"); #endif + } /* We make the bots go online */ if (s_BotServ) { @@ -243,7 +290,10 @@ void introduce_user(const char *user) int i; for (i = 0; i < 256; i++) - for (bi = botlists[i]; bi; bi = bi->next) + for (bi = botlists[i]; bi; bi = bi->next) { + + EnforceQlinedNick(bi->nick, s_BotServ); + if (!user || !stricmp(user, bi->nick)) #if defined(IRC_UNREAL) || defined(IRC_VIAGRA) NEWNICK(bi->nick, bi->user, bi->host, bi->real, "+qS", @@ -258,6 +308,7 @@ void introduce_user(const char *user) NEWNICK(bi->nick, bi->user, bi->host, bi->real, "+", 1); #endif + } } } diff --git a/misc.c b/misc.c index 5bc22650e..358a4ad98 100644 --- a/misc.c +++ b/misc.c @@ -640,3 +640,16 @@ void doCleanBuffer(char *str) } *out = ch; // == '\0' } + +void EnforceQlinedNick(char *nick, char *killer) +{ + User *u2; + + if ((u2 = finduser(nick))) { + alog("Killed Q-lined nick: %s!%s@%s", u2->nick, u2->username, + u2->host); + kill_user(killer, u2->nick, + "This nick is reserved for Services. Please use a non Q-Lined nick."); + } + +} diff --git a/version.log b/version.log index ff9525b3e..0105fb465 100644 --- a/version.log +++ b/version.log @@ -8,10 +8,14 @@ VERSION_MAJOR="1" VERSION_MINOR="7" VERSION_PATCH="3" -VERSION_BUILD="119" +VERSION_BUILD="120" # $Log$ # +# BUILD : 1.7.3 (120) +# BUGS : 50 +# NOTES : Reserved nicks (Q-lined) will be KILLed if taken on induction. +# # BUILD : 1.7.3 (119) # BUGS : 54 # NOTES : Allow /CS SUSPEND on registered non-forbidden channels only