X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-login.c;h=10885f281ef4ce2b4adc3df97c06356ab074e227;hp=609b1873860c1dd1bcc105f389da4317255ea55b;hb=7ff16e81163b3bee43ce053cb86fb2df2a023d53;hpb=a13bb78b1e7adf7c261ac427341c397ef9a6a1ed diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 609b1873..10885f28 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -34,6 +34,8 @@ #include "irc-macros.h" #include "irc-write.h" +#include "irc-login.h" + static void Change_Nick PARAMS((CLIENT * Origin, CLIENT * Target, char *NewNick, bool InformClient)); @@ -170,6 +172,7 @@ GLOBAL bool IRC_NICK( CLIENT *Client, REQUEST *Req ) { CLIENT *intr_c, *target, *c; + CHANNEL *chan; char *nick, *user, *hostname, *modes, *info; int token, hops; @@ -241,7 +244,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) #else Conn_SetAuthPing(Client_Conn(Client), rand()); #endif - IRC_WriteStrClient(Client, "PING :%ld", + Conn_WriteStr(Client_Conn(Client), "PING :%ld", Conn_GetAuthPing(Client_Conn(Client))); LogDebug("Connection %d: sent AUTH PING %ld ...", Client_Conn(Client), @@ -257,6 +260,21 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) Client_SetType( Client, CLIENT_GOTNICK ); } else { /* Nickname change */ + + /* Check that the user isn't on any channels set +N */ + if(!Client_HasMode(Client, 'o')) { + chan = Channel_First(); + while (chan) { + if(Channel_IsMemberOf(chan, Client) && + Channel_HasMode(chan, 'N')) + return IRC_WriteErrClient(Client, + ERR_NONICKCHANGE_MSG, + Client_ID(Client), + Channel_Name(chan)); + chan = Channel_Next(chan); + } + } + Change_Nick(Client, target, Req->argv[0], Client_Type(Client) == CLIENT_USER ? true : false); IRC_SetPenalty(target, 2); @@ -830,14 +848,14 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) if (auth_ping) { LogDebug("AUTH PONG: waiting for token \"%ld\", got \"%s\" ...", auth_ping, Req->argv[0]); - if (auth_ping == atoi(Req->argv[0])) { + if (auth_ping == atol(Req->argv[0])) { Conn_SetAuthPing(conn, 0); if (Client_Type(Client) == CLIENT_WAITAUTHPING) Login_User(Client); } else if (!IRC_WriteStrClient(Client, - "To connect, type /QUOTE PONG %ld", - auth_ping)) + "NOTICE %s :To connect, type /QUOTE PONG %ld", + Client_ID(Client), auth_ping)) return DISCONNECTED; } #endif