mail/emailrelay: tune up initscript and config 5134/head
authorPaul Wassi <p.wassi@gmx.at>
Thu, 16 Nov 2017 10:38:11 +0000 (11:38 +0100)
committerPaul Wassi <p.wassi@gmx.at>
Fri, 17 Nov 2017 11:07:08 +0000 (12:07 +0100)
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 <p.wassi@gmx.at>
mail/emailrelay/Makefile
mail/emailrelay/files/emailrelay.config [new file with mode: 0644]
mail/emailrelay/files/emailrelay.init

index afe939adea48f4def81c295a81e6a3ea65a19c67..b9b595fe48a8c013b6516f8f97e1d0c15c184651 100644 (file)
@@ -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 (file)
index 0000000..1a4eb67
--- /dev/null
@@ -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'
+
index 9fc33996ece2ee4388656bddef649a978a126d69..5b78f2170a60869bc9723234d5e8560ca5a11444 100644 (file)
@@ -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
 }