While implementing apass1-2, my eye fell on m_create.
It seems that what happens there should be changed.
The code currently is:
int ms_create(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
...
if (IsServer(sptr))
return protocol_violation(sptr,"%s tried to CREATE a channel", cli_name(sptr));
...
chanTS = atoi(parv[2]);
...
/* A create that didn't appear during a burst has that servers idea of
* the current time. Use it for lag calculations.
*/
if (!IsBurstOrBurstAck(sptr) && 0 != chanTS &&
MAGIC_REMOTE_JOIN_TS != chanTS)
cli_serv(cli_user(sptr)->server)->lag = TStime() - chanTS;
...
/* If this server is >1 minute fast, warn */
if (TStime() - chanTS<-60) {
...
/* If this server is >5 minutes fast, squit it */
if (TStime() - chanTS<-5*60*60)
return exit_client(sptr, sptr, &me, "Timestamp Drift/Bogus TS");
}
...
Firstly, the last exit_client KILLs sptr, a client. It doesn't SQUIT
the server of sptr. But changing this into squitting the server of
sptr would be at least as wrong - consider:
A <-- 5 minutes lag --> B - C - D - E - F - G
\- H - I - J
Where 'A' is a laggy server that just got connected.
Now a client on the other side of the well-working network
(on 'G' say) creates a new channel. Its CREATE is forwarded
to F, E, and so on.
When the CREATE reaches A, server A will KILL the client on G,
or SQUIT 'G' according to the comment in the code.
That can't be right. It should at _most_ SQUIT B.
--
Carlo Wood <[EMAIL PROTECTED]>