Commit Diff


commit - c3e8d2568710c9e580b7772942d7a8137ceed077
commit + 0a1c0aa333ea4415f00eea875bc6dfe967e2cfda
blob - 42ea7886024833958ca16a5344e7c82178f0163a
blob + 87884c2751b47f99d2b50af444e1b2246d4f3ff7
--- opensmtpd.c
+++ opensmtpd.c
@@ -41,15 +41,15 @@
 
 #define NITEMS(x) (sizeof(x) / sizeof(*x))
 
-enum disconnect {
-	DISCONNECT_FALSE = 0,
-	DISCONNECT_SERVERERROR,
-	DISCONNECT_SEND
+enum osmtpd_session_status {
+	SESSION_OK = 0,
+	SESSION_ERROR,
+	SESSION_DISCONNECTED
 };
 
 struct osmtpd_session {
 	struct osmtpd_ctx ctx;		/* Must remain first element */
-	enum disconnect disconnect;
+	enum osmtpd_session_status status;
 	RB_ENTRY(osmtpd_session) entry;
 };
 
@@ -1204,7 +1204,7 @@ osmtpd_newline(struct io *io, int ev, __unused void *a
 			if (oncreatecb_session != NULL)
 				if ((ctx->ctx.local_session =
 				    oncreatecb_session(&ctx->ctx)) == NULL)
-					ctx->disconnect = DISCONNECT_SERVERERROR;
+					ctx->status = SESSION_ERROR;
 		}
 		ctx->ctx.type = type;
 		ctx->ctx.phase = phase;
@@ -1232,7 +1232,7 @@ osmtpd_newline(struct io *io, int ev, __unused void *a
 				osmtpd_errx(1, "Invalid line received: invalid "
 				    "token: %s", linedup);
 			line = end + 1;
-			if (ctx->disconnect == DISCONNECT_SERVERERROR)
+			if (ctx->status == SESSION_ERROR)
 				osmtpd_filter_disconnect(&ctx->ctx,
 				    "internal server error");
 		}
@@ -1261,7 +1261,7 @@ osmtpd_noargs(struct osmtpd_callback *cb, struct osmtp
 {
 	void (*f)(struct osmtpd_ctx *);
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx);
 }
 
@@ -1271,7 +1271,7 @@ osmtpd_onearg(struct osmtpd_callback *cb, struct osmtp
 {
 	void (*f)(struct osmtpd_ctx *, const char *);
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, line);
 }
 
@@ -1292,7 +1292,7 @@ osmtpd_connect(struct osmtpd_callback *cb, struct osmt
 
 	osmtpd_addrtoss(address, &ss, 0, linedup);
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, hostname, &ss);
 }
 
@@ -1308,7 +1308,7 @@ osmtpd_identify(struct osmtpd_callback *cb, struct osm
 			osmtpd_err(1, "strdup");
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, identity);
 }
 
@@ -1356,7 +1356,7 @@ osmtpd_link_connect(struct osmtpd_callback *cb, struct
 		memcpy(&session->ctx.src, &src, sizeof(session->ctx.src));
 		memcpy(&session->ctx.dst, &dst, sizeof(session->ctx.dst));
 	}
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, rdns, fcrdns, &src, &dst);
 }
 
@@ -1368,7 +1368,7 @@ osmtpd_link_disconnect(struct osmtpd_callback *cb,
 	void (*f)(struct osmtpd_ctx *);
 	size_t i;
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx);
 
 	RB_REMOVE(osmtpd_sessions, &osmtpd_sessions, session);
@@ -1398,7 +1398,7 @@ osmtpd_link_greeting(struct osmtpd_callback *cb, struc
 			osmtpd_err(1, NULL);
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, identity);
 }
 
@@ -1414,7 +1414,7 @@ osmtpd_link_identify(struct osmtpd_callback *cb, struc
 			osmtpd_err(1, NULL);
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, identity);
 }
 
@@ -1429,7 +1429,7 @@ osmtpd_link_tls(struct osmtpd_callback *cb, struct osm
 			osmtpd_err(1, NULL);
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, ciphers);
 }
 
@@ -1459,7 +1459,7 @@ osmtpd_link_auth(struct osmtpd_callback *cb, struct os
 			osmtpd_err(1, NULL);
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, username, s);
 }
 
