]> git.pld-linux.org Git - packages/systemd.git/commitdiff
- proof of concept rc-inetd socket/service generator
authorJan Rękorajski <baggins@pld-linux.org>
Thu, 3 May 2012 19:48:16 +0000 (19:48 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    pld-rc-inetd-generator.sh -> 1.1

pld-rc-inetd-generator.sh [new file with mode: 0644]

diff --git a/pld-rc-inetd-generator.sh b/pld-rc-inetd-generator.sh
new file mode 100644 (file)
index 0000000..f6ca669
--- /dev/null
@@ -0,0 +1,118 @@
+#!/bin/sh
+#
+# TODO:
+#      pre_start_service() and pre_stop_service()
+#
+parse_one_service() {
+       SOCKET_FILE="${CURRENT_SERVICE}.socket"
+       SERVICE_FILE="${CURRENT_SERVICE}.service"
+
+       case "$FAMILY" in
+               ipv4)
+                       PORT="0.0.0.0:$PORT"
+                       ;;
+               ipv6)
+                       PORT="[::]:$PORT"
+                       ;;
+               *)
+       esac
+
+       case "$SOCK_TYPE" in
+               stream)
+                       [ "$PROTOCOL" = "tcp" ] || return
+                       __LISTEN="ListenStream=$PORT"
+                       ;;
+               dgram)
+                       [ "$PROTOCOL" = "udp" ] || return
+                       __LISTEN="ListenDatagram=$PORT"
+                       ;;
+               seqpacket)
+                       __LISTEN="ListenSequentialPacket=$PORT"
+                       ;;
+               *)
+                       return
+       esac
+       :>$SOCKET_FILE
+       :>$SERVICE_FILE
+
+       echo "[Unit]" >>$SERVICE_FILE
+       echo "Description=$SERVICE_NAME" >>$SERVICE_FILE
+       echo >>$SERVICE_FILE
+       echo "[Service]" >>$SERVICE_FILE
+
+       echo "[Unit]" >>$SOCKET_FILE
+       echo "Description=$SERVICE_NAME" >>$SOCKET_FILE
+       echo >>$SOCKET_FILE
+       echo "[Socket]" >>$SOCKET_FILE
+       echo $__LISTEN >>$SOCKET_FILE
+
+       for i in $FLAGS; do
+               case "$i" in
+                       wait)
+                               echo "Accept=true" >>$SOCKET_FILE
+                               ;;
+                       nowait)
+                               [ "${MAX_CONNECTIONS:-n}" = "n" ] || echo "MaxConnections=$MAX_CONNECTIONS" >>$SOCKET_FILE
+                               ;;
+                       *)
+                               ;;
+               esac
+       done
+
+       if [ "$SERVER" = "tcpd" ] ; then
+               echo "TCPWrapName=$SERVICE_NAME" >>$SOCKET_FILE
+       elif [ $SERVER != $DAEMON ]; then
+               DAEMON="$SERVER $DAEMON"
+       fi
+       [ "${INTERFACE:-none}" = "none" ] || echo "BindToDevice=$INTERFACE" >>$SOCKET_FILE
+
+       echo "User=$USER" >>$SERVICE_FILE
+       [ "${GROUP:-none}" = "none" ] || echo "Group=$GROUP" >>$SERVICE_FILE
+       [ "${NICE:-none}" = "none" ] || echo "Nice=$NICE" >>$SERVICE_FILE
+       [ "${CHROOT:-none}" = "none" ] || echo "RootDirectory=$CHROOT" >>$SERVICE_FILE
+       [ "${ENV:-none}" = "none" ] || echo "Environment=$ENV" >>$SERVICE_FILE
+       echo -n "ExecStart=$DAEMON" >>$SERVICE_FILE
+       if [ "${DAEMONARGS:-none}" = "none" ] ; then
+               echo >>$SERVICE_FILE
+       else
+               echo "$DAEMONARGS" >>$SERVICE_FILE
+       fi
+
+       echo >>$SERVICE_FILE
+       echo "[Install]" >>$SERVICE_FILE
+       echo "Also=${CURRENT_SERVICE}.socket" >>$SERVICE_FILE
+       echo >>$SERVICE_FILE
+
+       echo >>$SOCKET_FILE
+       echo "[Install]" >>$SOCKET_FILE
+       echo "WantedBy=sockets.target" >>$SOCKET_FILE
+}
+
+SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | egrep -v '.*(\.rpm(save|new|orig)|~|CVS)')
+for i in $SERVICES; do
+       # unset everything
+       unset SERVICE_NAME SOCK_TYPE PROTOCOL PORT USER
+       unset DAEMON DAEMONARGS MAX_CONNECTIONS GROUP NICE
+       unset FAMILY INTERFACE CHROOT RPCNAME RPCVERSION
+       unset INITGROUPS BANNER ECHO FILTER ENV FLAGS
+       unset SERVER MAX_CONNECTIONS_PER_SOURCE
+       unset CONNECTIONS_PER_SECOND RPCNUMBER
+       unset BANNER_SUCCESS BANNER_FAILURE PASSENV
+       unset SERVICE_TYPE ACCESS_TIMES LOG_TYPE
+       unset LOG_SUCCESS LOG_FAILURE REDIRECT MAX_LOAD
+       # Read defaults...
+       . /etc/sysconfig/rc-inetd.conf
+       # ...and then config of *this* service.
+       . $i
+       CURRENT_SERVICE=`basename $i`
+       DONT_PARSE=0
+       # check if service is in deny list ?
+       for i in $DENY_SERVICES ; do
+               if [ $i = $CURRENT_SERVICE ] ; then
+                       DONT_PARSE=1
+               fi
+       done
+       [ $DONT_PARSE -eq 0 ] || continue
+
+       parse_one_service
+done
This page took 0.040514 seconds and 4 git commands to generate.