All pastes #580702 Raw Edit

vsftpd_blah

public text v1 · immutable
·published 2007-06-21 06:06 UTC
rendered paste body
-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