diff --git a/net/xinetd/Makefile b/net/xinetd/Makefile index a10500910..a63a40b02 100644 --- a/net/xinetd/Makefile +++ b/net/xinetd/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xinetd PKG_VERSION:=2.3.15 -PKG_RELEASE:=5 +PKG_RELEASE:=6 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/xinetd-org/xinetd/archive @@ -39,8 +39,7 @@ define Package/xinetd/description endef define Package/xinetd/conffiles -/etc/xinetd.conf -/etc/xinetd.d/ +/etc/config/xinetd endef TARGET_CFLAGS += -DNO_RPC @@ -58,11 +57,11 @@ CONFIGURE_VARS += \ define Package/xinetd/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xinetd $(1)/usr/sbin/ - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/xinetd.conf $(1)/etc/xinetd.conf - $(INSTALL_DIR) $(1)/etc/xinetd.d + $(INSTALL_DIR) $(1)/etc/config/ + $(INSTALL_DATA) ./files/xinetd.uci.conf.sample $(1)/etc/config/xinetd $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/xinetd.init $(1)/etc/init.d/xinetd + $(INSTALL_DIR) $(1)/etc/xinetd.d endef $(eval $(call BuildPackage,xinetd)) diff --git a/net/xinetd/files/xinetd.conf b/net/xinetd/files/xinetd.conf deleted file mode 100644 index bd473ed3d..000000000 --- a/net/xinetd/files/xinetd.conf +++ /dev/null @@ -1,6 +0,0 @@ -defaults -{ - -} - -includedir /etc/xinetd.d diff --git a/net/xinetd/files/xinetd.init b/net/xinetd/files/xinetd.init index 1437f587c..51f457594 100644 --- a/net/xinetd/files/xinetd.init +++ b/net/xinetd/files/xinetd.init @@ -2,14 +2,118 @@ # Copyright (C) 2006-2011 OpenWrt.org START=50 +STOP=10 -SERVICE_USE_PID=1 +USE_PROCD=1 -start() { - service_start /usr/sbin/xinetd -pidfile /var/run/xinetd.pid +PROG="/usr/sbin/xinetd" + +PIDFILE="/var/run/xinetd.pid" + +CONF_FILE="/etc/config/xinetd" +GENERATED_CONF_FILE="/var/run/xinetd.conf" + +ServiceEntry="false" +ListName="" +ListValue="" + + +# redefined callback for sections when calling config_load +config_cb() { + + # write out last list option (from last section) if exist and clear + if [ "$ListName" != "" ]; then + echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE + fi + + ListName="" + ListVals="" + + # "close" last service entry (from last section) if exist + if [ "$ServiceEntry" = "true" ]; then # at least one service section "opened" + echo "}" >> $GENERATED_CONF_FILE # "close" open service section in config + ServiceEntry="false" + fi + + if [ $# -eq 0 ]; then # end of config reached + return + fi + + local type="$1" + local name="$2" + + if [ "$type" = "service" ]; then + + if [ "$ServiceEntry" = "true" ]; then + echo "}" >> $GENERATED_CONF_FILE # "close" previous opened service section in config + fi + + ServiceEntry="true" + + echo "" >> $GENERATED_CONF_FILE + echo "service $name" >> $GENERATED_CONF_FILE + echo "{" >> $GENERATED_CONF_FILE + + # redefined callback for options when calling config_load + option_cb() { + local option="$1" + local value="$2" + + [ -n "$value" ] && echo -e "\t$option = $value" >> $GENERATED_CONF_FILE + } + + # redefined callback for lists when calling config_load + list_cb() { + local name="$1" + local value="$2" + + # write out last list option if new list starts + if [ "$ListName" != "" -a "$ListName" != "$name" ]; then + + echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE + + ListName="" + ListVals="" + fi + + # new list option + if [ -z "$ListName" ]; then + + ListName="$name" + ListVals="$value" + else + ListVals="$ListVals $value" + fi + } + else # ignore non 'service' sections + return 0 + fi } -stop() { - service_stop /usr/sbin/xinetd +generate_config() { + echo "# Auto-generated config file from $CONF_FILE" > $GENERATED_CONF_FILE + echo "# Do not edit, changes to this file will be lost on upgrades" >> $GENERATED_CONF_FILE + echo "" >> $GENERATED_CONF_FILE + + echo "defaults" >> $GENERATED_CONF_FILE + echo "{" >> $GENERATED_CONF_FILE + echo "" >> $GENERATED_CONF_FILE + echo "}" >> $GENERATED_CONF_FILE + echo "" >> $GENERATED_CONF_FILE + echo "includedir /etc/xinetd.d" >> $GENERATED_CONF_FILE + + config_load xinetd } +start_service() { + generate_config + + procd_open_instance + procd_set_param command $PROG -f $GENERATED_CONF_FILE -pidfile $PIDFILE + procd_set_param respawn + procd_close_instance +} + +service_triggers() { + procd_add_reload_trigger "xinetd" +} diff --git a/net/xinetd/files/xinetd.uci.conf.sample b/net/xinetd/files/xinetd.uci.conf.sample new file mode 100644 index 000000000..4988a895d --- /dev/null +++ b/net/xinetd/files/xinetd.uci.conf.sample @@ -0,0 +1,11 @@ +#config service 'checkmk_agent' +# option type 'UNLISTED' +# option port '6556' +# option socket_type 'stream' +# option protocol 'tcp' +# option wait 'no' +# option user 'root' +# option server '/usr/bin/check_mk_agent' +# option log_on_success '' +# option only_from '127.0.0.1' +# option disable 'no'