-bash-3.00# more /opt/csw/lib/svc/method/svc-vsftpd
#!/bin/sh
# /etc/init.d/vsftpd
#
# Originally written by Nicolas LEMIRE <nicolas.lemire@jouy.inra.fr>
# Adapted by Yann Rouillard <yann@blastwave.org>
#
# treat unset variable as error
set -u
# exit immediately on error line
set -e
. /lib/svc/share/smf_include.sh
################################
# Variable intialization #
################################
PROGNAME=vsftpd
BINPATH=/opt/csw/sbin
PIDFILE=/var/run/vsftpd.pid
INIT_FILE=/etc/init.d/vsftpd
CONF_DIR=/opt/csw/etc/vsftpd
CONF_FILE=$CONF_DIR/vsftpd.conf
OPTIONS=""
####################
# Useful functions #
####################
#
# Check vsftpd config file, i.e. it tests if:
# - it is correctly set up to work with this init script (listen=yes and background=no)
# - ftp user exists if anonymous access is configured
#
check_config_file()
{
if [ ! -f ${CONF_FILE} ]; then
echo "vsftpd: ERROR: configuration file $CONF_FILE doesn't exist." >&2
exit $SMF_EXIT_ERR_CONFIG;
fi
if /usr/bin/egrep -i "^ *listen(_ipv6)? *= *yes" ${CONF_FILE} > /dev/null; then
if /usr/bin/egrep -i "^ *background *= *yes" ${CONF_FILE} > /dev/null; then
echo "vsftpd: ERROR: this script doesn't work with background option enabled in $CONF_FILE." >&2
exit $SMF_EXIT_ERR_CONFIG
fi
# As the csw package default configuration is anonymous access only and doesn't automatically create the ftp user,
# we warn the user if it didn't create this user.
if /usr/bin/egrep -i "^ *anonymous_enable *= *yes" ${CONF_FILE} > /dev/null; then
FTP_USER=`/usr/bin/awk -F= '$0 ~ /^ *ftp_username *=/ { print $2; exit }' ${CONF_FILE}`
FTP_USER=${FTP_USER:-ftp}
getent passwd $FTP_USER >/dev/null || {
echo "vsftpd: WARNING: You should create the user $FTP_USER for anonymous ftp access to work."
exit $SMF_EXIT_MON_DEGRADE
}
fi
return 0
fi
exit $SMF_EXIT_ERR_CONFIG
}
#
# check if a program is running by looking at its pid file
# check_proc pid_file program_command
#
check_proc()
{
if [ -f $1 ]; then
_PID=`cat $1 | head -1`
if [ -n "$_PID" ]; then
_COMMAND=`ps -p $_PID -o comm | tail -1`
[ "x$_COMMAND" = "x$2" ] && return 0
fi
return 2
else
return 3
fi
}
start()
{
if check_proc $PIDFILE $BINPATH/$PROGNAME; then
echo "$PROGNAME is already running."
else
rm -f $PIDFILE
echo "Starting $PROGNAME: \c"
$BINPATH/$PROGNAME $OPTIONS $CONF_FILE &
echo $! > $PIDFILE
# We can't rely on exit code for backgrounded job
# so we have to test if the process is really running
if check_proc $PIDFILE $BINPATH/$PROGNAME; then
echo "OK."
else
echo "Failed."
rm -f $PIDFILE
fi
fi
}
stop()
{
if check_proc $PIDFILE $BINPATH/$PROGNAME; then
echo "Stopping $PROGNAME: \c"
kill -15 `cat $PIDFILE | head -1`
rm -f $PIDFILE
echo "OK."
else
rm -f $PIDFILE
echo "$PROGNAME is not running."
fi
}
restart()
{
stop
start
}
reload()
{
if check_proc $PIDFILE $BINPATH/$PROGNAME; then
echo "Reloading $PROGNAME: \c"
kill -1 `cat $PIDFILE | head -1`
echo "OK."
else
echo "$PROGNAME is not running."
fi
}
status()
{
check_proc $PIDFILE $BINPATH/$PROGNAME
RET=$?
if [ "$RET" -eq 0 ]; then
echo "$PROGNAME is running."
else
echo "$PROGNAME is not running."
fi
return $RET
}
[ -x ${BINPATH}/${PROGNAME} ] || exit 5
[ -r ${CONF_FILE} ] || exit 5
# We don't do anything if vsftpd is not configured
# or is configured in inetd mode
check_config_file
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
reload) reload ;;
status) status ;;
*)
echo "Usage: $INIT_FILE {start|stop|restart|reload|status}"
exit 1
;;
esac