#! /bin/sh

### BEGIN INIT INFO
# Provides:          rsyncd
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $named autofs
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: fast remote file copy program daemon
# Description:       rsync is a program that allows files to be copied to and
#                    from remote machines in much the same way as rcp.
#                    This provides rsyncd daemon functionality.
### END INIT INFO

set -e

# /etc/init.d/rsync: start and stop the rsync daemon

setvar DAEMON = "/usr/bin/rsync"
setvar RSYNC_ENABLE = 'false'
setvar RSYNC_OPTS = ''''
setvar RSYNC_DEFAULTS_FILE = "/etc/default/rsync"
setvar RSYNC_CONFIG_FILE = "/etc/rsyncd.conf"
setvar RSYNC_PID_FILE = "/var/run/rsync.pid"
setvar RSYNC_NICE_PARM = ''''
setvar RSYNC_IONICE_PARM = ''''

test -x $DAEMON || exit 0

source /lib/lsb/init-functions

if test -s $RSYNC_DEFAULTS_FILE {
    source $RSYNC_DEFAULTS_FILE
    case{
	xtrue|xfalse {	}
	xinetd {		exit 0
			}
	* {		log_failure_msg "Value of RSYNC_ENABLE in $RSYNC_DEFAULTS_FILE must be either 'true' or 'false';"
			log_failure_msg "not starting rsync daemon."
			exit 1
			}
    }
    case{
	x[0-9]|x1[0-9] {	setvar RSYNC_NICE_PARM = ""--nicelevel $RSYNC_NICE""}
	x {		}
	* {		log_warning_msg "Value of RSYNC_NICE in $RSYNC_DEFAULTS_FILE must be a value between 0 and 19 (inclusive);"
			log_warning_msg "ignoring RSYNC_NICE now."
			}
    }
    case{
	x-c[123]* {	setvar RSYNC_IONICE_PARM = "$RSYNC_IONICE"}
	x {		}
	* {		log_warning_msg "Value of RSYNC_IONICE in $RSYNC_DEFAULTS_FILE must be -c1, -c2 or -c3;"
			log_warning_msg "ignoring RSYNC_IONICE now."
			}
    }
}

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

proc rsync_start {
    if test ! -s $RSYNC_CONFIG_FILE {
        log_failure_msg "missing or empty config file $RSYNC_CONFIG_FILE"
        log_end_msg 1
        exit 0
    }
    # See ionice(1)
    if test -n $RSYNC_IONICE_PARM && test -x /usr/bin/ionice &&
        /usr/bin/ionice $RSYNC_IONICE_PARM true 2>/dev/null {
        /usr/bin/ionice $RSYNC_IONICE_PARM -p$$ > /dev/null 2>&1
    }
    if start-stop-daemon --start --quiet --background \
        --pidfile $RSYNC_PID_FILE --make-pidfile \
        $RSYNC_NICE_PARM --exec $DAEMON \
        -- --no-detach --daemon --config $RSYNC_CONFIG_FILE $RSYNC_OPTS
    {
        setvar rc = '0'
        sleep 1
        if ! kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1 {
            log_failure_msg "rsync daemon failed to start"
            setvar rc = '1'
        }
    } else {
        setvar rc = '1'
    }
    if test $rc -eq 0 {
        log_end_msg 0
    } else {
        log_end_msg 1
        rm -f $RSYNC_PID_FILE
    }
} # rsync_start


case (1) {
  start {
	if $RSYNC_ENABLE {
	    log_daemon_msg "Starting rsync daemon" "rsync"
	    if test -s $RSYNC_PID_FILE && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1 {
		log_progress_msg "apparently already running"
		log_end_msg 0
		exit 0
	    }
            rsync_start
        } else {
            if test -s $RSYNC_CONFIG_FILE {
                test $VERBOSE != no && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
            }
	}
	}
  stop {
	log_daemon_msg "Stopping rsync daemon" "rsync"
	start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE
	log_end_msg $?
	rm -f $RSYNC_PID_FILE
	}

  reload|force-reload {
	log_warning_msg "Reloading rsync daemon: not needed, as the daemon"
	log_warning_msg "re-reads the config file whenever a client connects."
	}

  restart {
	set +e
	if $RSYNC_ENABLE {
	    log_daemon_msg "Restarting rsync daemon" "rsync"
	    if test -s $RSYNC_PID_FILE && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1 {
		start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE || true
		sleep 1
	    } else {
		log_warning_msg "rsync daemon not running, attempting to start."
	    	rm -f $RSYNC_PID_FILE
	    }
            rsync_start
        } else {
            if test -s $RSYNC_CONFIG_FILE {
                test $VERBOSE != no && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
            }
	}
	}

  status {
	status_of_proc -p $RSYNC_PID_FILE $DAEMON rsync
	exit $?	# notreached due to set -e
	}
  * {
	echo "Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status}"
	exit 1
}
}

exit 0