A new package smtptrapd to provide a (secondary) SMTP server 
returning 4xx soft error.

The init script is extra enhanced to work with multiple 
configurations (named sections), to provide additional 
rc commands, the commands help and an example configuration.

Signed-off-by: Lubos Stanek (lubek) <[EMAIL PROTECTED]>

Index: packages/net/smtptrapd/files/smtptrapd.init
===================================================================
--- packages/net/smtptrapd/files/smtptrapd.init (revision 0)
+++ packages/net/smtptrapd/files/smtptrapd.init (revision 0)
@@ -0,0 +1,144 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+
+START=90
+
+NAME="smtptrapd"
+DAEMON="/usr/sbin/$NAME"
+RUN_D="/var/run"
+
+EXTRA_COMMANDS="list status exconf"
+EXTRA_HELP="   list    Lists available configurations
+       status  Prints status of the service
+       exconf  Shows an example config file
+
+The actions start, stop, restart, reload, status operate
+globally on all configurations unless the particular
+configuration has been provided as the next parameter.
+"
+
+check_req() {
+       if [ -x "$DAEMON" ]; then
+               return 0
+       else
+               echo "The daemon binary is missing!"
+               return 1
+       fi
+}
+
+check_section() {
+       echo "$1" | grep -vq '^cfg[[:xdigit:]]\{6\}$'
+}
+
+start_service() {
+       local cfg="$1"
+       local named="$2"
+       check_section "$cfg" || return 1
+       [ "$named" != "" -a "$cfg" != "$named" ] && return 0
+       local args listen_ip banner_host username num_threads listen_port 
accept_queue_len
+       config_get listen_ip "$cfg" listen_ip
+       [ -n "$listen_ip" ] && append args "-l $listen_ip"
+       config_get listen_port "$cfg" listen_port
+       [ -n "$listen_port" ] && append args "-p $listen_port"
+       config_get username "$cfg" username
+       [ -n "$username" ] && append args "-u $username"
+       config_get banner_host "$cfg" banner_host
+       [ -n "$banner_host" ] && append args "-b \"$banner_host\""
+       config_get num_threads "$cfg" num_threads
+       [ -n "$num_threads" ] && append args "-t $num_threads"
+       config_get accept_queue_len "$cfg" accept_queue_len
+       [ -n "$accept_queue_len" ] && append args "-m $accept_queue_len"
+       append args "-f ${RUN_D}/${NAME}-${cfg}.pid"
+       eval "$DAEMON $args"
+}
+
+stop_service() {
+       local cfg="$1"
+       local named="$2"
+       check_section "$cfg" || return 1
+       [ "$named" != "" -a "$cfg" != "$named" ] && return 0
+       local PID_F="${RUN_D}/${NAME}-${cfg}.pid"
+       [ -f $PID_F ] && {
+               local ppid=$(cat $PID_F)
+               ps | grep "^[[:space:]]*$ppid[[:space:]]" | grep -q 
"[s]mtptrapd\>" && kill $ppid
+               rm -f $PID_F
+       }
+}
+
+status_service() {
+       local cfg="$1"
+       local named="$2"
+       check_section "$cfg" || return 1
+       [ "$named" != "" -a "$cfg" != "$named" ] && return 0
+       local PID_F="${RUN_D}/${NAME}-${cfg}.pid"
+       [ -f $PID_F ] && {
+               local ppid=$(cat $PID_F)
+               if ps | grep "^[[:space:]]*$ppid[[:space:]]" | grep -q 
"[s]mtptrapd\>"; then
+                       echo "$cfg (pid $ppid) is running"
+               else
+                       echo "$cfg is not running (stale pid file exists)"
+               fi
+       }
+}
+
+list_service() {
+       local cfg="$1"
+       check_section "$cfg" || return 1
+       echo "  $cfg"
+}
+
+start() {
+       local svc_cfg="$1"
+       check_req || return 1
+       [ ! -d $RUN_D ] && mkdir -p $RUN_D
+       config_load "$NAME"
+       config_foreach start_service "$NAME" "$svc_cfg"
+}
+
+stop() {
+       local svc_cfg="$1"
+       check_req || return 1
+       config_load "/etc/config/$NAME"
+       if [ -n "$svc_cfg" ]; then
+               config_foreach stop_service "$NAME" "$svc_cfg"
+       else
+               config_foreach stop_service "$NAME"
+               local pf
+               for pf in $(ls ${RUN_D}/${NAME}*.pid 2>/dev/null); do
+                       local ppid=$(cat $pf)
+                       ps | grep "^[[:space:]]*$ppid[[:space:]]" | grep -q 
"[s]mtptrapd\>" && kill "$ppid"
+                       rm -f $pf
+               done
+       fi
+}
+
+status() {
+       local svc_cfg="$1"
+       check_req || return 1
+       config_load "$NAME"
+       config_foreach status_service "$NAME" "$svc_cfg"
+}
+
+list() {
+       check_req || return 1
+       echo "Available $NAME configurations:"
+       config_load "$NAME"
+       config_foreach list_service "$NAME"
+}
+
+exconf() {
+       echo "An example configuration in /etc/config/$NAME:" >&2
+       cat <<EOF
+config '$NAME' 'myfailhost'
+       option 'num_threads' '1'
+
+# The init script operates only with named sections
+# All options (default values)
+#      option 'banner_host' '<hostname>'
+#      option 'username' 'nobody'
+#      option 'listen_ip' '<all addresses>'
+#      option 'listen_port' '25'
+#      option 'num_threads' '10'
+#      option 'accept_queue_len' '100'
+EOF
+}

