]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | ||
3 | parse_one_service() { | |
4 | SOCKET_FILE="$1/rc-inetd-${CURRENT_SERVICE}.socket" | |
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" | |
20 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}@.service" | |
21 | ;; | |
22 | dgram) | |
23 | [ "$PROTOCOL" = "udp" ] || return | |
24 | __LISTEN="ListenDatagram=$PORT" | |
25 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service" | |
26 | ;; | |
27 | seqpacket) | |
28 | __LISTEN="ListenSequentialPacket=$PORT" | |
29 | SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service" | |
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 | |
40 | ||
41 | echo "[Service]" >>$SERVICE_FILE | |
42 | echo "StandardInput=socket" >>$SERVICE_FILE | |
43 | echo "StandardError=syslog" >>$SERVICE_FILE | |
44 | ||
45 | echo "[Unit]" >>$SOCKET_FILE | |
46 | echo "Description=$SERVICE_NAME" >>$SOCKET_FILE | |
47 | echo >>$SOCKET_FILE | |
48 | ||
49 | echo "[Socket]" >>$SOCKET_FILE | |
50 | echo $__LISTEN >>$SOCKET_FILE | |
51 | ||
52 | for i in $FLAGS; do | |
53 | case "$i" in | |
54 | nowait) | |
55 | echo "Accept=true" >>$SOCKET_FILE | |
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 | |
75 | echo -n "ExecStart=-$DAEMON" >>$SERVICE_FILE | |
76 | if [ "${DAEMONARGS:-none}" = "none" ] ; then | |
77 | echo >>$SERVICE_FILE | |
78 | else | |
79 | echo " $DAEMONARGS" >>$SERVICE_FILE | |
80 | fi | |
81 | ||
82 | if typeset -f pre_start_service 2>&1 >/dev/null ; then | |
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 | |
88 | fi | |
89 | ||
90 | if typeset -f pre_stop_service 2>&1 >/dev/null ; then | |
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 | |
96 | fi | |
97 | ||
98 | echo >>$SERVICE_FILE | |
99 | echo "[Install]" >>$SERVICE_FILE | |
100 | echo "Also=rc-inetd-${CURRENT_SERVICE}.socket" >>$SERVICE_FILE | |
101 | echo >>$SERVICE_FILE | |
102 | ||
103 | echo >>$SOCKET_FILE | |
104 | echo "[Install]" >>$SOCKET_FILE | |
105 | echo "WantedBy=sockets.target" >>$SOCKET_FILE | |
106 | } | |
107 | ||
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 | ||
122 | SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | grep -Ev '.*(\.rpm(save|new|orig)|~|CVS)') | |
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 | |
134 | ||
135 | # Read defaults... | |
136 | . /etc/sysconfig/rc-inetd.conf | |
137 | ||
138 | # ...and then config of *this* service. | |
139 | . $i | |
140 | ||
141 | CURRENT_SERVICE=$(basename $i) | |
142 | DONT_PARSE=0 | |
143 | # check if service is in deny list ? | |
144 | for i in $DENY_SERVICES; do | |
145 | if [ $i = $CURRENT_SERVICE ]; then | |
146 | DONT_PARSE=1 | |
147 | fi | |
148 | done | |
149 | [ $DONT_PARSE -eq 0 ] || continue | |
150 | ||
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 | |
157 | done |