14205c kdump-lib.sh: add a config value retrive helper

Authored and Committed by liutgnu 3 years ago
    kdump-lib.sh: add a config value retrive helper
    
    upstream: fedora
    resolves: bz2003832
    conflict: none
    
    commit 09ccf88405793220af640c5317cbadb71cf03d36
    Author: Kairui Song <kasong@redhat.com>
    Date:   Mon Aug 16 23:25:14 2021 +0800
    
        kdump-lib.sh: add a config value retrive helper
        Add a helper kdump_get_conf_val to replace get_option_value.
    
        It can help cover more corner cases in the code, like when there are
        multiple spaces in config file, config value separated by a tab,
        heading spaces, or trailing comments.
    
        And this uses "sed group command" and "sed hold buffer", make it much
        faster than previous `grep <config> | tail -1`.
    
        This helper is supposed to provide a universal way for kexec-tools
        scripts to read in config value. Currently, different scripts are
        reading the config in many different fragile ways.
    
        For example, following codes are found in kexec-tools script code base:
          1. grep ^force_rebuild $KDUMP_CONFIG_FILE
    	 echo $_force_rebuild | cut -d' '  -f2
    
          2. grep ^kdump_post $KDUMP_CONFIG_FILE | cut -d\  -f2
    
          3. awk '/^sshkey/ {print $2}' $conf_file
    
          4. grep ^path $KDUMP_CONFIG_FILE | cut -d' '  -f2-
    
        1, 2, and 4 will fail if the space is replaced by, e.g. a tab
    
        1 and 2 might fail if there are multiple spaces between config name
        and config value:
        "kdump_post  /var/crash/scripts/kdump-post.sh"
        A space will be read instead of config value.
    
        1, 2, 3 will fail if there are space in file path, like:
        "kdump_post /var/crash/scripts dir/kdump-post.sh"
    
        4 will fail if there are trailing comments:
        "path /var/crash # some comment here"
    
        And all will fail if there are heading space,
        " path /var/crash"
    
        And all will most likely cause problems if the config file contains
        the same option more than once.
    
        And all of them are slower than the new sed call. Old get_option_value
        is also very slow and doesn't handle heading space.
    
        Although we never claim to support heading space or tailing comments
        before, it's harmless to be more robust on config reading, and many
        conf files in /etc support heading spaces. And have a faster and
        safer config reading helper makes it easier to clean up the code.
    
        Signed-off-by: Kairui Song <kasong@redhat.com>
        Acked-by: Philipp Rudo <prudo@redhat.com>
    
    Signed-off-by: Tao Liu <ltao@redhat.com>
    
        
file modified
+2 -2
file modified
+9 -11
file modified
+1 -1