diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 7a0c1f6..012d6d5 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -658,7 +658,9 @@ doRemoteOpen(virConnectPtr conn, sshauth, netcat, sockname, - auth); + auth, + conn); + if (!priv->client) goto failed; diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index fed2c87..75c22d7 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -37,6 +37,7 @@ #include "virutil.h" #include "virerror.h" #include "virstring.h" +#include "virauth.h" #define VIR_FROM_THIS VIR_FROM_RPC @@ -389,7 +390,9 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, const char *authMethods, const char *netcatPath, const char *socketPath, - virConnectAuthPtr authPtr) + virConnectAuthPtr authPtr, + virConnectPtr conn + ) { virNetSocketPtr sock = NULL; virNetClientPtr ret = NULL; @@ -402,6 +405,7 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, char *confdir = virGetUserConfigDirectory(); char *knownhosts = NULL; char *privkey = NULL; + char *password = NULL; /* Use default paths for known hosts an public keys if not provided */ if (confdir) { @@ -471,11 +475,21 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, if (!(command = virBufferContentAndReset(&buf))) goto no_memory; - if (virNetSocketNewConnectLibSSH2(host, port, username, NULL, privkey, + password = virAuthGetPassword(conn, authPtr, "libssh2", username, host); + + if ((strcmp(authMethods,"password") == 0) && password) { + + if (virNetSocketNewConnectLibSSH2(host, port, username, password, privkey, knownhosts, knownHostsVerify, authMethods, command, authPtr, &sock) != 0) - goto cleanup; + goto cleanup; + } else { + if (virNetSocketNewConnectLibSSH2(host, port, username, NULL, privkey, + knownhosts, knownHostsVerify, authMethods, + command, authPtr, &sock) != 0) + goto cleanup; + } if (!(ret = virNetClientNew(sock, NULL))) goto cleanup; sock = NULL; diff --git a/src/rpc/virnetclient.h b/src/rpc/virnetclient.h index 4204a93..ccaf8ab 100644 --- a/src/rpc/virnetclient.h +++ b/src/rpc/virnetclient.h @@ -61,7 +61,9 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host, const char *authMethods, const char *netcatPath, const char *socketPath, - virConnectAuthPtr authPtr); + virConnectAuthPtr authPtr, + virConnectPtr conn + ); virNetClientPtr virNetClientNewExternal(const char **cmdargv);