From a7eb07a3e22eb0362b28cec4bd289201a9adf699 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Tue, 14 Oct 2014 04:35:59 -0700 Subject: [PATCH] Revert "Allow multi-line config items in meta-section of local.conf" This reverts commit 6ff21acf4c4d4ef08bbef419ba582cade4da8da7. This commit has broken config options with colons in them. The following is a sample configuration that no longer works: [[post-config|/etc/neutron/plugins/ml2/ml2_conf.ini]] [restproxy] server_ssl=False servers=10.211.1.9:80 server_ssl=False With the above config and the code present that this reverts, the 'servers' option will come out blank. Change-Id: I328852d2d941605051a1bf5eaf0f7674191f8c48 --- functions-common | 27 -------------------- lib/config | 48 +++------------------------------- tests/test_config.sh | 61 +++----------------------------------------- 3 files changed, 7 insertions(+), 129 deletions(-) diff --git a/functions-common b/functions-common index 1f90da76b0..5b29fd3bf4 100644 --- a/functions-common +++ b/functions-common @@ -119,33 +119,6 @@ function ini_has_option { [ -n "$line" ] } -# Add another config line for a multi-line option. -# It's normally called after iniset of the same option and assumes -# that the section already exists. -# -# Note that iniset_multiline requires all the 'lines' to be supplied -# in the argument list. Doing that will cause incorrect configuration -# if spaces are used in the config values. -# -# iniadd_literal config-file section option value -function iniadd_literal { - local xtrace=$(set +o | grep xtrace) - set +o xtrace - local file=$1 - local section=$2 - local option=$3 - local value=$4 - - [[ -z $section || -z $option ]] && return - - # Add it - sed -i -e "/^\[$section\]/ a\\ -$option = $value -" "$file" - - $xtrace -} - # Set an option in an INI file # iniset config-file section option value function iniset { diff --git a/lib/config b/lib/config index 6e8219cbeb..b44e79aa3d 100644 --- a/lib/config +++ b/lib/config @@ -86,11 +86,7 @@ function merge_config_file { # having to do nasty quoting games get_meta_section $file $matchgroup $configfile | \ $CONFIG_AWK_CMD -v configfile=$configfile ' - BEGIN { - section = "" - last_section = "" - section_count = 0 - } + BEGIN { section = "" } /^\[.+\]/ { gsub("[][]", "", $1); section=$1 @@ -110,48 +106,10 @@ function merge_config_file { # need to strip leading & trailing whitespace from value sub(/^[ \t]*/, "", value) sub(/[ \t]*$/, "", value) - - # cfg_attr_count: number of config lines per [section, attr] - # cfg_attr: two dimensional array to keep all the config lines per [section, attr] - # cfg_section: keep the section names in the same order as they appear in local.conf - # cfg_sec_attr_name: keep the attr names in the same order as they appear in local.conf - if (! (section, attr) in cfg_attr_count) { - if (section != last_section) { - cfg_section[section_count++] = section - last_section = section - } - attr_count = cfg_sec_attr_count[section_count - 1]++ - cfg_sec_attr_name[section_count - 1][attr_count] = attr - - cfg_attr[section, attr][0] = value - cfg_attr_count[section, attr] = 1 - } else { - lno = cfg_attr_count[section, attr]++ - cfg_attr[section, attr][lno] = value - } - } - END { - # Process each section in order - for (sno = 0; sno < section_count; sno++) { - section = cfg_section[sno] - # The ini routines simply append a config item immediately - # after the section header. To keep the same order as defined - # in local.conf, invoke the ini routines in the reverse order - for (attr_no = cfg_sec_attr_count[sno] - 1; attr_no >=0; attr_no--) { - attr = cfg_sec_attr_name[sno][attr_no] - if (cfg_attr_count[section, attr] == 1) - print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr][0] "\x27" - else { - # For multiline, invoke the ini routines in the reverse order - count = cfg_attr_count[section, attr] - print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr][count - 1] "\x27" - for (l = count -2; l >= 0; l--) - print "iniadd_literal " configfile " " section " " attr " \x27" cfg_attr[section, attr][l] "\x27" - } - } - } + print "iniset " configfile " " section " " attr " \x27" value "\x27" } ' | while read a; do eval "$a"; done + } diff --git a/tests/test_config.sh b/tests/test_config.sh index 696e57f909..6fff29c396 100755 --- a/tests/test_config.sh +++ b/tests/test_config.sh @@ -104,27 +104,6 @@ drivers = driver=python.import.path.Driver [DEFAULT] # next line has trailing space attr = strip_trailing_space - -[[test-multi-sections|test-multi-sections.conf]] -[sec-1] -cfg_item1 = abcd -cfg_item2 = efgh - -[sec-2] -cfg_item1 = abcd -cfg_item3 = /1/2/3/4:5 -cfg_item4 = end - -[sec-3] -cfg_item5 = 5555 -cfg_item6 = 6666 -cfg_item5 = 5555another - -[[test-multiline|test-multiline.conf]] -[multi] -cfg_item1 = "ab":"cd", "ef": "gh" -cfg_item1 = abcd -cfg_item2 = efgh EOF echo -n "get_meta_section_files: test0 doesn't exist: " @@ -206,39 +185,8 @@ VAL=$(cat test2a.conf) # iniset adds a blank line if it creates the file... EXPECT_VAL=" [ddd] -type = new -additional = true" -check_result "$VAL" "$EXPECT_VAL" - -echo -n "merge_config_file test-multi-sections: " -rm -f test-multi-sections.conf -merge_config_file test.conf test-multi-sections test-multi-sections.conf -VAL=$(cat test-multi-sections.conf) -EXPECT_VAL=' -[sec-1] -cfg_item1 = abcd -cfg_item2 = efgh - -[sec-2] -cfg_item1 = abcd -cfg_item3 = /1/2/3/4:5 -cfg_item4 = end - -[sec-3] -cfg_item5 = 5555 -cfg_item5 = 5555another -cfg_item6 = 6666' -check_result "$VAL" "$EXPECT_VAL" - -echo -n "merge_config_file test-multiline: " -rm -f test-multiline.conf -merge_config_file test.conf test-multiline test-multiline.conf -VAL=$(cat test-multiline.conf) -EXPECT_VAL=' -[multi] -cfg_item1 = "ab":"cd", "ef": "gh" -cfg_item1 = abcd -cfg_item2 = efgh' +additional = true +type = new" check_result "$VAL" "$EXPECT_VAL" echo -n "merge_config_group test2: " @@ -248,8 +196,8 @@ VAL=$(cat test2a.conf) # iniset adds a blank line if it creates the file... EXPECT_VAL=" [ddd] -type = new -additional = true" +additional = true +type = new" check_result "$VAL" "$EXPECT_VAL" echo -n "merge_config_group test2 no conf file: " @@ -320,5 +268,4 @@ attr = strip_trailing_space" check_result "$VAL" "$EXPECT_VAL" rm -f test.conf test1c.conf test2a.conf test-quote.conf test-space.conf test-equals.conf test-strip.conf -rm -f test-multiline.conf test-multi-sections.conf rm -rf test-etc