From: Erik Skultety Date: Thu, 28 Jul 2016 10:54:16 +0000 (+0200) Subject: tools: Make use of the correct environment variables X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d02ef33451a0d84692f32fe0877d621bfe243f50;p=libvirt.git tools: Make use of the correct environment variables Since commit 834c5720 which extracted the generic functionality out of virsh and made it available for other clients like virt-admin to make use of it, it also introduced a bug when it renamed the original VIRSH_ environment variables to VSH_ variables. Virt-admin of course suffers from the same bug, so this patch modifies the generic module vsh.c to construct the correct name for environment variables of each client from information it has. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1357363 Signed-off-by: Erik Skultety --- diff --git a/tools/virsh.c b/tools/virsh.c index 5dc482d90e..f74698fa5f 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -935,6 +935,7 @@ main(int argc, char **argv) memset(ctl, 0, sizeof(vshControl)); memset(&virshCtl, 0, sizeof(virshControl)); ctl->name = "virsh"; /* hardcoded name of the binary */ + ctl->env_prefix = "VIRSH"; ctl->log_fd = -1; /* Initialize log file descriptor */ ctl->debug = VSH_DEBUG_DEFAULT; ctl->hooks = &hooks; diff --git a/tools/virt-admin.c b/tools/virt-admin.c index a59c4c7226..2ae05dab72 100644 --- a/tools/virt-admin.c +++ b/tools/virt-admin.c @@ -1340,6 +1340,7 @@ main(int argc, char **argv) memset(ctl, 0, sizeof(vshControl)); memset(&virtAdminCtl, 0, sizeof(vshAdmControl)); ctl->name = "virt-admin"; /* hardcoded name of the binary */ + ctl->env_prefix = "VIRT_ADMIN"; ctl->log_fd = -1; /* Initialize log file descriptor */ ctl->debug = VSH_DEBUG_DEFAULT; ctl->hooks = &hooks; diff --git a/tools/vsh.c b/tools/vsh.c index 400b94eb04..6823ab509e 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -2830,16 +2830,10 @@ static int vshReadlineInit(vshControl *ctl) { char *userdir = NULL; - char *name_capitalized = NULL; int max_history = 500; int ret = -1; char *histsize_env = NULL; const char *histsize_str = NULL; - const char *strings[] = { - name_capitalized, - "HISTSIZE", - NULL - }; /* Allow conditional parsing of the ~/.inputrc file. * Work around ancient readline 4.1 (hello Mac OS X), @@ -2852,8 +2846,7 @@ vshReadlineInit(vshControl *ctl) rl_basic_word_break_characters = " \t\n\\`@$><=;|&{("; - if (virStringToUpper(&name_capitalized, ctl->name) < 0 || - !(histsize_env = virStringJoin(strings, "_"))) + if (virAsprintf(&histsize_env, "%s_HISTSIZE", ctl->env_prefix) < 0) goto cleanup; /* Limit the total size of the history buffer */ @@ -2895,7 +2888,6 @@ vshReadlineInit(vshControl *ctl) cleanup: VIR_FREE(userdir); - VIR_FREE(name_capitalized); VIR_FREE(histsize_env); return ret; } @@ -2967,10 +2959,14 @@ static int vshInitDebug(vshControl *ctl) { const char *debugEnv; + char *env = NULL; if (ctl->debug == VSH_DEBUG_DEFAULT) { + if (virAsprintf(&env, "%s_DEBUG", ctl->env_prefix) < 0) + return -1; + /* log level not set from commandline, check env variable */ - debugEnv = virGetEnvAllowSUID("VSH_DEBUG"); + debugEnv = virGetEnvAllowSUID(env); if (debugEnv) { int debug; if (virStrToLong_i(debugEnv, NULL, 10, &debug) < 0 || @@ -2981,15 +2977,20 @@ vshInitDebug(vshControl *ctl) ctl->debug = debug; } } + VIR_FREE(env); } if (ctl->logfile == NULL) { + if (virAsprintf(&env, "%s_LOG_FILE", ctl->env_prefix) < 0) + return -1; + /* log file not set from cmdline */ - debugEnv = virGetEnvBlockSUID("VSH_LOG_FILE"); + debugEnv = virGetEnvBlockSUID(env); if (debugEnv && *debugEnv) { ctl->logfile = vshStrdup(ctl, debugEnv); vshOpenLogFile(ctl); } + VIR_FREE(env); } return 0; diff --git a/tools/vsh.h b/tools/vsh.h index 8d6739724c..7f430552e2 100644 --- a/tools/vsh.h +++ b/tools/vsh.h @@ -197,6 +197,7 @@ struct _vshControl { const char *name; /* hardcoded name of the binary that cannot * be changed without recompilation compared * to program name */ + const char *env_prefix; /* hardcoded environment variable prefix */ char *connname; /* connection name */ char *progname; /* program name */ vshCmd *cmd; /* the current command */