blob: bfc9b318d664a9615d465a439a2e3972f3cc9b3e [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2006-2011 OpenWrt.org
3
4. ${IPKG_INSTROOT}/lib/functions.sh
5
6START=50
7STOP=10
8
9USE_PROCD=1
10
11PROG="/usr/sbin/xinetd"
12
13PIDFILE="/var/run/xinetd.pid"
14
15CONF_FILE="/etc/config/xinetd"
16GENERATED_CONF_FILE="/var/run/xinetd.conf"
17OTHER_CONF_DIR="/tmp/xinetd.d"
18
19ServiceEntry="false"
20ListName=""
21ListValue=""
22
23
24# redefined callback for sections when calling config_load
25config_cb() {
26
27 # write out last list option (from last section) if exist and clear
28 if [ "$ListName" != "" ]; then
29 echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE
30 fi
31
32 ListName=""
33 ListVals=""
34
35 # "close" last service entry (from last section) if exist
36 if [ "$ServiceEntry" = "true" ]; then # at least one service section "opened"
37 echo "}" >> $GENERATED_CONF_FILE # "close" open service section in config
38 ServiceEntry="false"
39 fi
40
41 if [ $# -eq 0 ]; then # end of config reached
42 return
43 fi
44
45 local type="$1"
46 local name="$2"
47
48 if [ "$type" = "service" ]; then
49
50 if [ "$ServiceEntry" = "true" ]; then
51 echo "}" >> $GENERATED_CONF_FILE # "close" previous opened service section in config
52 fi
53
54 ServiceEntry="true"
55
56 echo "" >> $GENERATED_CONF_FILE
57 echo "service $name" >> $GENERATED_CONF_FILE
58 echo "{" >> $GENERATED_CONF_FILE
59
60 # redefined callback for options when calling config_load
61 option_cb() {
62 local option="$1"
63 local value="$2"
64
65 [ -n "$value" ] && echo -e "\t$option = $value" >> $GENERATED_CONF_FILE
66 }
67
68 # redefined callback for lists when calling config_load
69 list_cb() {
70 local name="$1"
71 local value="$2"
72
73 # write out last list option if new list starts
74 if [ "$ListName" != "" -a "$ListName" != "$name" ]; then
75
76 echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE
77
78 ListName=""
79 ListVals=""
80 fi
81
82 # new list option
83 if [ -z "$ListName" ]; then
84
85 ListName="$name"
86 ListVals="$value"
87 else
88 ListVals="$ListVals $value"
89 fi
90 }
91 else # ignore non 'service' sections
92 return 0
93 fi
94}
95
96generate_config() {
97 echo "# Auto-generated config file from $CONF_FILE" > $GENERATED_CONF_FILE
98 echo "# Do not edit, changes to this file will be lost on upgrades" >> $GENERATED_CONF_FILE
99 echo "" >> $GENERATED_CONF_FILE
100
101 echo "defaults" >> $GENERATED_CONF_FILE
102 echo "{" >> $GENERATED_CONF_FILE
103 echo "" >> $GENERATED_CONF_FILE
104 echo "}" >> $GENERATED_CONF_FILE
105 echo "" >> $GENERATED_CONF_FILE
106 echo "includedir /etc/xinetd.d" >> $GENERATED_CONF_FILE
107 echo "includedir $OTHER_CONF_DIR" >> $GENERATED_CONF_FILE
108
109 config_load xinetd
110}
111
112start_service() {
113 mkdir -p $OTHER_CONF_DIR
114
115 generate_config
116
117 procd_open_instance
118 procd_set_param command $PROG -dontfork -f $GENERATED_CONF_FILE -pidfile $PIDFILE
119 procd_set_param respawn
120 procd_close_instance
121}
122
123reload_service() {
124 procd_running xinetd "instance1" && {
125 procd_send_signal xinetd "*" QUIT
126 start
127 }
128}
129
130service_triggers() {
131 procd_add_reload_trigger "xinetd"
132}