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=9fca622ba0ea66422940e2d71dc2dff0d5f2eee4;hp=609b1873860c1dd1bcc105f389da4317255ea55b;hb=b8482fd3cfdb429aec75575958f4d5d4e9ae22df;hpb=a13bb78b1e7adf7c261ac427341c397ef9a6a1ed diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 609b1873..9fca622b 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,22 @@ 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_Type(Client) == CLIENT_USER && + !Client_HasMode(Client, 'o')) { + chan = Channel_First(); + while (chan) { + if(Channel_HasMode(chan, 'N') && + Channel_IsMemberOf(chan, Client)) + 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 +849,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