]>
Commit | Line | Data |
---|---|---|
321b94b7 | 1 | #!/bin/sh |
daa2a0ed | 2 | |
321b94b7 | 3 | parse_one_service() { |
2cdc32ff | 4 | SOCKET_FILE="$1/rc-inetd-${CURRENT_SERVICE}.socket" |
321b94b7 JR |
5 | |
6 | case "$FAMILY" in | |
7 | ipv4) | |
8 | PORT="0.0.0.0:$PORT" | |
9 | ;; | |
10 | ipv6) | |
11 | PORT="[::]:$PORT" | |
12 | ;; | |
13 | *) | |
14 | esac | |
15 | ||
16 | case "$SOCK_TYPE" in | |
17 | stream) | |
18 | [ "$PROTOCOL" = "tcp" ] || return | |
19 | __LISTEN="ListenStream=$PORT" | |
7ce50f59 | 20 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}@.service" |
321b94b7 JR |
21 | ;; |
22 | dgram) | |
23 | [ "$PROTOCOL" = "udp" ] || return | |
24 | __LISTEN="ListenDatagram=$PORT" | |
7ce50f59 | 25 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service" |
321b94b7 JR |
26 | ;; |
27 | seqpacket) | |
28 | __LISTEN="ListenSequentialPacket=$PORT" | |
7ce50f59 | 29 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service" |
321b94b7 JR |
30 | ;; |
31 | *) | |
32 | return | |
33 | esac | |
34 | :>$SOCKET_FILE | |
35 | :>$SERVICE_FILE | |
36 | ||
37 | echo "[Unit]" >>$SERVICE_FILE | |
38 | echo "Description=$SERVICE_NAME" >>$SERVICE_FILE | |
39 | echo >>$SERVICE_FILE | |
2cdc32ff | 40 | |
321b94b7 | 41 | echo "[Service]" >>$SERVICE_FILE |
2cdc32ff JR |
42 | echo "StandardInput=socket" >>$SERVICE_FILE |
43 | echo "StandardError=syslog" >>$SERVICE_FILE | |
321b94b7 JR |
44 | |
45 | echo "[Unit]" >>$SOCKET_FILE | |
46 | echo "Description=$SERVICE_NAME" >>$SOCKET_FILE | |
47 | echo >>$SOCKET_FILE | |
2cdc32ff | 48 | |
321b94b7 JR |
49 | echo "[Socket]" >>$SOCKET_FILE |
50 | echo $__LISTEN >>$SOCKET_FILE | |
51 | ||
52 | for i in $FLAGS; do | |
53 | case "$i" in | |
321b94b7 | 54 | nowait) |
2cdc32ff | 55 | echo "Accept=true" >>$SOCKET_FILE |
321b94b7 JR |
56 | [ "${MAX_CONNECTIONS:-n}" = "n" ] || echo "MaxConnections=$MAX_CONNECTIONS" >>$SOCKET_FILE |
57 | ;; | |
58 | *) | |
59 | ;; | |
60 | esac | |
61 | done | |
62 | ||
63 | if [ "$SERVER" = "tcpd" ] ; then | |
64 | echo "TCPWrapName=$SERVICE_NAME" >>$SOCKET_FILE | |
65 | elif [ $SERVER != $DAEMON ]; then | |
66 | DAEMON="$SERVER $DAEMON" | |
67 | fi | |
68 | [ "${INTERFACE:-none}" = "none" ] || echo "BindToDevice=$INTERFACE" >>$SOCKET_FILE | |
69 | ||
70 | echo "User=$USER" >>$SERVICE_FILE | |
71 | [ "${GROUP:-none}" = "none" ] || echo "Group=$GROUP" >>$SERVICE_FILE | |
72 | [ "${NICE:-none}" = "none" ] || echo "Nice=$NICE" >>$SERVICE_FILE | |
73 | [ "${CHROOT:-none}" = "none" ] || echo "RootDirectory=$CHROOT" >>$SERVICE_FILE | |
74 | [ "${ENV:-none}" = "none" ] || echo "Environment=$ENV" >>$SERVICE_FILE | |
2cdc32ff | 75 | echo -n "ExecStart=-$DAEMON" >>$SERVICE_FILE |
321b94b7 JR |
76 | if [ "${DAEMONARGS:-none}" = "none" ] ; then |
77 | echo >>$SERVICE_FILE | |
78 | else | |
2cdc32ff | 79 | echo " $DAEMONARGS" >>$SERVICE_FILE |
321b94b7 JR |
80 | fi |
81 | ||
daa2a0ed | 82 | if typeset -f pre_start_service 2>&1 >/dev/null ; then |
2cdc32ff JR |
83 | echo "#!/bin/sh" >/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh |
84 | typeset -f pre_start_service >>/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh | |
85 | echo "pre_start_service >&2" >>/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh | |
86 | chmod u+x /run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh | |
87 | echo "ExecStartPre=-/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh" >>$SERVICE_FILE | |
daa2a0ed JR |
88 | fi |
89 | ||
90 | if typeset -f pre_stop_service 2>&1 >/dev/null ; then | |
2cdc32ff JR |
91 | echo "#!/bin/sh" >/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh |
92 | typeset -f pre_stop_service >>/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh | |
93 | echo "pre_stop_service >&2" >>/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh | |
94 | chmod u+x /run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh | |
95 | echo "ExecStopPost=-/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh" >>$SERVICE_FILE | |
daa2a0ed JR |
96 | fi |
97 | ||
321b94b7 JR |
98 | echo >>$SERVICE_FILE |
99 | echo "[Install]" >>$SERVICE_FILE | |
2cdc32ff | 100 | echo "Also=rc-inetd-${CURRENT_SERVICE}.socket" >>$SERVICE_FILE |
321b94b7 JR |
101 | echo >>$SERVICE_FILE |
102 | ||
103 | echo >>$SOCKET_FILE | |
104 | echo "[Install]" >>$SOCKET_FILE | |
105 | echo "WantedBy=sockets.target" >>$SOCKET_FILE | |
106 | } | |
107 | ||
2cdc32ff JR |
108 | normalunitdir=${1:-/tmp} |
109 | earlyunitdir=${2:-/tmp} | |
110 | lateunitdir=${3:-/tmp} | |
111 | ||
112 | destunitdir=$normalunitdir | |
113 | ||
114 | rm -f $destunitdir/rc-inetd-*.service \ | |
115 | $destunitdir/rc-inetd-*.socket \ | |
116 | $destunitdir/sockets.target.wants/rc-inetd-*.socket \ | |
117 | /run/rc-inetd/* | |
118 | ||
119 | mkdir -p $destunitdir/sockets.target.wants \ | |
120 | /run/rc-inetd | |
121 | ||
28dacbf5 | 122 | SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | grep -Ev '.*(\.rpm(save|new|orig)|~|CVS)') |
321b94b7 JR |
123 | for i in $SERVICES; do |
124 | # unset everything | |
125 | unset SERVICE_NAME SOCK_TYPE PROTOCOL PORT USER | |
126 | unset DAEMON DAEMONARGS MAX_CONNECTIONS GROUP NICE | |
127 | unset FAMILY INTERFACE CHROOT RPCNAME RPCVERSION | |
128 | unset INITGROUPS BANNER ECHO FILTER ENV FLAGS | |
129 | unset SERVER MAX_CONNECTIONS_PER_SOURCE | |
130 | unset CONNECTIONS_PER_SECOND RPCNUMBER | |
131 | unset BANNER_SUCCESS BANNER_FAILURE PASSENV | |
132 | unset SERVICE_TYPE ACCESS_TIMES LOG_TYPE | |
133 | unset LOG_SUCCESS LOG_FAILURE REDIRECT MAX_LOAD | |
28dacbf5 | 134 | |
321b94b7 JR |
135 | # Read defaults... |
136 | . /etc/sysconfig/rc-inetd.conf | |
28dacbf5 | 137 | |
321b94b7 JR |
138 | # ...and then config of *this* service. |
139 | . $i | |
28dacbf5 ER |
140 | |
141 | CURRENT_SERVICE=$(basename $i) | |
321b94b7 JR |
142 | DONT_PARSE=0 |
143 | # check if service is in deny list ? | |
28dacbf5 ER |
144 | for i in $DENY_SERVICES; do |
145 | if [ $i = $CURRENT_SERVICE ]; then | |
321b94b7 JR |
146 | DONT_PARSE=1 |
147 | fi | |
148 | done | |
149 | [ $DONT_PARSE -eq 0 ] || continue | |
150 | ||
2cdc32ff JR |
151 | parse_one_service $destunitdir |
152 | ||
153 | if [ -f $destunitdir/rc-inetd-${CURRENT_SERVICE}.socket ]; then | |
154 | ln -sf "$destunitdir/rc-inetd-${CURRENT_SERVICE}.socket" \ | |
155 | "$destunitdir/sockets.target.wants/rc-inetd-${CURRENT_SERVICE}.socket" | |
156 | fi | |
321b94b7 | 157 | done |