You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.3 KiB

From de3c26d6333a00210de8d112cdb90dc8c2e19367 Mon Sep 17 00:00:00 2001
From: Lars Ellenberg <lars.ellenberg@linbit.com>
Date: Mon, 22 Sep 2014 14:58:58 +0200
Subject: [PATCH 3/6] Fix: ocf_exit_reason: implicit format string "%s" for
single argument version
Also, don't use the $msg as format string, but via "%s%s" "$cookie" "$msg".
Or, depending on presence of % sequences in $msg,
you'd get different output on stderr and via ha_log.
Without the patch:
( OCF_ROOT=$PWD dash -c '. heartbeat/ocf-shellfuncs.in ; ocf_exit_reason "0.x% Bugs less"' )
dash: 372: printf: % B: invalid directive
ocf-exit-reason:0.x
( OCF_ROOT=$PWD dash -c '. heartbeat/ocf-shellfuncs.in ; ocf_exit_reason "0.x% bugs less"' )
ocf-exit-reason:0.xugs less
With this patch:
( OCF_ROOT=$PWD dash -c '. heartbeat/ocf-shellfuncs.in ; ocf_exit_reason "0.x% Bugs less"' )
ocf-exit-reason:0.x% Bugs less
( OCF_ROOT=$PWD dash -c '. heartbeat/ocf-shellfuncs.in ; ocf_exit_reason "0.x% bugs less"' )
ocf-exit-reason:0.x% bugs less
---
heartbeat/ocf-shellfuncs.in | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/heartbeat/ocf-shellfuncs.in b/heartbeat/ocf-shellfuncs.in
index 9ba8e26..c370fca 100644
--- a/heartbeat/ocf-shellfuncs.in
+++ b/heartbeat/ocf-shellfuncs.in
@@ -356,22 +356,33 @@ ocf_log() {
ocf_exit_reason()
{
local cookie="$OCF_EXIT_REASON_PREFIX"
- local fmt="$1"
+ local fmt
local msg
- if [ $# -lt 1 ]; then
- ocf_log err "Not enough arguments [$#] to ocf_log_exit_msg."
- fi
+ # No argument is likely not intentional.
+ # Just one argument implies a printf format string of just "%s".
+ # "Least surprise" in case some interpolated string from variable
+ # expansion or other contains a percent sign.
+ # More than one argument: first argument is going to be the format string.
+ case $# in
+ 0) ocf_log err "Not enough arguments to ocf_log_exit_msg." ;;
+ 1) fmt="%s" ;;
+
+ *) fmt=$1
+ shift
+ case $fmt in
+ *%*) : ;; # ok, does look like a format string
+ *) ocf_log warn "Does not look like format string: [$fmt]" ;;
+ esac ;;
+ esac
+
if [ -z "$cookie" ]; then
# use a default prefix
cookie="ocf-exit-reason:"
fi
- shift
-
msg=$(printf "${fmt}" "$@")
-
- printf >&2 "%s${msg}\n" "$cookie"
+ printf >&2 "%s%s\n" "$cookie" "$msg"
__ha_log_ignore_stderr_once="true"
ha_log "ERROR: $msg"
}
--
1.8.4.2