#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));
IRC_NICK( CLIENT *Client, REQUEST *Req )
{
CLIENT *intr_c, *target, *c;
+ CHANNEL *chan;
char *nick, *user, *hostname, *modes, *info;
int token, hops;
#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),
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);
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