A new package smtptrapd to provide a (secondary) SMTP server returning 4xx soft error. Signed-off-by: Lubos Stanek (lubek) <lubek@lubek.name>
git-svn-id: svn://svn.openwrt.org/openwrt/packages@11065 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
be30da719d
commit
a931d77737
51
net/smtptrapd/Makefile
Normal file
51
net/smtptrapd/Makefile
Normal file
@ -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))
|
144
net/smtptrapd/files/smtptrapd.init
Normal file
144
net/smtptrapd/files/smtptrapd.init
Normal file
@ -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
|
||||
}
|
12
net/smtptrapd/patches/200-missing_opt.patch
Normal file
12
net/smtptrapd/patches/200-missing_opt.patch
Normal file
@ -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':
|
||||
|
Loading…
x
Reference in New Issue
Block a user