From e83d0c0d8d117004addd8efc82f355abd512cea3 Mon Sep 17 00:00:00 2001
From: Paul Wassi
Date: Thu, 16 Nov 2017 10:00:26 +0100
Subject: [PATCH 1/2] mail/emailrelay: cosmetic fixes
This is just a cosmetic thing, therefore no increase of PKG_RELEASE.
- Trailing spaces and tabs
- Add newline to end of file
- Add License info to Makefile
- Move maintainer definition to PKG_MAINTAINER
Signed-off-by: Paul Wassi
---
mail/emailrelay/Makefile | 30 ++++++++++++++-------------
mail/emailrelay/files/emailrelay.auth | 2 +-
2 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/mail/emailrelay/Makefile b/mail/emailrelay/Makefile
index 592cb42e9c..afe939adea 100644
--- a/mail/emailrelay/Makefile
+++ b/mail/emailrelay/Makefile
@@ -14,11 +14,14 @@ PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.gz
PKG_SOURCE_URL:=@SF/emailrelay/$(PKG_VERSION)
PKG_HASH:=869a3e2d053237d7f63784acc25e748af2dbf2d9b9c5c48e4a5269d4e4b5bda0
+PKG_MAINTAINER:=Federico Di Marco
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_CONFIG_DEPENDS:=CONFIG_EMAILRELAY_SUPPORT_VERBOSE_DBG CONFIG_EMAILRELAY_SSL
+PKG_CONFIG_DEPENDS:=CONFIG_EMAILRELAY_SUPPORT_VERBOSE_DBG CONFIG_EMAILRELAY_SSL
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=COPYING
#include $(INCLUDE_DIR)/uclibc++.mk # $(CXX_DEPENDS)
include $(INCLUDE_DIR)/package.mk
@@ -26,10 +29,9 @@ include $(INCLUDE_DIR)/package.mk
define Package/emailrelay
SECTION:=mail
CATEGORY:=Mail
- DEPENDS:=+EMAILRELAY_SSL:libopenssl +libstdcpp
+ DEPENDS:=+EMAILRELAY_SSL:libopenssl +libstdcpp
TITLE:=A simple SMTP proxy and MTA
URL:=http://emailrelay.sourceforge.net/
- MAINTAINER:=Federico Di Marco
MENU:=1
endef
@@ -42,7 +44,7 @@ config EMAILRELAY_SUPPORT_VERBOSE_DBG
help
Enables support for extended logging (must also be explicitely enabled by using command line switch --debug when starting emailrelay)
-config EMAILRELAY_SSL
+config EMAILRELAY_SSL
bool "Enable support for OpenSSL"
depends on PACKAGE_emailrelay
default y
@@ -54,14 +56,14 @@ endef
define Package/emailrelay/description
- Emailrelay is a simple SMTP proxy and store-and-forward message transfer agent (MTA).
-
- When running as a proxy all e-mail messages can be passed through
- a user-defined program, such as a spam filter, which can drop,
- re-address or edit messages as they pass through. When running
- as a store-and-forward MTA incoming messages are stored in a
- local spool directory, and then forwarded to the next SMTP
- server on request.
+ Emailrelay is a simple SMTP proxy and store-and-forward message transfer agent (MTA).
+
+ When running as a proxy all e-mail messages can be passed through
+ a user-defined program, such as a spam filter, which can drop,
+ re-address or edit messages as they pass through. When running
+ as a store-and-forward MTA incoming messages are stored in a
+ local spool directory, and then forwarded to the next SMTP
+ server on request.
endef
@@ -75,7 +77,7 @@ CONFIGURE_ARGS += \
--enable-testing=no
CONFIGURE_VARS += \
- CXXFLAGS="$$$$CXXFLAGS -fno-rtti"
+ CXXFLAGS="$$$$CXXFLAGS -fno-rtti"
ifeq ($(CONFIG_EMAILRELAY_SSL),y)
@@ -94,7 +96,7 @@ endif
ifeq ($(CONFIG_OPENSSL_WITH_SSL3),y)
CONFIGURE_VARS += \
- CXXFLAGS="$$$$CXXFLAGS -DSSL3_SUPPORT"
+ CXXFLAGS="$$$$CXXFLAGS -DSSL3_SUPPORT"
endif
define Package/emailrelay/install
diff --git a/mail/emailrelay/files/emailrelay.auth b/mail/emailrelay/files/emailrelay.auth
index 3d11bf0f2b..8bc9594592 100644
--- a/mail/emailrelay/files/emailrelay.auth
+++ b/mail/emailrelay/files/emailrelay.auth
@@ -13,4 +13,4 @@
#
#NONE server 192.168.1.* keyword
#LOGIN client smtpuser@smtpserver smtppassword
-#LOGIN server user1 secret
\ No newline at end of file
+#LOGIN server user1 secret
From 084a9ee0c130d20b720559be03bc527f02a297f4 Mon Sep 17 00:00:00 2001
From: Paul Wassi
Date: Thu, 16 Nov 2017 11:38:11 +0100
Subject: [PATCH 2/2] mail/emailrelay: tune up initscript and config
Previously, configuration of emailrelay was done by fiddling around
with the commandline inside the initscript. Introduce a config file
in /etc/config for basic configuration and at the same time switch
to a procd-style initscript.
Signed-off-by: Paul Wassi
---
mail/emailrelay/Makefile | 7 +--
mail/emailrelay/files/emailrelay.config | 28 +++++++++++
mail/emailrelay/files/emailrelay.init | 65 ++++++++++++++++++++++---
3 files changed, 90 insertions(+), 10 deletions(-)
create mode 100644 mail/emailrelay/files/emailrelay.config
diff --git a/mail/emailrelay/Makefile b/mail/emailrelay/Makefile
index afe939adea..b9b595fe48 100644
--- a/mail/emailrelay/Makefile
+++ b/mail/emailrelay/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=emailrelay
PKG_VERSION:=1.9
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.gz
PKG_SOURCE_URL:=@SF/emailrelay/$(PKG_VERSION)
@@ -68,6 +68,7 @@ endef
define Package/emailrelay/conffiles
+/etc/config/emailrelay
/etc/emailrelay.auth
endef
@@ -106,10 +107,10 @@ define Package/emailrelay/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-passwd $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-poke $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/main/emailrelay-submit $(1)/usr/bin/
- $(INSTALL_DIR) $(1)/tmp/spool
- $(INSTALL_DIR) $(1)/tmp/spool/emailrelay
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) files/$(PKG_NAME).auth $(1)/etc/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) files/$(PKG_NAME).config $(1)/etc/config/$(PKG_NAME)
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME)
endef
diff --git a/mail/emailrelay/files/emailrelay.config b/mail/emailrelay/files/emailrelay.config
new file mode 100644
index 0000000000..1a4eb6758f
--- /dev/null
+++ b/mail/emailrelay/files/emailrelay.config
@@ -0,0 +1,28 @@
+config emailrelay 'server'
+ option enabled '0'
+ option mode 'server'
+ option port '25'
+ option remote_clients '0'
+# option server_tls '/etc/path/to/certificate'
+# option server_auth '/etc/emailrelay.auth'
+# option extra_cmdline ''
+
+config emailrelay 'proxy'
+ option enabled '0'
+ option mode 'proxy'
+ option smarthost '192.0.2.1:25'
+ option port '25'
+ option remote_clients '0'
+# option server_tls '/etc/path/to/certificate'
+# option server_auth '/etc/emailrelay.auth'
+# option client_tls '1'
+# option client_auth '/etc/emailrelay.auth'
+# option extra_cmdline ''
+
+config emailrelay 'cmdline'
+ option enabled '0'
+ option mode 'cmdline'
+ # specify all arguments that should be passed to emailrelay here
+ # see http://emailrelay.sourceforge.net/reference.html for command line reference
+ option extra_cmdline '--some-other --cmdline-options'
+
diff --git a/mail/emailrelay/files/emailrelay.init b/mail/emailrelay/files/emailrelay.init
index 9fc33996ec..5b78f2170a 100644
--- a/mail/emailrelay/files/emailrelay.init
+++ b/mail/emailrelay/files/emailrelay.init
@@ -1,15 +1,66 @@
#!/bin/sh /etc/rc.common
-#see http://emailrelay.sourceforge.net/reference.html for command line reference
START=90
+USE_PROCD=1
+PROG=/usr/bin/emailrelay
+NAME=emailrelay
-start() {
- logger -t 'emailrelay' "Starting emailrelay service."
- service_start /usr/bin/emailrelay --as-server --poll 60 --forward-to smtpserver:smtpport --spool-dir /tmp --client-tls --client-auth /etc/emailrelay.auth --server-auth /etc/emailrelay.auth --log
+
+emailrelay_instance()
+{
+ local enabled mode port remote_clients server_tls server_auth extra_cmdline smarthost client_tls client_auth
+
+ config_get_bool enabled "$1" enabled
+ config_get mode "$1" mode
+ config_get port "$1" port
+ config_get_bool remote_clients "$1" remote_clients
+ config_get server_tls "$1" server_tls
+ config_get server_auth "$1" server_auth
+ config_get extra_cmdline "$1" extra_cmdline
+ config_get smarthost "$1" smarthost
+ config_get_bool client_tls "$1" client_tls
+ config_get client_auth "$1" client_auth
+
+
+ [ "$enabled" = 0 ] && return 1
+
+ procd_open_instance
+ procd_set_param command "$PROG" --no-daemon
+
+ case "$mode" in
+ "server"|\
+ "proxy")
+ procd_append_param command "--as-${mode}"
+ [ -n "$smarthost" ] && procd_append_param command "$smarthost"
+ [ -n "$port" ] && procd_append_param command --port "$port"
+ [ "$remote_clients" = 1 ] && procd_append_param command --remote-clients
+ [ -n "$server_tls" ] && procd_append_param command --server-tls "$server_tls"
+ [ -n "$server_auth" ] && procd_append_param command --server-auth "$server_auth"
+ [ "$client_tls" = 1 ] && procd_append_param command --client-tls
+ [ -n "$client_auth" ] && procd_append_param command --client-auth "$client_auth"
+ ;;
+ "cmdline")
+ # empty by intention (just append extra_cmdline)
+ ;;
+ *)
+ echo "no mode specified"
+ return 1
+ ;;
+ esac
+
+ [ -n "$extra_cmdline" ] && procd_append_param command $extra_cmdline
+
+ procd_set_param respawn
+
+ procd_close_instance
}
-stop() {
- logger -t 'emailrelay' "Stopping emailrelay service."
- service_stop /usr/bin/emailrelay
+
+start_service()
+{
+ [ ! -d /var/spool/emailrelay ] && mkdir -p /var/spool/emailrelay
+
+ config_load "${NAME}"
+ config_foreach emailrelay_instance emailrelay
}