#!/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" }