]> git.pld-linux.org Git - packages/systemd.git/blob - pld-rc-inetd-generator.sh
up to 246.4
[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
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
This page took 0.100204 seconds and 3 git commands to generate.