]> xenbits.xensource.com Git - libvirt.git/commitdiff
tools: Make use of the correct environment variables
authorErik Skultety <eskultet@redhat.com>
Thu, 28 Jul 2016 10:54:16 +0000 (12:54 +0200)
committerErik Skultety <eskultet@redhat.com>
Thu, 28 Jul 2016 11:54:06 +0000 (13:54 +0200)
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 <eskultet@redhat.com>
tools/virsh.c
tools/virt-admin.c
tools/vsh.c
tools/vsh.h

index 5dc482d90e62e645c95ac2852899903707d24e5b..f74698fa5f9a508079f4a5ebf09e506dc12f8cad 100644 (file)
@@ -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;
index a59c4c7226771993d6003a871766bb5b0e0e2138..2ae05dab722e5ec9661fc173e98cb7952584b601 100644 (file)
@@ -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;
index 400b94eb041c63044c277781c7966020fbbc26cb..6823ab509ee8033df2e9199af192116fcc368dea 100644 (file)
@@ -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;
index 8d6739724cb7e616c6d7bc621ef7fbb6985e79c9..7f430552e27f7617121ab0494f6b02f12973a76a 100644 (file)
@@ -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 */