From 8a44e37a688012af421034ee2252b377618e51c4 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 10 Feb 2017 09:37:13 +0100 Subject: [PATCH] Bug 16749: Adjust xmlstarlet calls in koha-functions Content-Type: text/plain; charset=utf-8 In various scripts we use xmlstarlet to extract values from koha-conf. If we call xmlstarlet on non-existing entries in koha-conf, this may however result in silently failing scripts. A function run_safe_xmlstarlet is added for situations where the entry might not be there. No need to use it everywhere rightaway. This patch only adjusts koha-functions and modifies the xmlstarlet calls for dev_install and zebra_loglevels. Test plan: [1] Apply the patch for koha-plack too. [2] Copy koha-functions.sh and koha-plack from clone to default locations. [3] Start and stop koha-plack while you have dev_install in koha-conf. Verify with ps aux|grep plack. [4] Rename dev_install to nodev_install and start/stop koha-plack. Verify with ps aux|grep plack. Signed-off-by: Marcel de Rooy Tested on a Debian VM and with a Windows kohadevbox :) --- debian/scripts/koha-functions.sh | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/debian/scripts/koha-functions.sh b/debian/scripts/koha-functions.sh index 167998e..1db4405 100755 --- a/debian/scripts/koha-functions.sh +++ b/debian/scripts/koha-functions.sh @@ -222,16 +222,14 @@ adjust_paths_dev_install() # corresponding tag in koha-conf.xml local instancename=$1 - local dev_install - - if [ -e /etc/koha/sites/$instancename/koha-conf.xml ]; then - dev_install=$(xmlstarlet sel -t -v 'yazgfs/config/dev_install' /etc/koha/sites/$instancename/koha-conf.xml) - fi + local dev_install=$(run_safe_xmlstarlet $instancename dev_install) if [ "$dev_install" != "" ]; then DEV_INSTALL=1 KOHA_HOME=$dev_install PERL5LIB=$dev_install + else + DEV_INSTALL="" fi } @@ -244,13 +242,12 @@ get_instances() get_loglevels() { local instancename=$1 - local retval=$(xmlstarlet sel -t -v 'yazgfs/config/zebra_loglevels' /etc/koha/sites/$instancename/koha-conf.xml) + local retval=$(run_safe_xmlstarlet $instancename zebra_loglevels) if [ "$retval" != "" ]; then echo "$retval" else echo "none,fatal,warn" fi - } get_tmpdir() @@ -272,3 +269,18 @@ get_tmpdir() fi echo $(dirname $retval) } + +run_safe_xmlstarlet() +{ + # When running xmlstarlet and the expr is not found, the script may fail + # silently under certain conditions. For instance, script koha-plack + # failed under kohadevbox/jessie. Until we resolve that, this function + # does a grep first (assuming a unique tag). + local instancename=$1 + local myexpr=$2 + if [ -e /etc/koha/sites/$instancename/koha-conf.xml ] && grep -q "<$myexpr>" /etc/koha/sites/$instancename/koha-conf.xml; then + echo $(xmlstarlet sel -t -v "yazgfs/config/$myexpr" /etc/koha/sites/$instancename/koha-conf.xml) + return 0 + fi + return 1 +} -- 2.1.4