Commit Diff


commit - 53b354a9b87cfe0696ef8411dec25f45b7ca6f41
commit + 2029083fdc575762f4fc67364b8aa67034070023
blob - 265ff18659139017ffbe529bc5a264b0a249a2cd
blob + a73487daca0c4c739ebea7f7c7267d404b7fcdd1
--- Symbols.list
+++ Symbols.list
@@ -1,3 +1,4 @@
+osmtpd_register_conf
 osmtpd_register_filter_connect
 osmtpd_register_filter_helo
 osmtpd_register_filter_ehlo
blob - 539bac7cc375424390dff3068a761144925e0099
blob + dd68a3c71f89cb879d1ce0683a65d07f7fd8f474
--- opensmtpd.c
+++ opensmtpd.c
@@ -103,6 +103,7 @@ static void *(*oncreatecb_session)(struct osmtpd_ctx *
 static void (*ondeletecb_session)(struct osmtpd_ctx *, void *) = NULL;
 static void *(*oncreatecb_message)(struct osmtpd_ctx *) = NULL;
 static void (*ondeletecb_message)(struct osmtpd_ctx *, void *) = NULL;
+static void (*conf_cb)(const char *, const char *);
 
 static struct osmtpd_callback osmtpd_callbacks[] = {
 	{
@@ -538,6 +539,12 @@ static int session_timeout = 300;
 
 RB_HEAD(osmtpd_sessions, osmtpd_session) osmtpd_sessions = RB_INITIALIZER(NULL);
 RB_PROTOTYPE_STATIC(osmtpd_sessions, osmtpd_session, entry, osmtpd_session_cmp);
+
+void
+osmtpd_register_conf(void (*cb)(const char *, const char *))
+{
+	conf_cb = cb;
+}
 
 void
 osmtpd_register_filter_connect(void (*cb)(struct osmtpd_ctx *, const char *,
@@ -1034,12 +1041,15 @@ osmtpd_newline(struct io *io, int ev, __unused void *a
 			type = OSMTPD_TYPE_REPORT;
 		else if (strcmp(line, "config") == 0) {
 			line = end;
-			if (strcmp(line, "ready") == 0)
+			if (strcmp(line, "ready") == 0) {
+				conf_cb(NULL, NULL);
 				continue;
+			}
 			if ((end = strchr(line, '|')) == NULL)
 				osmtpd_errx(1, "Invalid line received: missing "
 				    "key: %s", linedup);
 			end++[0] = '\0';
+			conf_cb(line, end);
 			if (strcmp(line, "smtp-session-timeout") == 0) {
 				session_timeout = strtonum(end, 0, INT_MAX,
 				    &errstr);
blob - 26546428978f8cb26810f3fb5620e67180f3ba0f
blob + eef32374977851e19c0518f7be2c250d9ff3fa10
--- opensmtpd.h
+++ opensmtpd.h
@@ -107,6 +107,7 @@ struct osmtpd_ctx {
 	void			*local_message;
 };
 
+void osmtpd_register_conf(void (*)(const char *, const char *));
 void osmtpd_register_filter_connect(void (*)(struct osmtpd_ctx *, const char *,
     struct sockaddr_storage *));
 void osmtpd_register_filter_helo(void (*)(struct osmtpd_ctx *, const char *));
blob - 3d7c908e43d641cb0dcddbee5df35d0ac5910b46
blob + 97c9f92d6b8fd947359f10a616abc86fb7de7a87
--- shlib_version
+++ shlib_version
@@ -1,2 +1,2 @@
 major=0
-minor=1
+minor=0