ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/xinetd/files/xinetd.init b/external/subpack/net/xinetd/files/xinetd.init
new file mode 100644
index 0000000..bfc9b31
--- /dev/null
+++ b/external/subpack/net/xinetd/files/xinetd.init
@@ -0,0 +1,132 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+. ${IPKG_INSTROOT}/lib/functions.sh
+
+START=50
+STOP=10
+
+USE_PROCD=1
+
+PROG="/usr/sbin/xinetd"
+
+PIDFILE="/var/run/xinetd.pid"
+
+CONF_FILE="/etc/config/xinetd"
+GENERATED_CONF_FILE="/var/run/xinetd.conf"
+OTHER_CONF_DIR="/tmp/xinetd.d"
+
+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
+}
+
+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
+	echo "includedir $OTHER_CONF_DIR" >> $GENERATED_CONF_FILE
+
+	config_load xinetd
+}
+
+start_service() {
+	mkdir -p $OTHER_CONF_DIR
+
+	generate_config
+
+	procd_open_instance
+	procd_set_param command $PROG -dontfork -f $GENERATED_CONF_FILE -pidfile $PIDFILE
+	procd_set_param respawn
+	procd_close_instance
+}
+
+reload_service() {
+	procd_running xinetd "instance1" && {
+		procd_send_signal xinetd "*" QUIT
+		start
+	}
+}
+
+service_triggers() {
+	procd_add_reload_trigger "xinetd"
+}
diff --git a/external/subpack/net/xinetd/files/xinetd.uci.conf.sample b/external/subpack/net/xinetd/files/xinetd.uci.conf.sample
new file mode 100644
index 0000000..13bce53
--- /dev/null
+++ b/external/subpack/net/xinetd/files/xinetd.uci.conf.sample
@@ -0,0 +1,13 @@
+#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'
+#        list only_from '127.0.0.1'
+#        list only_from '1.1.1.1'
+#        list log_on_success 'PID'
+#        list log_on_success 'HOST'
+#        option disable 'no'