summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/example_new.conf6
-rw-r--r--include/extern.h2
-rw-r--r--src/config.c8
3 files changed, 10 insertions, 6 deletions
diff --git a/data/example_new.conf b/data/example_new.conf
index 5dfb155eb..ab923b3cd 100644
--- a/data/example_new.conf
+++ b/data/example_new.conf
@@ -813,4 +813,10 @@ operserv
* required if session limiting is enabled.
*/
maxsessionlimit = 100
+
+ /*
+ * Sets the default expiry time for session exceptions. This directive is only required if session
+ * limiting is enabled.
+ */
+ exceptionexpiry = 1d
}
diff --git a/include/extern.h b/include/extern.h
index 2d6de6613..da3ba3faf 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -444,7 +444,7 @@ E int ChanServCoreNumber;
E bool LimitSessions;
E int DefSessionLimit;
-E int ExceptionExpiry;
+E time_t ExceptionExpiry;
E int MaxSessionKill;
E int MaxSessionLimit;
E int SessionAutoKillExpiry;
diff --git a/src/config.c b/src/config.c
index d4a312bcc..c9d7c3852 100644
--- a/src/config.c
+++ b/src/config.c
@@ -219,7 +219,7 @@ int AddAkiller;
bool LimitSessions;
int DefSessionLimit;
-int ExceptionExpiry;
+time_t ExceptionExpiry;
int MaxSessionKill;
int MaxSessionLimit;
int SessionAutoKillExpiry;
@@ -506,7 +506,7 @@ bool ValidateHostServ(ServerConfig *, const char *tag, const char *value, ValueI
bool ValidateLimitSessions(ServerConfig *, const char *tag, const char *value, ValueItem &data)
{
if (LimitSessions) {
- if (static_cast<std::string>(value) == "maxsessionlimit") {
+ if (static_cast<std::string>(value) == "maxsessionlimit" || static_cast<std::string>(value) == "exceptionexpiry") {
if (!data.GetInteger()) throw ConfigException(static_cast<std::string>("The value for <") + tag + ":" + value + "> must be non-zero when session limiting is enabled!");
}
}
@@ -671,6 +671,7 @@ int ServerConfig::Read(bool bail)
{"operserv", "limitsessions", "no", new ValueContainerBool(&LimitSessions), DT_BOOLEAN, NoValidation},
{"operserv", "defaultsessionlimit", "0", new ValueContainerInt(&DefSessionLimit), DT_INTEGER, NoValidation},
{"operserv", "maxsessionlimit", "0", new ValueContainerInt(&MaxSessionLimit), DT_INTEGER, ValidateLimitSessions},
+ {"operserv", "exceptionexpiry", "0", new ValueContainerTime(&ExceptionExpiry), DT_TIME, ValidateLimitSessions},
{NULL, NULL, NULL, NULL, DT_NOTHING, NoValidation}
};
/* These tags can occur multiple times, and therefore they have special code to read them
@@ -1266,7 +1267,6 @@ Directive directives[] = {
{"DefConOffMessage",
{{PARAM_STRING, PARAM_RELOAD, &DefConOffMessage}}},
{"EncModule", {{PARAM_STRING, 0, &EncModule}}},
- {"ExceptionExpiry", {{PARAM_TIME, PARAM_RELOAD, &ExceptionExpiry}}},
{"ExpireTimeout", {{PARAM_TIME, PARAM_RELOAD, &ExpireTimeout}}},
{"ForceForbidReason", {{PARAM_SET, PARAM_RELOAD, &ForceForbidReason}}},
{"HelpCoreModules", {{PARAM_STRING, PARAM_RELOAD, &HelpCoreModules}}},
@@ -1891,8 +1891,6 @@ int read_config(int reload)
if (LimitSessions) {
- CHECK(ExceptionExpiry);
-
if (MaxSessionKill && !SessionAutoKillExpiry)
SessionAutoKillExpiry = 30 * 60; /* 30 minutes */
}