*/
if (IsUnknown(acptr) && MyConnect(acptr)) {
++ServerStats->is_ref;
- ip_registry_connect_fail(acptr->ip.s_addr);
exit_client(cptr, acptr, &me, "Overridden by other sign on");
return set_nick_name(cptr, sptr, nick, parc, parv);
}
* parv[4] = username
* parv[5] = hostname
* parv[6] = umode (optional)
+ * parv[parc-4] = %<lastmod>:<mask> <- Only if matching GLINE
* parv[parc-3] = IP# <- Only Protocol >= 10
* parv[parc-2] = YXX, numeric nick <- Only Protocol >= 10
* parv[parc-1] = info
ircd_strncpy(nick, parv[1], NICKLEN);
nick[NICKLEN] = '\0';
- if (!IsBurstOrBurstAck(sptr)) {
- if (IsServer(sptr)) {
- lastnick = atoi(parv[3]);
- if (lastnick > OLDEST_TS)
- sptr->serv->lag = TStime() - lastnick;
- }
- else {
- lastnick = atoi(parv[2]);
- if (lastnick > OLDEST_TS)
- sptr->user->server->serv->lag = TStime() - lastnick;
- }
+ if (IsServer(sptr)) {
+ lastnick = atoi(parv[3]);
+ if (lastnick > OLDEST_TS && !IsBurstOrBurstAck(sptr))
+ sptr->serv->lag = TStime() - lastnick;
+ }
+ else {
+ lastnick = atoi(parv[2]);
+ if (lastnick > OLDEST_TS && !IsBurstOrBurstAck(sptr))
+ sptr->user->server->serv->lag = TStime() - lastnick;
}
/*
* If do_nick_name() returns a null name OR if the server sent a nick
* is present in the nicklist (due to the way the below for loop is
* constructed). -avalon
*/
- if (!(acptr = FindClient(nick))) {
+
+ acptr = FindClient(nick);
+ if (!acptr) {
/*
* No collisions, all clear...
*/
*/
if (IsUnknown(acptr) && MyConnect(acptr)) {
++ServerStats->is_ref;
- ip_registry_connect_fail(acptr->ip.s_addr);
exit_client(cptr, acptr, &me, "Overridden by other sign on");
return set_nick_name(cptr, sptr, nick, parc, parv);
}
* is present in the nicklist (due to the way the below for loop is
* constructed). -avalon
*/
- if ((acptr = FindServer(nick))) {
+
+ acptr = FindServer(nick);
+
+ if (acptr) { /* There is a nick collision with a server */
if (MyConnect(sptr))
{
+ /* Local user trying to use a nick thats a server
+ * Return an error message and ignore the command
+ */
sendto_one(sptr, err_str(ERR_NICKNAMEINUSE), me.name, /* XXX DEAD */
EmptyString(parv[0]) ? "*" : parv[0], nick);
return 0; /* NICK message ignored */
}
+
/*
* We have a nickname trying to use the same name as
* a server. Send out a nick collision KILL to remove
sptr->flags |= FLAGS_KILLED;
return exit_client(cptr, sptr, &me, "Nick/Server collision");
}
+
+ acptr = FindClient(nick);
- if (!(acptr = FindClient(nick)))
- return set_nick_name(cptr, sptr, nick, parc, parv); /* No collisions, all clear... */
+ /* No collisions? Set the nick name and we're done */
+ if (!acptr)
+ return set_nick_name(cptr, sptr, nick, parc, parv);
/*
* If acptr == sptr, then we have a client doing a nick
* change between *equivalent* nicknames as far as server
if (IsUnknown(acptr) && MyConnect(acptr))
{
++ServerStats->is_ref;
- ip_registry_connect_fail(acptr->ip.s_addr);
exit_client(cptr, acptr, &me, "Overridden by other sign on");
return set_nick_name(cptr, sptr, nick, parc, parv);
}