packages: systemd/pld-rc-inetd-generator.sh (NEW)=?UTF-8?Q?=20?=- proof of concept rc-ine...

baggins baggins at pld-linux.org
Thu May 3 21:48:21 CEST 2012


Author: baggins                      Date: Thu May  3 19:48:21 2012 GMT
Module: packages                      Tag: HEAD
---- Log message:
- proof of concept rc-inetd socket/service generator

---- Files affected:
packages/systemd:
   pld-rc-inetd-generator.sh (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/systemd/pld-rc-inetd-generator.sh
diff -u /dev/null packages/systemd/pld-rc-inetd-generator.sh:1.1
--- /dev/null	Thu May  3 21:48:21 2012
+++ packages/systemd/pld-rc-inetd-generator.sh	Thu May  3 21:48:16 2012
@@ -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
================================================================


More information about the pld-cvs-commit mailing list