commit - 23572af942399288bcf4e67245563b05ff4fc0f7
commit + 32f63abb59b5c9f47b4d517e0bbf9cc73fd044dc
blob - 018855d5e1f4490f92291069b635f2afa0cf9c34
blob + 77948af09cb01b84330ed258e9488b8eab8f8c5c
--- doc/sample-ngircd.conf.tmpl
+++ doc/sample-ngircd.conf.tmpl
# Please note that all servers in an IRC network MUST use the same
# maximum nick name length!
;MaxNickLength = 9
+
+ # Maximum number of channels returned in response to a /list
+ # command (0: unlimited):
+ ;MaxListSize = 100
# After <PingTimeout> seconds of inactivity the server will send a
# PING to the peer to test whether it is alive or not.
blob - 4ac37ad4033331e11692ee0aee6b87e96b6846ee
blob + b60057070f5077bf71c2898368c98b21b795788f
--- src/ngircd/conf.c
+++ src/ngircd/conf.c
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+ printf(" MaxListSize = %d\n", Conf_MaxListSize);
printf(" PingTimeout = %d\n", Conf_PingTimeout);
printf(" PongTimeout = %d\n", Conf_PongTimeout);
puts("");
Conf_MaxConnectionsIP = 5;
Conf_MaxJoins = 10;
Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
+ Conf_MaxListSize = 100;
Conf_PingTimeout = 120;
Conf_PongTimeout = 20;
}
if (strcasecmp(Var, "MaxNickLength") == 0) {
Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg);
+ return;
+ }
+ if (strcasecmp(Var, "MaxListSize") == 0) {
+ Conf_MaxListSize = atoi(Arg);
+ if (!Conf_MaxListSize && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
return;
}
if (strcasecmp(Var, "PingTimeout") == 0) {
blob - 90d74d2096e42d2dd8f28537db28f307e700e5c2
blob + 541fdb294c4aac81114f7b8c458dc4e6f81021f2
--- src/ngircd/conf.h
+++ src/ngircd/conf.h
/** Maximum length of a nick name */
GLOBAL unsigned int Conf_MaxNickLength;
+/** Maximum number of channels returned to /list */
+GLOBAL int Conf_MaxListSize;
+
#ifndef STRICT_RFC
/** Require "AUTH PING-PONG" on login */
blob - b387493c6ab3ca0643a2322e99a26dab23688051
blob + 345f1bed298a9a9bd3e9d7ad417da467d6aeb534
--- src/ngircd/defines.h
+++ src/ngircd/defines.h
/* Defaults and limits for IRC commands */
-/** Max. number of LIST replies. */
-#define MAX_RPL_LIST 100
-
/** Max. number of elemets allowed in channel invite and ban lists. */
#define MAX_HNDL_CHANNEL_LISTS 50
blob - f9d2dc125d3708b11ad629ed9551b7f08f4b2598
blob + ed4839afdcef63782be0510b876915d3522c8e10
--- src/ngircd/irc-channel.c
+++ src/ngircd/irc-channel.c
if (!strchr(Channel_Modes(chan), 's')
|| Channel_IsMemberOf(chan, from)
|| (!Conf_MorePrivacy && Client_OperByMe(Client))) {
- if (IRC_CheckListTooBig(from, count,
- MAX_RPL_LIST,
- "LIST"))
+ if ((Conf_MaxListSize > 0)
+ && IRC_CheckListTooBig(from, count,
+ Conf_MaxListSize,
+ "LIST"))
break;
if (!IRC_WriteStrClient(from,
RPL_LIST_MSG, Client_ID(from),