Hello,

On Fri, 25 Jan 2019 15:19:15 -0500 Adam Di Carlo <a.p.dica...@gmail.com> wrote:
>
> Jan 25 15:16:37 salsa systemd[1]: Starting LSB: OpenIPMI Driver init script...
> Jan 25 15:16:37 salsa openipmi[3081]: /etc/init.d/openipmi: 55: [: 4.17: 
> unexpected operator
> Jan 25 15:16:37 salsa openipmi[3081]: Starting ipmi drivers ipmi.
> Jan 25 15:16:37 salsa systemd[1]: Started LSB: OpenIPMI Driver init script.

attached you find a patch that fixes the bashisms (comparisons and
string localizations). Additionally most shellcheck issues of the script are
corrected (except for the sourcing tests, that should usually get skipped).

No functional change is introduced.

Cheers,
Lars


PS: the script feels a bit ugly and overly complicated in relation to its
limited purpose (load or unload some kernel modules). But at least it should be
in a better maintainable state now.
--- openipmi.orig	2019-09-27 19:37:51.981164100 +0200
+++ openipmi	2019-09-27 20:41:51.774647124 +0200
@@ -34,7 +34,7 @@
 
 CONFIGFILE=/etc/default/openipmi
 # source config info
-[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
+[ -r "${CONFIGFILE}" ] && . "${CONFIGFILE}"
 
 #############################################################################
 # GLOBALS
@@ -51,8 +51,8 @@
     *)
         IPMI_SI_MODULE_NAME="ipmi_si" ;;
 esac
-kernel=`uname -r | cut -d. -f1-2`
-if [ "${kernel}" == "2.4" ]; then
+kernel=$(uname -r | cut -d. -f1-2)
+if [ "${kernel}" = "2.4" ]; then
     IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
     IPMI_SI_MODULE_NAME="ipmi_si_drv"
 fi
@@ -77,7 +77,7 @@
 DEV_IPMI_TIMEOUT=15
 
 UDEV_EXISTS=0
-if [ -e /sbin/udev -o -e /sbin/udevd ]; then
+if [ -e /sbin/udev ] || [ -e /sbin/udevd ]; then
     UDEV_EXISTS=1
 fi
 
@@ -93,8 +93,8 @@
 {
 	OnePlusLoaded=0
 	OnePlusUnloaded=0
-	for m in $@; do
-		if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+	for m in "$@"; do
+		if /sbin/lsmod | grep -qFw "$m"; then
 			echo "$m module loaded."
 			OnePlusLoaded=1
 		elif [ -d "/sys/module/$m" ]; then
@@ -111,8 +111,8 @@
 {
 	OnePlusLoaded=0
 	OnePlusUnloaded=0
-	for m in $@; do
-		if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+	for m in "$@"; do
+		if /sbin/lsmod | grep -qFw "$m"; then
 			OnePlusLoaded=1
 		elif [ -d "/sys/module/$m" ]; then
 			OnePlusLoaded=1
@@ -136,12 +136,14 @@
 {
         rc_base=1
 	rc_hw=1
-        modules_loaded_verbose "${MODULES_BASE}"
+	# shellcheck disable=SC2086
+	modules_loaded_verbose ${MODULES_BASE}
 	[ ${OnePlusLoaded} -eq 0 ] && rc_base=0
-	    
-	modules_loaded_verbose "${MODULES_HW}"
+
+	# shellcheck disable=SC2086
+	modules_loaded_verbose ${MODULES_HW}
 	[ ${OnePlusLoaded} -eq 0 ] && rc_hw=0
-	
+
 	return $((rc_base && rc_hw))
 }
 
@@ -174,18 +176,19 @@
 start_watchdog_common()
 {
 	load_hw_modules
+	# shellcheck disable=SC2086
 	modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1
 	modules_loaded ipmi_watchdog
 	[ ${OnePlusUnloaded} -ne 0 ] &&
 		RETVAL=$((RETVAL | 2)) &&
 		log_end_msg &&
 		return
-	if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then
-		mknod -m 0600 /dev/watchdog c 10 130
-		[ $? -ne 0 ] &&
-			RETVAL=$((RETVAL | 8)) &&
-			log_end_msg &&
+	if [ ${UDEV_EXISTS} -eq 0 ] && [ ! -e /dev/watchdog ]; then
+		if ! mknod -m 0600 /dev/watchdog c 10 130; then
+			RETVAL=$((RETVAL | 8))
+			log_end_msg
 			return
+		fi
 	fi
 	#log_success_msg
 }
@@ -199,7 +202,7 @@
 
 start_watchdog()
 {
-	log_begin_msg $"Starting ipmi_watchdog driver: "
+	log_begin_msg "Starting ipmi_watchdog driver: "
 	[ "${IPMI_WATCHDOG}" != "yes" ] &&
 		RETVAL=$((RETVAL | 2)) &&
 		log_failure_msg "not configured" &&
@@ -210,7 +213,7 @@
 
 stop_watchdog()
 {
-	log_begin_msg $"Stopping ipmi_watchdog driver: "
+	log_begin_msg "Stopping ipmi_watchdog driver: "
 	modprobe -q -r ipmi_watchdog > /dev/null 2>&1
 	modules_loaded ipmi_watchdog
 	if [ ${OnePlusLoaded} -ne 0 ]; then
@@ -242,7 +245,7 @@
 {
 	local poweroff_opts=""
 	load_hw_modules
-	if [ "${IPMI_POWERCYCLE}" == "yes" ]; then
+	if [ "${IPMI_POWERCYCLE}" = "yes" ]; then
 	    modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \
 		poweroff_opts="poweroff_control=2"
 	    modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \
@@ -304,27 +307,28 @@
 	stop_watchdog_quiet
 	stop_powercontrol_quiet
 	for m in ${MODULES}; do
-		modprobe -q -r ${m} > /dev/null 2>&1
+		modprobe -q -r "${m}" > /dev/null 2>&1
 	done
         # delete interface node ONLY if ipmi_devintf is unloaded
-        [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+	if ! lsmod | grep -qFw "ipmi_devintf"; then
 	        rm -f "/dev/ipmi${INTF_NUM}"
+	fi
 }
 
 unload_ipmi_modules_leave_features()
 {
 	for m in ${MODULES_INTERFACES}; do
-		modprobe -q -r ${m} > /dev/null 2>&1
+		modprobe -q -r "${m}" > /dev/null 2>&1
 	done
         # delete interface node ONLY if ipmi_devintf is unloaded
-        [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+	if ! lsmod | grep -qFw "ipmi_devintf"; then
 	        rm -f "/dev/ipmi${INTF_NUM}"
-	lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1
-	if [ "$?" -ne "0" ]; then
+	fi
+	if ! lsmod | grep -Eqw "ipmi_(poweroff|watchdog)"; then
 		stop_watchdog_quiet
 		stop_powercontrol_quiet
 		for m in ${MODULES}; do
-			modprobe -q -r ${m} > /dev/null 2>&1
+			modprobe -q -r "${m}" > /dev/null 2>&1
 		done
 	fi
 }
@@ -346,15 +350,15 @@
 		[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
 		if [ ${OnePlusLoaded} -eq 1 ]; then
 			if [ ${UDEV_EXISTS} -eq 0 ]; then
-				DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'`
-				rm -f /dev/ipmi${INTF_NUM}
-				mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
+				DEVMAJOR=$(awk '/ipmidev/{print $1}' /proc/devices)
+				rm -f "/dev/ipmi${INTF_NUM}"
+				mknod -m 0600 "/dev/ipmi${INTF_NUM}" c "${DEVMAJOR}" 0 || RETVAL=$((RETVAL | 4))
 			fi
 
 			# udev can take several seconds to create /dev/ipmi0, 
 			# but it happens asynchronously, so delay here
 			locdelay=${DEV_IPMI_TIMEOUT}
-			while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do
+			while [ ! -e "/dev/ipmi${INTF_NUM}" ] && [ "${locdelay}" -gt 0 ]; do
 				locdelay=$((locdelay - 1))
 				sleep 1
 			done
@@ -367,9 +371,9 @@
 		RETVAL=$((RETVAL & ~2))
 		[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
 		if [ ${OnePlusLoaded} -eq 1 ]; then
-			DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
+			DEVMAJOR=$(awk '/imb/{print $1}' /proc/devices)
 			rm -f /dev/imb
-			mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
+			mknod -m 0600 /dev/imb c "${DEVMAJOR}" 0 || RETVAL=$((RETVAL | 4))
 		fi
 	fi
 
@@ -384,13 +388,13 @@
 {
 	log_begin_msg "Starting ${MODULE_NAME} drivers" "${MODULE_NAME}"
 	load_ipmi_modules
-	if [ ${RETVAL} -eq 0 ]; then
-		touch ${LOCKFILE}
+	if [ "${RETVAL}" -eq 0 ]; then
+		touch "${LOCKFILE}"
 	else
 		if [ $((RETVAL & 1)) -eq 1 ]; then
 			log_end_msg 1
 		else
-			touch ${LOCKFILE}
+			touch "${LOCKFILE}"
 		fi
 	fi
 	start_watchdog_quiet
@@ -403,12 +407,13 @@
 {
 	log_begin_msg "Stopping ${MODULE_NAME} drivers."
 	unload_ipmi_modules_leave_features
+	# shellcheck disable=SC2086
 	modules_loaded ${MODULES_INTERFACES}
 	if [ ${OnePlusLoaded} -ne 0 ]; then
 		RETVAL=$((RETVAL | 32))
 		log_failure_msg "may be in use"
 	else
-		rm -f ${LOCKFILE}
+		rm -f "${LOCKFILE}"
 	fi
 	log_end_msg 0
 }
@@ -417,12 +422,13 @@
 {
 	log_begin_msg "Stopping ${MODULE_NAME} drivers."
 	unload_all_ipmi_modules
+	# shellcheck disable=SC2086
 	modules_loaded ${MODULES}
 	if [ ${OnePlusLoaded} -ne 0 ]; then
 		RETVAL=$((RETVAL | 32))
 		log_failure_msg "may be in use"
 	else
-		rm -f ${LOCKFILE}
+		rm -f "${LOCKFILE}"
 		log_success_msg
 	fi
 	log_end_msg 0
@@ -440,65 +446,70 @@
 
 status_all()
 {
-	minimum_modules_loaded
-	[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+	if minimum_modules_loaded; then
+            RETVAL=$((RETVAL | 1))
+	fi
 	
+        # shellcheck disable=SC2086
 	modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES}
 	[ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2))
 
-	if [ "${DEV_IPMI}" = "yes" ]; then 
-	    device_node_exists /dev/ipmi${INTF_NUM}
-	    [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+	if [ "${DEV_IPMI}" = "yes" ] && device_node_exists "/dev/ipmi${INTF_NUM}"; then 
+		RETVAL=$((RETVAL | 4))
 	fi
 
-	if [ "${IPMI_IMB}" = "yes" ]; then
-	    device_node_exists /dev/imb
-	    [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+	if [ "${IPMI_IMB}" = "yes" ] && device_node_exists /dev/imb; then
+		RETVAL=$((RETVAL | 4))
 	fi
 
-	if [ "${IPMI_WATCHDOG}" = "yes" ]; then
-	    device_node_exists /dev/watchdog
-	    [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+	if [ "${IPMI_WATCHDOG}" = "yes" ] && device_node_exists /dev/watchdog; then
+		RETVAL=$((RETVAL | 8))
 	fi
 
-	[ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16))
+	if [ ! -e "${LOCKFILE}" ]; then
+		RETVAL=$((RETVAL | 16))
+	fi
 }
 
 status()
 {
-	minimum_modules_loaded
-	[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+	if minimum_modules_loaded; then
+		RETVAL=$((RETVAL | 1))
+	fi
 	
 	if [ "${DEV_IPMI}" = "yes" ]; then 
 	    modules_loaded_verbose ipmi_devintf
 	    [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
 
-	    device_node_exists /dev/ipmi${INTF_NUM}
-	    [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+		if device_node_exists "/dev/ipmi${INTF_NUM}"; then
+			RETVAL=$((RETVAL | 4))
+		fi
 	fi
 
-	if [ "${IPMI_IMB}" = "yes" ]; then
-	    device_node_exists /dev/imb
-	    [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+	if [ "${IPMI_IMB}" = "yes" ] && device_node_exists /dev/imb; then
+		RETVAL=$((RETVAL | 4))
 	fi
 }
 
 status_watchdog()
 {
-	minimum_modules_loaded
-	[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+	if minimum_modules_loaded; then
+		RETVAL=$((RETVAL | 1))
+	fi
 
 	modules_loaded_verbose ipmi_watchdog
 	[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
 
-	device_node_exists /dev/watchdog
-	[ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+	if device_node_exists /dev/watchdog; then
+		RETVAL=$((RETVAL | 8))
+	fi
 }
 
 status_powercontrol()
 {
-	minimum_modules_loaded
-	[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+	if minimum_modules_loaded; then
+		RETVAL=$((RETVAL | 1))
+	fi
 
 	modules_loaded_verbose ipmi_powercontrol
 	[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
@@ -513,7 +524,9 @@
 
 condrestart ()
 {
-	[ -e ${LOCKFILE} ] && restart
+	if [ -e "${LOCKFILE}" ]; then
+		restart
+	fi
 }
 
 #############################################################################

Reply via email to