|
|
- #!/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="$(uci -q get xinetd.$2.name || echo $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" ] && [ "$option" != "name" ] && 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 [ -n "$ListName" ] && [ "$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"
- }
|