Property changes on: packages/net/smtptrapd/files/smtptrapd.init
___________________________________________________________________
Name: svn:executable
   + *

Index: packages/net/smtptrapd/patches/200-missing_opt.patch
===================================================================
--- packages/net/smtptrapd/patches/200-missing_opt.patch        (revision 0)
+++ packages/net/smtptrapd/patches/200-missing_opt.patch        (revision 0)
@@ -0,0 +1,12 @@
+diff -urN smtptrapd-1.5.orig/smtptrapd.c smtptrapd-1.5.dev/smtptrapd.c
+--- smtptrapd-1.5.orig/smtptrapd.c     2008-04-15 12:56:20.000000000 +0200
++++ smtptrapd-1.5.dev/smtptrapd.c      2008-04-16 18:23:03.000000000 +0200
+@@ -545,7 +545,7 @@
+       config.threads = NUM_CONSUMER;
+       config.max_queue_len = MAX_QUEUE_LEN;
+ 
+-      while ((c = getopt(argc, argv, "hc:l:p:b:u:m:t:")) != -1) {
++      while ((c = getopt(argc, argv, "hc:l:p:b:u:m:t:f:")) != -1) {
+               switch (c) {
+                       case 'h':
+ 
Index: packages/net/smtptrapd/Makefile
===================================================================
--- packages/net/smtptrapd/Makefile     (revision 0)
+++ packages/net/smtptrapd/Makefile     (revision 0)
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=smtptrapd
+PKG_VERSION:=1.5
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://smtptrapd.inodes.org
+PKG_MD5SUM:=edc5f2f3ea9f9bdd9e0f479a58903bf1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/smtptrapd
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libpthread
+  TITLE:=SMTP Trap Daemon
+  URL:=http://smtptrapd.inodes.org/
+endef
+
+define Package/smtptrapd/description
+       The smtptrapd program is a multi-threaded daemon that provides 
+       a RFC 2821 compliant SMTP service that always returns a 4xx soft 
+       error to the RCPT TO verb.
+endef
+
+define Build/Compile
+       $(TARGET_CC) \
+               $(TARGET_CFLAGS) \
+               -I $(STAGING_DIR)/usr/include \
+               -D_REENTRANT \
+               $(PKG_BUILD_DIR)/smtptrapd.c \
+               -o $(PKG_BUILD_DIR)/smtptrapd \
+               -L$(STAGING_DIR)/usr/lib/ -lpthread
+endef
+       
+define Package/smtptrapd/install
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/smtptrapd.init $(1)/etc/init.d/smtptrapd
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/smtptrapd $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,smtptrapd))
_______________________________________________
openwrt-devel mailing list
[email protected]
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to