summaryrefslogtreecommitdiff
path: root/usr.sbin/smtpd/smtp.c
diff options
context:
space:
mode:
authorEric Faurot <eric@cvs.openbsd.org>2012-09-14 16:38:54 +0000
committerEric Faurot <eric@cvs.openbsd.org>2012-09-14 16:38:54 +0000
commit3a16747c33e11599a59ddc0559925bbbfd4ffb14 (patch)
treedc113beb60c91d9aced9aea2c1c44a68e5892e89 /usr.sbin/smtpd/smtp.c
parent83df9bbd8bd7664e7ae2fb0a9202e368894e7020 (diff)
Check limits before allocating the session.
While there, move smtp_resume() in the if block; it makes more sense. ok gilles@
Diffstat (limited to 'usr.sbin/smtpd/smtp.c')
-rw-r--r--usr.sbin/smtpd/smtp.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/usr.sbin/smtpd/smtp.c b/usr.sbin/smtpd/smtp.c
index 4e3a7336a1e..0b03b7098ea 100644
--- a/usr.sbin/smtpd/smtp.c
+++ b/usr.sbin/smtpd/smtp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp.c,v 1.109 2012/08/29 16:26:17 gilles Exp $ */
+/* $OpenBSD: smtp.c,v 1.110 2012/09/14 16:38:53 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org>
@@ -519,18 +519,16 @@ smtp_new(struct listener *l)
if (env->sc_flags & SMTPD_SMTP_PAUSED)
fatalx("smtp_new: unexpected client");
- if ((s = calloc(1, sizeof(*s))) == NULL)
- fatal(NULL);
+ if (getdtablesize() - getdtablecount() < SMTP_FD_RESERVE)
+ return (NULL);
+
+ s = xcalloc(1, sizeof(*s), "smtp_new");
s->s_id = generate_uid();
s->s_l = l;
strlcpy(s->s_msg.tag, l->tag, sizeof(s->s_msg.tag));
SPLAY_INSERT(sessiontree, &env->sc_sessions, s);
stat_increment("smtp.session", 1);
-
- if (getdtablesize() - getdtablecount() < SMTP_FD_RESERVE) {
- return NULL;
- }
if (s->s_l->ss.ss_family == AF_INET)
stat_increment("smtp.session.inet4", 1);
@@ -553,8 +551,8 @@ smtp_destroy(struct session *session)
if (env->sc_flags & SMTPD_SMTP_DISABLED) {
log_warnx("smtp: fd exaustion over, re-enabling incoming connections");
env->sc_flags &= ~SMTPD_SMTP_DISABLED;
+ smtp_resume();
}
- smtp_resume();
}