Control: tags 727731 + patch The attached patch to fancontrol adds a bunch of improved shell escaping, and makes the change that Boris Gjenero suggests. This resolves the problem for me.
Regards,
--dkg
diff --git a/prog/pwm/fancontrol b/prog/pwm/fancontrol
index 2de9ba6..3935307 100755
--- a/prog/pwm/fancontrol
+++ b/prog/pwm/fancontrol
@@ -55,21 +55,21 @@ function LoadConfig
fi
# grep configuration from file
- INTERVAL=`egrep '^INTERVAL=.*$' $1 | sed -e 's/INTERVAL=//g'`
- DEVPATH=`egrep '^DEVPATH=.*$' $1 | sed -e 's/DEVPATH= *//g'`
- DEVNAME=`egrep '^DEVNAME=.*$' $1 | sed -e 's/DEVNAME= *//g'`
- FCTEMPS=`egrep '^FCTEMPS=.*$' $1 | sed -e 's/FCTEMPS=//g'`
- MINTEMP=`egrep '^MINTEMP=.*$' $1 | sed -e 's/MINTEMP=//g'`
- MAXTEMP=`egrep '^MAXTEMP=.*$' $1 | sed -e 's/MAXTEMP=//g'`
- MINSTART=`egrep '^MINSTART=.*$' $1 | sed -e 's/MINSTART=//g'`
- MINSTOP=`egrep '^MINSTOP=.*$' $1 | sed -e 's/MINSTOP=//g'`
+ INTERVAL=`egrep '^INTERVAL=.*$' "$1" | sed -e 's/INTERVAL=//g'`
+ DEVPATH=`egrep '^DEVPATH=.*$' "$1" | sed -e 's/DEVPATH= *//g'`
+ DEVNAME=`egrep '^DEVNAME=.*$' "$1" | sed -e 's/DEVNAME= *//g'`
+ FCTEMPS=`egrep '^FCTEMPS=.*$' "$1" | sed -e 's/FCTEMPS=//g'`
+ MINTEMP=`egrep '^MINTEMP=.*$' "$1" | sed -e 's/MINTEMP=//g'`
+ MAXTEMP=`egrep '^MAXTEMP=.*$' "$1" | sed -e 's/MAXTEMP=//g'`
+ MINSTART=`egrep '^MINSTART=.*$' "$1" | sed -e 's/MINSTART=//g'`
+ MINSTOP=`egrep '^MINSTOP=.*$' "$1" | sed -e 's/MINSTOP=//g'`
# optional settings:
- FCFANS=`egrep '^FCFANS=.*$' $1 | sed -e 's/FCFANS=//g'`
- MINPWM=`egrep '^MINPWM=.*$' $1 | sed -e 's/MINPWM=//g'`
- MAXPWM=`egrep '^MAXPWM=.*$' $1 | sed -e 's/MAXPWM=//g'`
+ FCFANS=`egrep '^FCFANS=.*$' "$1" | sed -e 's/FCFANS=//g'`
+ MINPWM=`egrep '^MINPWM=.*$' "$1" | sed -e 's/MINPWM=//g'`
+ MAXPWM=`egrep '^MAXPWM=.*$' "$1" | sed -e 's/MAXPWM=//g'`
# Check whether all mandatory settings are set
- if [[ -z ${INTERVAL} || -z ${FCTEMPS} || -z ${MINTEMP} || -z ${MAXTEMP} || -z ${MINSTART} || -z ${MINSTOP} ]]
+ if [[ -z "${INTERVAL}" || -z "${FCTEMPS}" || -z "${MINTEMP}" || -z "${MAXTEMP}" || -z "${MINSTART}" || -z "${MINSTOP}" ]]
then
echo "Some mandatory settings missing, please check your config file!" >&2
exit 1
@@ -89,21 +89,21 @@ function LoadConfig
let fcvcount=0
for fcv in $FCTEMPS
do
- if ! echo $fcv | egrep -q '='
+ if ! printf '%s' "$fcv" | egrep -q '='
then
echo "Error in configuration file:" >&2
echo "FCTEMPS value is improperly formatted" >&2
exit 1
fi
- AFCPWM[$fcvcount]=`echo $fcv |cut -d'=' -f1`
- AFCTEMP[$fcvcount]=`echo $fcv |cut -d'=' -f2`
- AFCFAN[$fcvcount]=`echo $FCFANS |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
- AFCMINTEMP[$fcvcount]=`echo $MINTEMP |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
- AFCMAXTEMP[$fcvcount]=`echo $MAXTEMP |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
- AFCMINSTART[$fcvcount]=`echo $MINSTART |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
- AFCMINSTOP[$fcvcount]=`echo $MINSTOP |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
- AFCMINPWM[$fcvcount]=`echo $MINPWM |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCPWM[$fcvcount]=`printf '%s' "$fcv" |cut -d'=' -f1`
+ AFCTEMP[$fcvcount]=`printf '%s' "$fcv" |cut -d'=' -f2`
+ AFCFAN[$fcvcount]=`printf '%s' "$FCFANS" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCMINTEMP[$fcvcount]=`printf '%s' "$MINTEMP" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCMAXTEMP[$fcvcount]=`printf '%s' "$MAXTEMP" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCMINSTART[$fcvcount]=`printf '%s' "$MINSTART" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCMINSTOP[$fcvcount]=`printf '%s' "$MINSTOP" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
+ AFCMINPWM[$fcvcount]=`printf '%s' "$MINPWM" |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
[ -z "${AFCMINPWM[$fcvcount]}" ] && AFCMINPWM[$fcvcount]=0
AFCMAXPWM[$fcvcount]=`echo $MAXPWM |sed -e 's/ /\n/g' |egrep "${AFCPWM[$fcvcount]}" |cut -d'=' -f2`
[ -z "${AFCMAXPWM[$fcvcount]}" ] && AFCMAXPWM[$fcvcount]=255
@@ -181,8 +181,8 @@ function ValidateDevices()
for entry in $OLD_DEVPATH
do
- device=`echo "$entry" | sed -e 's/=[^=]*$//'`
- path=`echo "$entry" | sed -e 's/^[^=]*=//'`
+ device=`printf '%s' "$entry" | sed -e 's/=[^=]*$//'`
+ path=`printf '%s' "$entry" | sed -e 's/^[^=]*=//'`
if [ "`DevicePath "$device"`" != "$path" ]
then
@@ -193,8 +193,8 @@ function ValidateDevices()
for entry in $OLD_DEVNAME
do
- device=`echo "$entry" | sed -e 's/=[^=]*$//'`
- name=`echo "$entry" | sed -e 's/^[^=]*=//'`
+ device=`printf '%s' "$entry" | sed -e 's/=[^=]*$//'`
+ name=`printf '%s' "$entry" | sed -e 's/^[^=]*=//'`
if [ "`DeviceName "$device"`" != "$name" ]
then
@@ -203,7 +203,7 @@ function ValidateDevices()
fi
done
- return $outdated
+ return "$outdated"
}
# Check that all referenced sysfs files exist
@@ -265,7 +265,7 @@ if [ "$1" == "--check" ]
then
if [ -f "$2" ]
then
- LoadConfig $2
+ LoadConfig "$2"
else
LoadConfig /etc/fancontrol
fi
@@ -274,7 +274,7 @@ fi
if [ -f "$1" ]
then
- LoadConfig $1
+ LoadConfig "$1"
else
LoadConfig /etc/fancontrol
fi
@@ -329,63 +329,63 @@ echo $$ > "$PIDFILE"
# $1 = pwm file name
function pwmdisable()
{
- local ENABLE=${1}_enable
+ local ENABLE="${1}_enable"
# No enable file? Just set to max
- if [ ! -f $ENABLE ]
+ if [ ! -f "$ENABLE" ]
then
- echo $MAX > $1
+ printf '%s\n' "$MAX" > "$1"
return 0
fi
# Try pwmN_enable=0
- echo 0 > $ENABLE 2> /dev/null
- if [ `cat $ENABLE` -eq 0 ]
+ echo 0 > "$ENABLE" 2> /dev/null
+ if [ `cat "$ENABLE"` -eq 0 ]
then
# Success
return 0
fi
# It didn't work, try pwmN_enable=1 pwmN=255
- echo 1 > $ENABLE 2> /dev/null
- echo $MAX > $1
- if [ `cat $ENABLE` -eq 1 -a `cat $1` -ge 190 ]
+ echo 1 > "$ENABLE" 2> /dev/null
+ printf '%s\n' "$MAX" > $1
+ if [ `cat "$ENABLE"` -eq 1 -a `cat "$1"` -ge 190 ]
then
# Success
return 0
fi
# Nothing worked
- echo "$ENABLE stuck to" `cat $ENABLE` >&2
+ printf "%s stuck to %s\n" "$ENABLE" "$(cat "$ENABLE")" >&2
return 1
}
# $1 = pwm file name
function pwmenable()
{
- local ENABLE=${1}_enable
+ local ENABLE="${1}_enable"
- if [ -f $ENABLE ]
+ if [ -f "$ENABLE" ]
then
- echo 1 > $ENABLE 2> /dev/null
+ echo 1 > "$ENABLE" 2> /dev/null
if [ $? -ne 0 ]
then
return 1
fi
fi
- echo $MAX > $1
+ printf '%s\n' "$MAX" > "$1"
}
function restorefans()
{
- local status=$1 fcvcount pwmo
+ local status="$1" fcvcount pwmo
echo 'Aborting, restoring fans...'
let fcvcount=0
while (( $fcvcount < ${#AFCPWM[@]} )) # go through all pwm outputs
do
pwmo=${AFCPWM[$fcvcount]}
- pwmdisable $pwmo
+ pwmdisable "$pwmo"
let fcvcount=$fcvcount+1
done
echo 'Verify fans have returned to full speed'
@@ -418,29 +418,29 @@ function UpdateFanSpeeds
minpwm=${AFCMINPWM[$fcvcount]}
maxpwm=${AFCMAXPWM[$fcvcount]}
- read tval < ${tsens}
+ read tval < "${tsens}"
if [ $? -ne 0 ]
then
echo "Error reading temperature from $DIR/$tsens"
restorefans 1
fi
- read pwmpval < ${pwmo}
+ read pwmpval < "${pwmo}"
if [ $? -ne 0 ]
then
echo "Error reading PWM value from $DIR/$pwmo"
restorefans 1
fi
+ min_fanval=100000
# If fanspeed-sensor output shall be used, do it
- if [[ -n ${fan} ]]
+ if [[ -n "${fan}" ]]
then
- min_fanval=100000
fanval=
# A given PWM output can control several fans
- for one_fan in $(echo $fan | sed -e 's/+/ /')
+ for one_fan in $(printf '%s' "$fan" | sed -e 's/+/ /')
do
- read one_fanval < ${one_fan}
+ read one_fanval < "${one_fan}"
if [ $? -ne 0 ]
then
echo "Error reading Fan value from $DIR/$one_fan" >&2
@@ -448,14 +448,14 @@ function UpdateFanSpeeds
fi
# Remember the minimum, it only matters if it is 0
- if [ $one_fanval -lt $min_fanval ]
+ if [ "$one_fanval" -lt "$min_fanval" ]
then
- min_fanval=$one_fanval
+ min_fanval="$one_fanval"
fi
if [ -z "$fanval" ]
then
- fanval=$one_fanval
+ fanval="$one_fanval"
else
fanval="$fanval/$one_fanval"
fi
@@ -482,22 +482,22 @@ function UpdateFanSpeeds
echo "min_fanval=$min_fanval"
fi
- if (( $tval <= $mint ))
- then pwmval=$minpwm # below min temp, use defined min pwm
- elif (( $tval >= $maxt ))
- then pwmval=$maxpwm # over max temp, use defined max pwm
+ if (( "$tval" <= "$mint" ))
+ then pwmval="$minpwm" # below min temp, use defined min pwm
+ elif (( "$tval" >= "$maxt" ))
+ then pwmval="$maxpwm" # over max temp, use defined max pwm
else
# calculate the new value from temperature and settings
pwmval="(${tval}-${mint})*(${maxpwm}-${minso})/(${maxt}-${mint})+${minso}"
- if [ $pwmpval -eq 0 -o $min_fanval -eq 0 ]
+ if [ "$pwmpval" -eq 0 -o "$min_fanval" -eq 0 ]
then # if fan was stopped start it using a safe value
- echo $minsa > $pwmo
+ printf '%s\n' "$minsa" > "$pwmo"
# Sleep while still handling signals
sleep 1 &
wait $!
fi
fi
- echo $pwmval > $pwmo # write new value to pwm output
+ echo "$pwmval" > "$pwmo" # write new value to pwm output
if [ $? -ne 0 ]
then
echo "Error writing PWM value to $DIR/$pwmo" >&2
@@ -516,7 +516,7 @@ let fcvcount=0
while (( $fcvcount < ${#AFCPWM[@]} )) # go through all pwm outputs
do
pwmo=${AFCPWM[$fcvcount]}
- pwmenable $pwmo
+ pwmenable "$pwmo"
if [ $? -ne 0 ]
then
echo "Error enabling PWM on $DIR/$pwmo" >&2
@@ -532,6 +532,6 @@ while true
do
UpdateFanSpeeds
# Sleep while still handling signals
- sleep $INTERVAL &
+ sleep "$INTERVAL" &
wait $!
done
signature.asc
Description: PGP signature

