X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc-login.c;h=f3226011890655711a4781b8e716e531d7244016;hb=f64cb901efe2f303413816b725520dfd4caee7bf;hp=fbb50edbd33617d4f70deda382f719c1ab744e08;hpb=dbfe1beca83a80c7fc9e25470a75bca78f64d634;p=ngircd-alex.git diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index fbb50edb..f3226011 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -172,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; @@ -259,6 +260,20 @@ 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 */ + chan = Channel_First(); + while (chan) { + if(Channel_IsMemberOf(chan, Client) && + Channel_HasMode(chan, 'N') && + !Client_HasMode(Client, 'o')) + return IRC_WriteErrClient(Client, + ERR_UNAVAILRESOURCE_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); @@ -838,8 +853,8 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) 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