[prev in list] [next in list] [prev in thread] [next in thread]
List: cyrus-devel
Subject: FR: Reaching limits should be logged (issues 2913)
From: Sergey <a_s_y () sama ! ru>
Date: 2019-11-16 12:32:23
Message-ID: 201911161632.23641.a_s_y () sama ! ru
[Download RAW message or body]
Hello.
Some limits can be configured in imapd.conf (such as maxlogins_per_host,
maxlogins_per_user, popminpoll). Reaching limits should be logged for
properly diagnostic: https://github.com/cyrusimap/cyrus-imapd/issues/2913
I created this issue but encounter a problem to add patches. I put them
here.
--
Regards,
Sergey
["cyrus-2.5.13-logging-limit.diff" (text/x-diff)]
diff --git a/imap/imapd.c b/imap/imapd.c
index ad29a45da..69f85e2a2 100644
--- a/imap/imapd.c
+++ b/imap/imapd.c
@@ -2354,17 +2354,24 @@ static int checklimits(const char *tag)
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(imapd_out, "%s NO Too many open connections (", tag);
if (limits.maxhost) {
prot_printf(imapd_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, imapd_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, imapd_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(imapd_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, imapd_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, imapd_userid);
}
prot_printf(imapd_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
free(imapd_userid);
imapd_userid = NULL;
auth_freestate(imapd_authstate);
diff --git a/imap/nntpd.c b/imap/nntpd.c
index 9d1523bb0..a087059f9 100644
--- a/imap/nntpd.c
+++ b/imap/nntpd.c
@@ -2249,18 +2249,25 @@ static void cmd_authinfo_sasl(char *cmd, char *mech, char *resp)
limits.userid = nntp_userid;
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(nntp_out,
"452 Too many open connections (");
if (limits.maxhost) {
prot_printf(nntp_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, nntp_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, nntp_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(nntp_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, nntp_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, nntp_userid);
}
prot_printf(nntp_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
reset_saslconn(&nntp_saslconn);
free(nntp_userid);
nntp_userid = NULL;
diff --git a/imap/pop3d.c b/imap/pop3d.c
index ebe4db37f..813f6ea36 100644
--- a/imap/pop3d.c
+++ b/imap/pop3d.c
@@ -1938,6 +1938,8 @@ int openinbox(void)
if ((minpoll = config_getint(IMAPOPT_POPMINPOLL)) &&
popd_mailbox->i.pop3_last_login + 60*minpoll > popd_login_time) {
+ syslog(LOG_ERR, "%s: Logins must be at least %d minute%s apart",
+ inboxname, minpoll, minpoll > 1 ? "s" : "");
prot_printf(popd_out,
"-ERR [LOGIN-DELAY] Logins must be at least %d minute%s apart\r\n",
minpoll, minpoll > 1 ? "s" : "");
@@ -1990,18 +1992,25 @@ int openinbox(void)
limits.userid = proxy_userid;
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(popd_out,
"-ERR Too many open connections (");
if (limits.maxhost) {
prot_printf(popd_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, popd_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, popd_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(popd_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, proxy_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, popd_userid);
}
prot_printf(popd_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
mailbox_close(&popd_mailbox);
goto fail;
}
["cyrus-3.0.11-logging-limit.diff" (text/x-diff)]
diff --git a/imap/imapd.c b/imap/imapd.c
index 75ab0563f..2e6bcd918 100644
--- a/imap/imapd.c
+++ b/imap/imapd.c
@@ -2567,17 +2567,24 @@ static int checklimits(const char *tag)
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(imapd_out, "%s NO Too many open connections (", tag);
if (limits.maxhost) {
prot_printf(imapd_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, imapd_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, imapd_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(imapd_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, imapd_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, imapd_userid);
}
prot_printf(imapd_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
free(imapd_userid);
imapd_userid = NULL;
auth_freestate(imapd_authstate);
diff --git a/imap/nntpd.c b/imap/nntpd.c
index 34ce36b12..3380396c1 100644
--- a/imap/nntpd.c
+++ b/imap/nntpd.c
@@ -2281,18 +2281,25 @@ static void cmd_authinfo_sasl(char *cmd, char *mech, char *resp)
limits.userid = nntp_userid;
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(nntp_out,
"400 Too many open connections (");
if (limits.maxhost) {
prot_printf(nntp_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, nntp_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, nntp_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(nntp_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, nntp_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, nntp_userid);
}
prot_printf(nntp_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
reset_saslconn(&nntp_saslconn);
free(nntp_userid);
nntp_userid = NULL;
diff --git a/imap/pop3d.c b/imap/pop3d.c
index 0b499222b..3f3043342 100644
--- a/imap/pop3d.c
+++ b/imap/pop3d.c
@@ -1943,6 +1943,8 @@ int openinbox(void)
if ((minpoll = config_getint(IMAPOPT_POPMINPOLL)) &&
popd_mailbox->i.pop3_last_login + 60*minpoll > popd_login_time) {
+ syslog(LOG_ERR, "%s: Logins must be at least %d minute%s apart",
+ mbname_intname(mbname), minpoll, minpoll > 1 ? "s" : "");
prot_printf(popd_out,
"-ERR [LOGIN-DELAY] Logins must be at least %d minute%s apart\r\n",
minpoll, minpoll > 1 ? "s" : "");
@@ -1994,18 +1996,25 @@ int openinbox(void)
limits.userid = popd_userid;
if (proc_checklimits(&limits)) {
const char *sep = "";
+ char part1[1024] = "";
+ char part2[1024] = "";
prot_printf(popd_out,
"-ERR Too many open connections (");
if (limits.maxhost) {
prot_printf(popd_out, "%s%d of %d from %s", sep,
limits.host, limits.maxhost, popd_clienthost);
+ snprintf(part1, sizeof(part1), "%s%d of %d from %s", sep,
+ limits.host, limits.maxhost, popd_clienthost);
sep = ", ";
}
if (limits.maxuser) {
prot_printf(popd_out, "%s%d of %d for %s", sep,
limits.user, limits.maxuser, popd_userid);
+ snprintf(part2, sizeof(part2), "%s%d of %d for %s", sep,
+ limits.user, limits.maxuser, popd_userid);
}
prot_printf(popd_out, ")\r\n");
+ syslog(LOG_ERR, "Too many open connections (%s%s)", part1, part2);
mailbox_close(&popd_mailbox);
goto fail;
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic