| #!/bin/sh |
| |
| ### BEGIN INIT INFO |
| # Provides: proftpd |
| # Required-Start: $remote_fs $syslog $local_fs $network |
| # Required-Stop: $remote_fs $syslog $local_fs $network |
| # Should-Start: $named |
| # Should-Stop: $named |
| # Default-Start: 2 3 4 5 |
| # Default-Stop: 0 1 6 |
| # Short-Description: Starts ProFTPD daemon |
| # Description: This script runs the FTP service offered |
| # by the ProFTPD daemon |
| ### END INIT INFO |
| |
| # Start the proftpd FTP daemon. |
| |
| PATH=/bin:/usr/bin:/sbin:/usr/sbin |
| DAEMON=/usr/sbin/proftpd |
| NAME=proftpd |
| |
| # Defaults |
| RUN="no" |
| OPTIONS="" |
| CONFIG_FILE=/etc/proftpd.conf |
| |
| PIDFILE=`grep -i '^pidfile' $CONFIG_FILE|awk '{ print $2 }'` |
| if [ "x$PIDFILE" = "x" ]; |
| then |
| PIDFILE=/var/run/proftpd.pid |
| fi |
| |
| # Read config (will override defaults) |
| [ -r /etc/default/proftpd ] && . /etc/default/proftpd |
| |
| trap "" 1 |
| trap "" 15 |
| |
| test -f $DAEMON || exit 0 |
| |
| . /etc/init.d/functions |
| |
| # |
| # Servertype could be inetd|standalone|none. |
| # In all cases check against inetd and xinetd support. |
| # |
| if ! egrep -qi "^[[:space:]]*ServerType.*standalone" $CONFIG_FILE |
| then |
| if egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.conf 2>/dev/null || \ |
| egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.d/* 2>/dev/null || \ |
| egrep -qi "^ftp.*/usr/sbin/proftpd" /etc/inetd.conf 2>/dev/null |
| then |
| RUN="no" |
| INETD="yes" |
| else |
| if ! egrep -qi "^[[:space:]]*ServerType.*inetd" $CONFIG_FILE |
| then |
| RUN="yes" |
| INETD="no" |
| else |
| RUN="no" |
| INETD="no" |
| fi |
| fi |
| fi |
| |
| # /var/run could be on a tmpfs |
| |
| [ ! -d /var/run/proftpd ] && mkdir /var/run/proftpd |
| |
| inetd_check() |
| { |
| if [ ! -x /usr/sbin/inetd -a ! -x /usr/sbin/xinetd ]; then |
| echo "Neither inetd nor xinetd appears installed: check your configuration." |
| fi |
| } |
| |
| start() |
| { |
| set -e |
| echo -n "Starting ftp server $NAME... " |
| start-stop-daemon --start --quiet --pidfile "$PIDFILE" --oknodo --exec $DAEMON -- -c $CONFIG_FILE $OPTIONS |
| echo "done." |
| } |
| |
| signal() |
| { |
| |
| if [ "$1" = "stop" ]; then |
| SIGNAL="TERM" |
| echo -n "Stopping ftp server $NAME... " |
| else |
| if [ "$1" = "reload" ]; then |
| SIGNAL="HUP" |
| echo -n "Reloading ftp server $NAME... " |
| else |
| echo "ERR: wrong parameter given to signal()" |
| exit 1 |
| fi |
| fi |
| if [ -f "$PIDFILE" ]; then |
| start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" |
| if [ $? = 0 ]; then |
| echo "done." |
| return |
| else |
| SIGNAL="KILL" |
| start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" |
| if [ $? != 0 ]; then |
| echo |
| [ $2 != 0 ] || exit 0 |
| else |
| echo "done." |
| return |
| fi |
| fi |
| if [ "$SIGNAL" = "KILL" ]; then |
| rm -f "$PIDFILE" |
| fi |
| else |
| echo "done." |
| return |
| fi |
| } |
| |
| case "$1" in |
| start) |
| if [ "x$RUN" = "xyes" ] ; then |
| start |
| else |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "ProFTPD is started from inetd/xinetd." |
| inetd_check |
| else |
| echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." |
| fi |
| fi |
| ;; |
| |
| force-start) |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "Warning: ProFTPD is started from inetd/xinetd (trying to start anyway)." |
| inetd_check |
| fi |
| start |
| ;; |
| |
| stop) |
| if [ "x$RUN" = "xyes" ] ; then |
| signal stop 0 |
| else |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "ProFTPD is started from inetd/xinetd." |
| inetd_check |
| else |
| echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." |
| fi |
| fi |
| ;; |
| |
| force-stop) |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "Warning: ProFTPD is started from inetd/xinetd (trying to kill anyway)." |
| inetd_check |
| fi |
| signal stop 0 |
| ;; |
| |
| reload) |
| signal reload 0 |
| ;; |
| |
| force-reload|restart) |
| if [ "x$RUN" = "xyes" ] ; then |
| signal stop 1 |
| sleep 2 |
| start |
| else |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "ProFTPD is started from inetd/xinetd." |
| inetd_check |
| else |
| echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." |
| fi |
| fi |
| ;; |
| |
| status) |
| if [ "x$INETD" = "xyes" ] ; then |
| echo "ProFTPD is started from inetd/xinetd." |
| inetd_check |
| exit 0 |
| else |
| if [ -f "$PIDFILE" ]; then |
| pid=$(cat $PIDFILE) |
| else |
| pid="x" |
| fi |
| if [ `pidof proftpd|grep "$pid"|wc -l` -ne 0 ] ; then |
| echo "ProFTPD is started in standalone mode, currently running." |
| exit 0 |
| else |
| echo "ProFTPD is started in standalone mode, currently not running." |
| exit 3 |
| fi |
| fi |
| ;; |
| |
| check-config) |
| $DAEMON -t >/dev/null && echo "ProFTPD configuration OK" && exit 0 |
| exit 1 |
| ;; |
| |
| *) |
| echo "Usage: /etc/init.d/$NAME {start|status|force-start|stop|force-stop|reload|restart|force-reload|check-config}" |
| exit 1 |
| ;; |
| esac |
| |
| exit 0 |