diff --git a/include/s_conf.h b/include/s_conf.h index 703f4eac..1e9e6b55 100644 --- a/include/s_conf.h +++ b/include/s_conf.h @@ -215,6 +215,7 @@ struct config_file_entry int tkline_expire_notices; int use_whois_actually; int disable_auth; + int connect_delay; int connect_timeout; int burst_away; int reject_ban_time; diff --git a/ircd/newconf.c b/ircd/newconf.c index 6a81208d..00a2642e 100644 --- a/ircd/newconf.c +++ b/ircd/newconf.c @@ -2748,6 +2748,7 @@ static struct ConfEntry conf_general_table[] = { "client_exit", CF_YESNO, NULL, 0, &ConfigFileEntry.client_exit }, { "collision_fnc", CF_YESNO, NULL, 0, &ConfigFileEntry.collision_fnc }, { "resv_fnc", CF_YESNO, NULL, 0, &ConfigFileEntry.resv_fnc }, + { "connect_delay", CF_TIME, NULL, 0, &ConfigFileEntry.connect_delay }, { "connect_timeout", CF_TIME, NULL, 0, &ConfigFileEntry.connect_timeout }, { "default_floodcount", CF_INT, NULL, 0, &ConfigFileEntry.default_floodcount }, { "default_ident_timeout", CF_INT, NULL, 0, &ConfigFileEntry.default_ident_timeout }, diff --git a/ircd/packet.c b/ircd/packet.c index 3eb038ad..9d5bc3a0 100644 --- a/ircd/packet.c +++ b/ircd/packet.c @@ -133,6 +133,12 @@ parse_client_queued(struct Client *client_p) if(client_p->localClient->sent_parsed >= allow_read) break; + /* connect_delay hack. Don't process any messages from a new client for $n seconds, + * to allow network bots to do their thing before channels can be joined. + */ + if (rb_current_time() < client_p->localClient->firsttime + ConfigFileEntry.connect_delay) + break; + dolen = rb_linebuf_get(&client_p->localClient-> buf_recvq, readBuf, READBUF_SIZE, LINEBUF_COMPLETE, LINEBUF_PARSED); diff --git a/modules/m_info.c b/modules/m_info.c index 0f08d04d..8f036012 100644 --- a/modules/m_info.c +++ b/modules/m_info.c @@ -151,6 +151,12 @@ static struct InfoStruct info_table[] = { &ConfigFileEntry.client_flood_message_time, "Time to allow per client_flood_message_num outside of burst", }, + { + "connect_delay", + OUTPUT_DECIMAL, + &ConfigFileEntry.connect_delay, + "Time to wait before processing commands from a new client", + }, { "connect_timeout", OUTPUT_DECIMAL,