]>
Commit | Line | Data |
---|---|---|
321b94b7 JR |
1 | #!/bin/sh |
2 | # | |
3 | # TODO: | |
4 | # pre_start_service() and pre_stop_service() | |
5 | # | |
6 | parse_one_service() { | |
7 | SOCKET_FILE="${CURRENT_SERVICE}.socket" | |
8 | SERVICE_FILE="${CURRENT_SERVICE}.service" | |
9 | ||
10 | case "$FAMILY" in | |
11 | ipv4) | |
12 | PORT="0.0.0.0:$PORT" | |
13 | ;; | |
14 | ipv6) | |
15 | PORT="[::]:$PORT" | |
16 | ;; | |
17 | *) | |
18 | esac | |
19 | ||
20 | case "$SOCK_TYPE" in | |
21 | stream) | |
22 | [ "$PROTOCOL" = "tcp" ] || return | |
23 | __LISTEN="ListenStream=$PORT" | |
24 | ;; | |
25 | dgram) | |
26 | [ "$PROTOCOL" = "udp" ] || return | |
27 | __LISTEN="ListenDatagram=$PORT" | |
28 | ;; | |
29 | seqpacket) | |
30 | __LISTEN="ListenSequentialPacket=$PORT" | |
31 | ;; | |
32 | *) | |
33 | return | |
34 | esac | |
35 | :>$SOCKET_FILE | |
36 | :>$SERVICE_FILE | |
37 | ||
38 | echo "[Unit]" >>$SERVICE_FILE | |
39 | echo "Description=$SERVICE_NAME" >>$SERVICE_FILE | |
40 | echo >>$SERVICE_FILE | |
41 | echo "[Service]" >>$SERVICE_FILE | |
42 | ||
43 | echo "[Unit]" >>$SOCKET_FILE | |
44 | echo "Description=$SERVICE_NAME" >>$SOCKET_FILE | |
45 | echo >>$SOCKET_FILE | |
46 | echo "[Socket]" >>$SOCKET_FILE | |
47 | echo $__LISTEN >>$SOCKET_FILE | |
48 | ||
49 | for i in $FLAGS; do | |
50 | case "$i" in | |
51 | wait) | |
52 | echo "Accept=true" >>$SOCKET_FILE | |
53 | ;; | |
54 | nowait) | |
55 | [ "${MAX_CONNECTIONS:-n}" = "n" ] || echo "MaxConnections=$MAX_CONNECTIONS" >>$SOCKET_FILE | |
56 | ;; | |
57 | *) | |
58 | ;; | |
59 | esac | |
60 | done | |
61 | ||
62 | if [ "$SERVER" = "tcpd" ] ; then | |
63 | echo "TCPWrapName=$SERVICE_NAME" >>$SOCKET_FILE | |
64 | elif [ $SERVER != $DAEMON ]; then | |
65 | DAEMON="$SERVER $DAEMON" | |
66 | fi | |
67 | [ "${INTERFACE:-none}" = "none" ] || echo "BindToDevice=$INTERFACE" >>$SOCKET_FILE | |
68 | ||
69 | echo "User=$USER" >>$SERVICE_FILE | |
70 | [ "${GROUP:-none}" = "none" ] || echo "Group=$GROUP" >>$SERVICE_FILE | |
71 | [ "${NICE:-none}" = "none" ] || echo "Nice=$NICE" >>$SERVICE_FILE | |
72 | [ "${CHROOT:-none}" = "none" ] || echo "RootDirectory=$CHROOT" >>$SERVICE_FILE | |
73 | [ "${ENV:-none}" = "none" ] || echo "Environment=$ENV" >>$SERVICE_FILE | |
74 | echo -n "ExecStart=$DAEMON" >>$SERVICE_FILE | |
75 | if [ "${DAEMONARGS:-none}" = "none" ] ; then | |
76 | echo >>$SERVICE_FILE | |
77 | else | |
78 | echo "$DAEMONARGS" >>$SERVICE_FILE | |
79 | fi | |
80 | ||
81 | echo >>$SERVICE_FILE | |
82 | echo "[Install]" >>$SERVICE_FILE | |
83 | echo "Also=${CURRENT_SERVICE}.socket" >>$SERVICE_FILE | |
84 | echo >>$SERVICE_FILE | |
85 | ||
86 | echo >>$SOCKET_FILE | |
87 | echo "[Install]" >>$SOCKET_FILE | |
88 | echo "WantedBy=sockets.target" >>$SOCKET_FILE | |
89 | } | |
90 | ||
91 | SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | egrep -v '.*(\.rpm(save|new|orig)|~|CVS)') | |
92 | for i in $SERVICES; do | |
93 | # unset everything | |
94 | unset SERVICE_NAME SOCK_TYPE PROTOCOL PORT USER | |
95 | unset DAEMON DAEMONARGS MAX_CONNECTIONS GROUP NICE | |
96 | unset FAMILY INTERFACE CHROOT RPCNAME RPCVERSION | |
97 | unset INITGROUPS BANNER ECHO FILTER ENV FLAGS | |
98 | unset SERVER MAX_CONNECTIONS_PER_SOURCE | |
99 | unset CONNECTIONS_PER_SECOND RPCNUMBER | |
100 | unset BANNER_SUCCESS BANNER_FAILURE PASSENV | |
101 | unset SERVICE_TYPE ACCESS_TIMES LOG_TYPE | |
102 | unset LOG_SUCCESS LOG_FAILURE REDIRECT MAX_LOAD | |
103 | # Read defaults... | |
104 | . /etc/sysconfig/rc-inetd.conf | |
105 | # ...and then config of *this* service. | |
106 | . $i | |
107 | CURRENT_SERVICE=`basename $i` | |
108 | DONT_PARSE=0 | |
109 | # check if service is in deny list ? | |
110 | for i in $DENY_SERVICES ; do | |
111 | if [ $i = $CURRENT_SERVICE ] ; then | |
112 | DONT_PARSE=1 | |
113 | fi | |
114 | done | |
115 | [ $DONT_PARSE -eq 0 ] || continue | |
116 | ||
117 | parse_one_service | |
118 | done |