Stan?k Lubo? (lubek) wrote:
> 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
> openwrt-devel@lists.openwrt.org
> http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Committed in r11065. Thanks

Travis
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to