Fix an issue in iniset function

Given the file to be configured, if user "stack" even doesn't have
read access, the result of configuration is not expected. iniset with
"-sudo" option will always create the section and the option which we
want to configure for each calling, no matter whether this section and
this option exist in the file or not. The root cause is the calling of
grep and ini_has_option in iniset don't use the "sudo" option.

Change-Id: I9d21322046b7be411c4c7c28fefc24894fa2e131
Signed-off-by: Yi Wang <yi.c.wang@intel.com>
This commit is contained in:
Yi Wang 2018-12-14 10:35:26 +08:00
parent a88a22969c
commit 698796f1ae
2 changed files with 14 additions and 7 deletions

View File

@ -88,17 +88,22 @@ function iniget_multiline {
} }
# Determinate is the given option present in the INI file # Determinate is the given option present in the INI file
# ini_has_option config-file section option # ini_has_option [-sudo] config-file section option
function ini_has_option { function ini_has_option {
local xtrace local xtrace
xtrace=$(set +o | grep xtrace) xtrace=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
local sudo=""
if [ $1 == "-sudo" ]; then
sudo="sudo "
shift
fi
local file=$1 local file=$1
local section=$2 local section=$2
local option=$3 local option=$3
local line local line
line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file") line=$($sudo sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
$xtrace $xtrace
[ -n "$line" ] [ -n "$line" ]
} }
@ -173,8 +178,10 @@ function iniset {
xtrace=$(set +o | grep xtrace) xtrace=$(set +o | grep xtrace)
set +o xtrace set +o xtrace
local sudo="" local sudo=""
local sudo_option=""
if [ $1 == "-sudo" ]; then if [ $1 == "-sudo" ]; then
sudo="sudo " sudo="sudo "
sudo_option="-sudo "
shift shift
fi fi
local file=$1 local file=$1
@ -187,11 +194,11 @@ function iniset {
return return
fi fi
if ! grep -q "^\[$section\]" "$file" 2>/dev/null; then if ! $sudo grep -q "^\[$section\]" "$file" 2>/dev/null; then
# Add section at the end # Add section at the end
echo -e "\n[$section]" | $sudo tee --append "$file" > /dev/null echo -e "\n[$section]" | $sudo tee --append "$file" > /dev/null
fi fi
if ! ini_has_option "$file" "$section" "$option"; then if ! ini_has_option $sudo_option "$file" "$section" "$option"; then
# Add it # Add it
$sudo sed -i -e "/^\[$section\]/ a\\ $sudo sed -i -e "/^\[$section\]/ a\\
$option = $value $option = $value
@ -228,7 +235,7 @@ function iniset_multiline {
# the reverse order. Do a reverse here to keep the original order. # the reverse order. Do a reverse here to keep the original order.
values="$v ${values}" values="$v ${values}"
done done
if ! grep -q "^\[$section\]" "$file"; then if ! $sudo grep -q "^\[$section\]" "$file"; then
# Add section at the end # Add section at the end
echo -e "\n[$section]" | $sudo tee --append "$file" > /dev/null echo -e "\n[$section]" | $sudo tee --append "$file" > /dev/null
else else

View File

@ -125,14 +125,14 @@ VAL=$(iniget ${TEST_INI} bbb handlers)
assert_equal "$VAL" "33,44" "inset at EOF" assert_equal "$VAL" "33,44" "inset at EOF"
# test empty option # test empty option
if ini_has_option ${TEST_INI} ddd empty; then if ini_has_option ${SUDO_ARG} ${TEST_INI} ddd empty; then
passed "ini_has_option: ddd.empty present" passed "ini_has_option: ddd.empty present"
else else
failed "ini_has_option failed: ddd.empty not found" failed "ini_has_option failed: ddd.empty not found"
fi fi
# test non-empty option # test non-empty option
if ini_has_option ${TEST_INI} bbb handlers; then if ini_has_option ${SUDO_ARG} ${TEST_INI} bbb handlers; then
passed "ini_has_option: bbb.handlers present" passed "ini_has_option: bbb.handlers present"
else else
failed "ini_has_option failed: bbb.handlers not found" failed "ini_has_option failed: bbb.handlers not found"