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