#!/bin/sh
#
# pureftpd	PureFTPD server
#
# chkconfig:	345 85 15
# description:	PureFTPD is fast, production-quality, standard-conformant FTP server
#

# Source function library
. /etc/rc.d/init.d/functions

# Get network config
. /etc/sysconfig/network

PURE_FTPD_CONF=/etc/ftpd/pureftpd.conf
[ -f /etc/pure-ftpd/conf/pureftpd.conf ] && PURE_FTPD_CONF=/etc/pure-ftpd/conf/pureftpd.conf

PURE_AUTH_SCRIPT=/etc/pure-ftpd/authd/auth.script
PURE_AUTH_SOCKET=/var/run/pure-authd/socket
PURE_CERT_SCRIPT=/etc/pure-ftpd/certd/cert.script
PURE_CERT_SOCKET=/var/run/pure-certd/socket

# Get service config
[ -f /etc/sysconfig/pure-ftpd ] && . /etc/sysconfig/pure-ftpd

# Check that networking is up.
if is_yes "${NETWORKING}"; then
	if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
		msg_network_down pure-ftpd
		exit 1
	fi
else
	exit 0
fi

start() {
	# Check if the service is already running?
	if [ ! -f /var/lock/subsys/pure-ftpd ]; then
		RETVAL=0
		if [ -x "$PURE_AUTH_SCRIPT" ]; then
			PURE_AUTH=yes
			msg_starting pure-authd

			# 326/326 - authd/authd

			mkdir -p /var/run/pure-authd
			chown ftpauth:root /var/run/pure-authd
			chmod 770 /var/run/pure-authd

			daemon /usr/sbin/pure-authd --uid 326 --gid 326 --pid /var/run/pure-authd.pid \
				--run "$PURE_AUTH_SCRIPT" --socket "$PURE_AUTH_SOCKET" --daemonize
			RETVAL=$?
		fi
		if [ $RETVAL -eq 0 -a -x "$PURE_CERT_SCRIPT" ]; then
			PURE_CERT=yes
			msg_starting pure-certd

			# 335/335 - certd/certd

			mkdir -p /var/run/pure-certd
			chown ftpcert:root /var/run/pure-certd
			chmod 770 /var/run/pure-certd

			daemon /usr/sbin/pure-certd --uid 335 --gid 335 --pid /var/run/pure-certd.pid \
				--run "$PURE_CERT_SCRIPT" --socket "$PURE_CERT_SOCKET" --daemonize
			RETVAL=$?
		fi
		if [ $RETVAL -eq 0 ]; then
			msg_starting pure-ftpd
			rm -f /var/run/pure-ftpd/client*
			modprobe -s capability > /dev/null 2>&1
			daemon /usr/sbin/pure-ftpd ${PURE_FTPD_CONF} \
				$([ "$PURE_AUTH" = "yes" ] && echo "-lextauth:$PURE_AUTH_SOCKET") \
				$([ "$PURE_CERT" = "yes" ] && echo "--extcert=$PURE_CERT_SOCKET") \
				--daemonize
			RETVAL=$?

			if [ -n "$UPLOADSCRIPT" ]; then
				msg_starting pure-uploadscript
				UPLOADSCRIPTOPTS="-B -r $UPLOADSCRIPT"
				[ -n "$UPLOADSCRIPT_UID" ] && UPLOADSCRIPTOPTS="$UPLOADSCRIPTOPTS -u $UPLOADSCRIPT_UID"
				[ -n "$UPLOADSCRIPT_GID" ] && UPLOADSCRIPTOPTS="$UPLOADSCRIPTOPTS -g $UPLOADSCRIPT_GID"
				daemon /usr/sbin/pure-uploadscript $UPLOADSCRIPTOPTS
				RETVAL=$(($RETVAL+$?))
			fi
		else
			msg_starting pure-ftpd
			deltext
			fail
		fi

		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/pure-ftpd
	else
		msg_already_running pure-ftpd
	fi
}

stop() {
	# Stop daemons.
	if [ -f /var/lock/subsys/pure-ftpd ]; then
		if [ -n "$UPLOADSCRIPT" ]; then
		    msg_stopping pure-uploadscript
		    killproc pure-uploadscript
		fi

		if [ -x "$PURE_AUTH_SCRIPT" -o -r /var/run/pure-authd.pid ]; then
			msg_stopping pure-authd
			killproc pure-authd
		fi

		if [ -x "$PURE_CERT_SCRIPT" -o -r /var/run/pure-certd.pid ]; then
			msg_stopping pure-certd
			killproc pure-certd
		fi

		msg_stopping pure-ftpd
		killproc pure-ftpd
		
		rm -f /var/lock/subsys/pure-ftpd > /dev/null 2>&1
	else
		msg_not_running pure-ftpd
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  status)
	status pure-ftpd
	PUREFTPD_RETVAL=$?
	RETVAL=$PUREFTPD_RETVAL

	status pure-uploadscript
	PUREUPLOADSCRIPT_RETVAL=$?
	if [ -n "$UPLOADSCRIPT" ]; then
	  RETVAL=$PUREUPLOADSCRIPT_RETVAL
	fi
	if [ $PUREFTPD_RETVAL -eq 0 ]; then
		pure-ftpwho
	fi
	;;
  restart|force-reload)
	stop
	start
	;;
  *)
	msg_usage "$0 {start|stop|restart|force-reload|status}"
	exit 3
	;;
esac

exit $RETVAL