@@ -1488,10 +1488,10 @@ osmtpd_tx_begin(struct osmtpd_callback *cb, struct osm
 	if (oncreatecb_message != NULL) {
 		session->ctx.local_message = oncreatecb_message(&session->ctx);
 		if (session->ctx.local_message == NULL)
-			session->disconnect = DISCONNECT_SERVERERROR;
+			session->status = SESSION_ERROR;
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, imsgid);
 }
 
@@ -1536,7 +1536,7 @@ osmtpd_tx_mail(struct osmtpd_callback *cb, struct osmt
 			osmtpd_err(1, NULL);
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid, mailfrom, status);
 }
 
@@ -1592,7 +1592,7 @@ osmtpd_tx_rcpt(struct osmtpd_callback *cb, struct osmt
 		session->ctx.rcptto[i + 1] = NULL;
 	}
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid, rcptto, status);
 }
 
@@ -1627,7 +1627,7 @@ osmtpd_tx_envelope(struct osmtpd_callback *cb, struct 
 	if (cb->storereport)
 		session->ctx.evpid = evpid;
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid, evpid);
 }
 
@@ -1654,7 +1654,7 @@ osmtpd_tx_data(struct osmtpd_callback *cb, struct osmt
 		    linedup);
 	params = end + 1;
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid, osmtpd_strtostatus(params, linedup));
 }
 
@@ -1688,7 +1688,7 @@ osmtpd_tx_commit(struct osmtpd_callback *cb, struct os
 		osmtpd_errx(1, "Invalid line received: invalid msg size: %s",
 		    linedup);
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid, msgsz);
 
 	if (ondeletecb_message != NULL && session->ctx.local_message != NULL) {
@@ -1729,7 +1729,7 @@ osmtpd_tx_rollback(struct osmtpd_callback *cb, struct 
 		osmtpd_errx(1, "Invalid line received: invalid msgid: %s",
 		    linedup);
 
-	if ((f = cb->cb) != NULL && session->disconnect == DISCONNECT_FALSE)
+	if ((f = cb->cb) != NULL && session->status == SESSION_OK)
 		f(&session->ctx, msgid);
 
 	if (ondeletecb_message != NULL && session->ctx.local_message != NULL) {
@@ -1752,7 +1752,7 @@ osmtpd_filter_proceed(struct osmtpd_ctx *ctx)
 {
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (ctx->version_major == 0 && ctx->version_minor < 5)
@@ -1769,7 +1769,7 @@ osmtpd_filter_reject(struct osmtpd_ctx *ctx, int code,
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (code < 200 || code > 599)
@@ -1794,7 +1794,7 @@ osmtpd_filter_reject_enh(struct osmtpd_ctx *ctx, int c
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (code < 200 || code > 599)
@@ -1826,7 +1826,7 @@ osmtpd_filter_disconnect(struct osmtpd_ctx *ctx, const
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (ctx->version_major == 0 && ctx->version_minor < 5)
@@ -1839,7 +1839,7 @@ osmtpd_filter_disconnect(struct osmtpd_ctx *ctx, const
 	io_vprintf(io_stdout, reason, ap);
 	va_end(ap);
 	io_printf(io_stdout, "\n");
-	session->disconnect = DISCONNECT_SEND;
+	session->status = SESSION_DISCONNECTED;
 }
 
 void
@@ -1849,7 +1849,7 @@ osmtpd_filter_disconnect_enh(struct osmtpd_ctx *ctx, i
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (class <= 2 || class >= 5)
@@ -1870,7 +1870,7 @@ osmtpd_filter_disconnect_enh(struct osmtpd_ctx *ctx, i
 	io_vprintf(io_stdout, reason, ap);
 	va_end(ap);
 	io_printf(io_stdout, "\n");
-	session->disconnect = DISCONNECT_SEND;
+	session->status = SESSION_DISCONNECTED;
 }
 
 void
@@ -1879,7 +1879,7 @@ osmtpd_filter_rewrite(struct osmtpd_ctx *ctx, const ch
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (ctx->version_major == 0 && ctx->version_minor < 5)
@@ -1900,7 +1900,7 @@ osmtpd_filter_dataline(struct osmtpd_ctx *ctx, const c
 	struct osmtpd_session *session = (struct osmtpd_session *)ctx;
 	va_list ap;
 
-	if (session->disconnect == DISCONNECT_SEND)
+	if (session->status == SESSION_DISCONNECTED)
 		return;
 
 	if (ctx->version_major == 0 && ctx->version_minor < 5)