[PATCH 2/3] remote: fix logic for known_hosts and keyfile checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If any of them is specified for the libssh and libssh2 drivers, there is
no need to depend on chec ks based on other paths: in particular, a
specified path for known_hosts was ignored if the local config directory
could not be determined, and the path for keyfile was ignored if the
home could not be determined.

Instead, lazily determine and use these two paths only in case they are
needed.
---
 src/rpc/virnetclient.c | 52 +++++++++++++++++++++++++++-----------------------
 1 file changed, 28 insertions(+), 24 deletions(-)

diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 34475d9..9c781e3 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -450,32 +450,34 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host,
     char *nc = NULL;
     char *command = NULL;
 
-    char *homedir = virGetUserDirectory();
-    char *confdir = virGetUserConfigDirectory();
+    char *homedir = NULL;
+    char *confdir = NULL;
     char *knownhosts = NULL;
     char *privkey = NULL;
 
     /* Use default paths for known hosts an public keys if not provided */
-    if (confdir) {
-        if (!knownHostsPath) {
+    if (knownHostsPath) {
+        if (VIR_STRDUP(knownhosts, knownHostsPath) < 0)
+            goto cleanup;
+    } else {
+        confdir = virGetUserConfigDirectory();
+        if (confdir) {
             if (virFileExists(confdir)) {
                 virBufferAsprintf(&buf, "%s/known_hosts", confdir);
                 if (!(knownhosts = virBufferContentAndReset(&buf)))
                     goto no_memory;
             }
-        } else {
-            if (VIR_STRDUP(knownhosts, knownHostsPath) < 0)
-                goto cleanup;
         }
     }
 
-    if (homedir) {
-        if (!privkeyPath) {
+    if (privkeyPath) {
+        if (VIR_STRDUP(privkey, privkeyPath) < 0)
+            goto cleanup;
+    } else {
+        homedir = virGetUserDirectory();
+        if (homedir) {
             if (virNetClientFindDefaultSshKey(homedir, &privkey) < 0)
                 goto no_memory;
-        } else {
-            if (VIR_STRDUP(privkey, privkeyPath) < 0)
-                goto cleanup;
         }
     }
 
@@ -559,31 +561,33 @@ virNetClientPtr virNetClientNewLibssh(const char *host,
     char *nc = NULL;
     char *command = NULL;
 
-    char *homedir = virGetUserDirectory();
-    char *confdir = virGetUserConfigDirectory();
+    char *homedir = NULL;
+    char *confdir = NULL;
     char *knownhosts = NULL;
     char *privkey = NULL;
 
     /* Use default paths for known hosts an public keys if not provided */
-    if (confdir) {
-        if (!knownHostsPath) {
+    if (knownHostsPath) {
+        if (VIR_STRDUP(knownhosts, knownHostsPath) < 0)
+            goto cleanup;
+    } else {
+        confdir = virGetUserConfigDirectory();
+        if (confdir) {
             if (virFileExists(confdir)) {
                 if (virAsprintf(&knownhosts, "%s/known_hosts", confdir) < 0)
                     goto cleanup;
             }
-        } else {
-            if (VIR_STRDUP(knownhosts, knownHostsPath) < 0)
-                goto cleanup;
         }
     }
 
-    if (homedir) {
-        if (!privkeyPath) {
+    if (privkeyPath) {
+        if (VIR_STRDUP(privkey, privkeyPath) < 0)
+            goto cleanup;
+    } else {
+        homedir = virGetUserDirectory();
+        if (homedir) {
             if (virNetClientFindDefaultSshKey(homedir, &privkey) < 0)
                 goto no_memory;
-        } else {
-            if (VIR_STRDUP(privkey, privkeyPath) < 0)
-                goto cleanup;
         }
     }
 
-- 
2.7.4

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux