diff --git a/ci/build.sh b/ci/build.sh index b900ddc05..0c954682a 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -1,93 +1,95 @@ #!/usr/bin/env bash set -o pipefail [[ "${DEBUG:-}" ]] && set -x declare -i failed failed=0 # SC2046: Quote this to prevent word splitting. # SC1090: Can't follow non-constant source. Use a directive to specify location. # SC2039: In POSIX sh, 'local' is undefined. # SC2086: Double quote to prevent globbing and word splitting. # SC2154: var is referenced but not assigned. -ignored_errors="SC1090,SC2039,SC2154" +# SC1087: Use braces when expanding arrays. +ignored_errors="SC1090,SC2039,SC2154,SC1087" success() { printf "\r\033[2K [ \033[00;32mOK\033[0m ] Checking %s...\n" "$1" } warn() { printf "\r\033[2K [\033[0;33mWARNING\033[0m] Checking %s...\n" "$1" } fail() { printf "\r\033[2K [\033[0;31mFAIL\033[0m] Checking %s...\n" "$1" failed=$((failed + 1)) } check() { local script="$1" out="$(shellcheck -s sh -f gcc -x -e "$ignored_errors" "$script" 2>&1)" rc=$? if [ $rc -eq 0 ]; then success "$script" elif echo "$out" | grep -i 'error' >/dev/null; then fail "$script" else warn "$script" fi echo "$out" } find_prunes() { local prunes="! -path './.git/*'" if [ -f .gitmodules ]; then while read -r module; do prunes="$prunes ! -path './$module/*'" done < <(grep path .gitmodules | awk '{print $3}') fi echo "$prunes" } find_cmd() { echo "find heartbeat -type f -and \( -perm /111 -or -name '*.sh' -or -name '*.c' -or -name '*.in' \) $(find_prunes)" } check_all_executables() { echo "Checking executables and .sh files..." while read -r script; do file --mime "$script" | grep 'charset=binary' >/dev/null 2>&1 && continue file --mime "$script" | grep 'text/x-python' >/dev/null 2>&1 && continue # upstream CI doesnt detect MIME-format correctly for Makefiles [[ "$script" =~ .*/Makefile.in ]] && continue if grep -qE "\ : vsftpd script # License: GNU General Public License (GPLv2) # # # usage: $0 {start|stop|status|monitor|validate-all|meta-data} # # The "start" arg starts vsftpd. # # The "stop" arg stops it. # # OCF parameters: # OCF_RESKEY_binpath # OCF_RESKEY_conffile # OCF_RESKEY_pidfile # ########################################################################## # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs : ${OCF_RESKEY_binpath="/usr/sbin/vsftpd"} : ${OCF_RESKEY_conffile="/etc/vsftpd/vsftpd.conf"} : ${OCF_RESKEY_pidfile="/var/run/vsftpd.pid"} USAGE="Usage: $0 {start|stop|status|monitor|validate-all|meta-data}"; ########################################################################## usage() { echo $USAGE >&2 } meta_data() { cat < 1.0 This script manages vsftpd Manages an vsftpd The vsftpd binary path. For example, "/usr/sbin/vsftpd" Full path to the vsftpd binary The vsftpd configuration file name with full path. For example, "/etc/vsftpd/vsftpd.conf" Configuration file name with full path The vsftpd pidfile with full path. For example, "/var/run/vsftpd.pid" PID file with full path END exit $OCF_SUCCESS } get_pidfile() { PIDFILE=$OCF_RESKEY_pidfile } vsftpd_status() { if [ -n "$PIDFILE" -a -f $PIDFILE ]; then # vsftpd is probably running PID=`cat $PIDFILE` if [ -n "$PID" ]; then if ps -p $PID | grep vsftpd >/dev/null ; then ocf_log info "vsftpd daemon running" return $OCF_SUCCESS else ocf_log info "vsftpd daemon is not running but pid file exists" return $OCF_ERR_GENERIC fi else ocf_log err "PID file empty!" return $OCF_ERR_GENERIC fi fi # vsftpd is not running ocf_log info "vsftpd daemon is not running" return $OCF_NOT_RUNNING } vsftpd_start() { # if vsftpd is running return success vsftpd_status retVal=$? if [ $retVal -eq $OCF_SUCCESS ]; then exit $OCF_SUCCESS elif [ $retVal -ne $OCF_NOT_RUNNING ]; then ocf_log err "Error. Unknown status." exit $OCF_ERR_GENERIC fi if [ -n "$OCF_RESKEY_binpath" ]; then COMMAND="$OCF_RESKEY_binpath" fi if [ -n "$OCF_RESKEY_conffile" ]; then COMMAND="$COMMAND $OCF_RESKEY_conffile" fi $COMMAND; if [ $? -ne 0 ]; then ocf_log err "Error. vsftpd returned error $?." exit $OCF_ERR_GENERIC fi PID=$( pgrep $OCF_RESKEY_binpath ) case $? in 0) ocf_log info "PID file (pid:${PID} at $PIDFILE) created for vsftpd." ocf_log info "Started vsftpd." echo $PID > $PIDFILE exit $OCF_SUCCESS ;; 1) rm -f "$PIDFILE" > /dev/null 2>&1 ocf_log info "$Error getting pid." exit $OCF_ERR_GENERIC ;; *) rm -f "$PIDFILE" > /dev/null 2>&1 ocf_exit_reason "Error encountered detecting pid of vsftpd." - exit OCF_ERR_GENERIC + exit $OCF_ERR_GENERIC ;; esac } vsftpd_stop() { if vsftpd_status ; then PID=`cat $PIDFILE` if [ -n "$PID" ] ; then kill $PID if [ $? -ne 0 ]; then kill -s KILL $PID if [ $? -ne 0 ]; then ocf_log err "Error. Could not stop vsftpd daemon." return $OCF_ERR_GENERIC fi fi rm $PIDFILE 2>/dev/null fi fi ocf_log info "Stopped vsftpd daemon." exit $OCF_SUCCESS } vsftpd_monitor() { vsftpd_status } vsftpd_validate_all() { check_binary $OCF_RESKEY_binpath if [ -n "$OCF_RESKEY_conffile" -a ! -f "$OCF_RESKEY_conffile" ]; then ocf_log err "Config file $OCF_RESKEY_conffile does not exist." exit $OCF_ERR_ARGS fi return $OCF_SUCCESS } # # Main # if [ $# -ne 1 ]; then usage exit $OCF_ERR_ARGS fi case $1 in start) get_pidfile vsftpd_start ;; stop) get_pidfile vsftpd_stop ;; status) get_pidfile vsftpd_status ;; monitor)get_pidfile vsftpd_monitor ;; validate-all) vsftpd_validate_all ;; meta-data) meta_data ;; usage) usage exit $OCF_SUCCESS ;; *) usage exit $OCF_ERR_UNIMPLEMENTED ;; esac