Blob Blame History Raw
From 3c383f3dbb3b5351b25d33aa6e516ab8fc04a26a Mon Sep 17 00:00:00 2001
From: David Vossel <dvossel@redhat.com>
Date: Tue, 28 Apr 2015 11:47:21 -0500
Subject: [PATCH] High: IPsrcaddr: return correct error code during stop when
 misconfigured

---
 heartbeat/IPsrcaddr | 45 +++++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
index 8163c0c..33c5be6 100755
--- a/heartbeat/IPsrcaddr
+++ b/heartbeat/IPsrcaddr
@@ -387,15 +387,27 @@ ip_status() {
 
 srca_validate_all() {
 
-    check_binary $AWK
-    check_binary $IFCONFIG
+	if [ -z "$OCF_RESKEY_ipaddress" ]; then
+		#  usage
+		ocf_exit_reason "Please set OCF_RESKEY_ipaddress to the preferred source IP address!"
+		return $OCF_ERR_CONFIGURED
+	fi
+
+
+	if ! [ "x$SYSTYPE" = "xLinux" ]; then
+		# checks after this point are only relevant for linux.
+		return $OCF_SUCCESS
+	fi
+
+	check_binary $AWK
+	check_binary $IFCONFIG
 
 #	The IP address should be in good shape
 	if CheckIP "$ipaddress"; then
 	  : 
 	else
 	  ocf_exit_reason "Invalid IP address [$ipaddress]"
-	  exit $OCF_ERR_CONFIGURED
+	  return $OCF_ERR_CONFIGURED
 	fi
 
 	if ocf_is_probe; then
@@ -407,8 +419,9 @@ srca_validate_all() {
 	  :
 	else
 	  ocf_exit_reason "We are not serving [$ipaddress], hence can not make it a preferred source address"
-	  exit $OCF_ERR_INSTALLED
+	  return $OCF_ERR_INSTALLED
 	fi
+	return $OCF_SUCCESS
 }
 
 if
@@ -430,18 +443,22 @@ case $1 in
 			;;
 esac
 
-if 
-  [ -z "$OCF_RESKEY_ipaddress" ]
-then
-#  usage
-  ocf_exit_reason "Please set OCF_RESKEY_ipaddress to the preferred source IP address!"
-  exit $OCF_ERR_CONFIGURED
-fi
-
 ipaddress="$OCF_RESKEY_ipaddress"
 
-if [ "x$SYSTYPE" = "xLinux" ]; then
-	srca_validate_all
+srca_validate_all
+rc=$?
+if [ $rc -ne $OCF_SUCCESS ]; then
+	case $1 in
+		# if we can't validate the configuration during a stop, that
+		# means the resources isn't configured correctly. There's no way
+		# to actually stop the resource in this situation because there's
+		# no way it could have even started. Return success here
+		# to indicate that the resource is not running, otherwise the
+		# stop action will fail causing the node to be fenced just because
+		# of a mis configuration.
+		stop) exit $OCF_SUCCESS;;
+		*)    exit $rc;;
+	esac
 fi
 
 findif_out=`$FINDIF -C`
-- 
1.8.4.2