Message ID | 1339570179-29586-1-git-send-email-keguang.zhang@gmail.com |
---|---|
State | Rejected |
Headers | show |
On 06/13/12 08:49, Kelvin Cheung wrote: > +define BUSYBOX_INSTALL_INETD_CONF > + if grep -q CONFIG_INETD=y $(@D)/.config; then \ > + [ -f $(TARGET_DIR)/etc/inetd.conf ] || \ > + install -D -m 0644 package/busybox/inetd.conf \ > + $(TARGET_DIR)/etc/inetd.conf; \ > + if grep -q CONFIG_TELNETD=y $(@D)/.config; then \ > + if ! grep -q '^telnet' $(TARGET_DIR)/etc/inetd.conf; then \ > + echo -e "telnet\tstream\ttcp\tnowait\troot\ttelnetd\ttelnetd -i">> $(TARGET_DIR)/etc/inetd.conf; \ > + fi; \ > + else $(SED) '/^telnet/d' $(TARGET_DIR)/etc/inetd.conf; fi; \ > + if grep -q CONFIG_FTPD=y $(@D)/.config; then \ > + if ! grep -q '^ftp' $(TARGET_DIR)/etc/inetd.conf; then \ > + echo -e "#ftp\tstream\ttcp\tnowait\troot\tftpd\tftpd -w /files/to/serve">> $(TARGET_DIR)/etc/inetd.conf; \ > + fi; \ If busybox is rebuilt (and the inetd.conf wasn't modified), the #ftp line will be added a second time. > + else $(SED) '/^ftp/d' $(TARGET_DIR)/etc/inetd.conf; fi; \ > + if grep -q CONFIG_TFTPD=y $(@D)/.config; then \ > + if ! grep -q '^tftp' $(TARGET_DIR)/etc/inetd.conf; then \ > + echo -e "#tftp\tdgram\tudp\tnowait\troot\ttftpd\ttftpd -l -c /files/to/serve">> $(TARGET_DIR)/etc/inetd.conf; \ > + fi; \ > + else $(SED) '/^tftp/d' $(TARGET_DIR)/etc/inetd.conf; fi \ > + else rm -f $(TARGET_DIR)/etc/inetd.conf; fi If netkitbase is selected and busybox happens to be (re)built afterwards, inetd.conf would get removed... > +endef I think all those conditions are just trying to be too smart. Just copy a default config file from package/busybox if inetd is selected, and leave it alone if it is not selected. Anyway, if the telnetd executable doesn't exist, busybox will just close the connection immediately after accepting it. You could update inetd.conf in-place to add/remove the comment marker. E.g. if grep -q CONFIG_TELNETD=y $(@D)/.config; then \ $(SED) 's/^# NOT SELECTED #telnet/telnet/' $(TARGET_DIR)/etc/inetd.conf; \ else $(SED) 's/^telnet/# NOT SELECTED #telnet/' $(TARGET_DIR)/etc/inetd.conf; \ fi However, even that is problematic because it doesn't support a configuration with a non-busybox telnetd. Bottom line: I prefer to simplify it to +define BUSYBOX_INSTALL_INETD_CONF + if grep -q CONFIG_INETD=y $(@D)/.config; then \ + [ -f $(TARGET_DIR)/etc/inetd.conf ] || \ + install -D -m 0644 package/busybox/inetd.conf \ + $(TARGET_DIR)/etc/inetd.conf; \ + fi +endef Regards, Arnout
diff --git a/package/busybox/S41inetd b/package/busybox/S41inetd new file mode 100644 index 0000000..0f54e50 --- /dev/null +++ b/package/busybox/S41inetd @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Starts the inetd daemon. +# + +NAME=inetd +DAEMON=/usr/sbin/$NAME +PIDFILE=/var/run/$NAME.pid + +case "$1" in + start) + echo -n "Starting $NAME: " + start-stop-daemon -S -q -m -p $PIDFILE -b -x $DAEMON -- -f && echo "OK" || echo "Failed" + ;; + stop) + echo -n "Stopping $NAME: " + start-stop-daemon -K -q -p $PIDFILE && echo "OK" || echo "Failed" + rm -f $PIDFILE + ;; + restart|reload) + $0 stop + $0 start + ;; + *) + echo $"Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? + diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk index 1d988f8..7d9420c 100644 --- a/package/busybox/busybox.mk +++ b/package/busybox/busybox.mk @@ -155,6 +155,36 @@ define BUSYBOX_INSTALL_WATCHDOG_SCRIPT endef endif +define BUSYBOX_INSTALL_INETD_SCRIPT + if grep -q CONFIG_INETD=y $(@D)/.config; then \ + [ -f $(TARGET_DIR)/etc/init.d/S41inetd ] || \ + $(INSTALL) -m 0755 -D package/busybox/S41inetd \ + $(TARGET_DIR)/etc/init.d/S41inetd; \ + else rm -f $(TARGET_DIR)/etc/init.d/S41inetd; fi +endef +define BUSYBOX_INSTALL_INETD_CONF + if grep -q CONFIG_INETD=y $(@D)/.config; then \ + [ -f $(TARGET_DIR)/etc/inetd.conf ] || \ + install -D -m 0644 package/busybox/inetd.conf \ + $(TARGET_DIR)/etc/inetd.conf; \ + if grep -q CONFIG_TELNETD=y $(@D)/.config; then \ + if ! grep -q '^telnet' $(TARGET_DIR)/etc/inetd.conf; then \ + echo -e "telnet\tstream\ttcp\tnowait\troot\ttelnetd\ttelnetd -i" >> $(TARGET_DIR)/etc/inetd.conf; \ + fi; \ + else $(SED) '/^telnet/d' $(TARGET_DIR)/etc/inetd.conf; fi; \ + if grep -q CONFIG_FTPD=y $(@D)/.config; then \ + if ! grep -q '^ftp' $(TARGET_DIR)/etc/inetd.conf; then \ + echo -e "#ftp\tstream\ttcp\tnowait\troot\tftpd\tftpd -w /files/to/serve" >> $(TARGET_DIR)/etc/inetd.conf; \ + fi; \ + else $(SED) '/^ftp/d' $(TARGET_DIR)/etc/inetd.conf; fi; \ + if grep -q CONFIG_TFTPD=y $(@D)/.config; then \ + if ! grep -q '^tftp' $(TARGET_DIR)/etc/inetd.conf; then \ + echo -e "#tftp\tdgram\tudp\tnowait\troot\ttftpd\ttftpd -l -c /files/to/serve" >> $(TARGET_DIR)/etc/inetd.conf; \ + fi; \ + else $(SED) '/^tftp/d' $(TARGET_DIR)/etc/inetd.conf; fi \ + else rm -f $(TARGET_DIR)/etc/inetd.conf; fi +endef + # We do this here to avoid busting a modified .config in configure BUSYBOX_POST_EXTRACT_HOOKS += BUSYBOX_COPY_CONFIG @@ -187,6 +217,8 @@ define BUSYBOX_INSTALL_TARGET_CMDS $(BUSYBOX_INSTALL_MDEV_CONF) $(BUSYBOX_INSTALL_LOGGING_SCRIPT) $(BUSYBOX_INSTALL_WATCHDOG_SCRIPT) + $(BUSYBOX_INSTALL_INETD_SCRIPT) + $(BUSYBOX_INSTALL_INETD_CONF) endef define BUSYBOX_UNINSTALL_TARGET_CMDS diff --git a/package/busybox/inetd.conf b/package/busybox/inetd.conf new file mode 100644 index 0000000..82cfa15 --- /dev/null +++ b/package/busybox/inetd.conf @@ -0,0 +1,3 @@ +# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args> +# +
Install S41inetd and inetd.conf if inetd is enabled in busybox. Add telnetd to /etc/inetd.conf when inetd and telnetd are enabled. Provide examples for /etc/inetd.conf when ftpd and tftpd are enabled. Signed-off-by: Kelvin Cheung <keguang.zhang@gmail.com> --- Changes for v3: Create a pidfile for inetd (asked by Arnout and Peter). For ftp and tftp service, provide examples instead of configurations. Changes for v2: Update ftpd and tftpd configuration in inetd.conf --- package/busybox/S41inetd | 30 ++++++++++++++++++++++++++++++ package/busybox/busybox.mk | 32 ++++++++++++++++++++++++++++++++ package/busybox/inetd.conf | 3 +++ 3 files changed, 65 insertions(+), 0 deletions(-) create mode 100644 package/busybox/S41inetd create mode 100644 package/busybox/inetd.conf