Matthias Bolte wrote:
2009/11/6 Eduardo Otubo <otubo@xxxxxxxxxxxxxxxxxx>:
+ char *pubkey = NULL;
+ char *pvtkey = NULL;
+
+ if (virAsprintf(&pubkey, "%s/.ssh/id_rsa.pub", getenv("HOME")) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
+
+ if (virAsprintf(&pvtkey, "%s/.ssh/id_rsa", getenv("HOME")) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
You should use virGetUserDirectory() instead of getenv("HOME"):
char *userdir = virGetUserDirectory(NULL, geteuid());
if (userdir == NULL)
goto err;
Matthias
Here it is.
Thanks again.
[]'s
--
Eduardo Otubo
Software Engineer
Linux Technology Center
IBM Systems & Technology Group
Mobile: +55 19 8135 0885
eotubo@xxxxxxxxxxxxxxxxxx
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index a92046a..16a82e7 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -230,6 +230,19 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
struct addrinfo hints;
int ret;
+ char *pubkey = NULL;
+ char *pvtkey = NULL;
+
+ if (virAsprintf(&pubkey, "%s/.ssh/id_rsa.pub", getenv("HOME")) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
+
+ if (virAsprintf(&pvtkey, "%s/.ssh/id_rsa", getenv("HOME")) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
+
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV;
hints.ai_socktype = SOCK_STREAM;
@@ -282,10 +295,8 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
/* Trying authentication by pubkey */
while ((rc =
libssh2_userauth_publickey_fromfile(session, username,
- "/home/user/"
- ".ssh/id_rsa.pub",
- "/home/user/"
- ".ssh/id_rsa",
+ pubkey,
+ pvtkey,
password)) ==
LIBSSH2_ERROR_EAGAIN) ;
if (rc) {
@@ -341,15 +352,21 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
goto disconnect;
} else
goto exit;
+ } else {
+ goto exit;
}
disconnect:
libssh2_session_disconnect(session, "Disconnecting...");
libssh2_session_free(session);
err:
+ VIR_FREE(pubkey);
+ VIR_FREE(pvtkey);
VIR_FREE(password);
return NULL;
exit:
+ VIR_FREE(pubkey);
+ VIR_FREE(pvtkey);
VIR_FREE(password);
return session;
}
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index a92046a..f96d2d6 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -225,10 +225,25 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
const char *password = NULL;
int sock;
int rc;
-
struct addrinfo *ai = NULL, *cur;
struct addrinfo hints;
int ret;
+ char *pubkey = NULL;
+ char *pvtkey = NULL;
+ char *userhome = virGetUserDirectory(NULL, geteuid());
+
+ if (userhome == NULL)
+ goto err;
+
+ if (virAsprintf(&pubkey, "%s/.ssh/id_rsa.pub", userhome) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
+
+ if (virAsprintf(&pvtkey, "%s/.ssh/id_rsa", userhome) < 0) {
+ virReportOOMError(conn);
+ goto err;
+ }
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV;
@@ -282,10 +297,8 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
/* Trying authentication by pubkey */
while ((rc =
libssh2_userauth_publickey_fromfile(session, username,
- "/home/user/"
- ".ssh/id_rsa.pub",
- "/home/user/"
- ".ssh/id_rsa",
+ pubkey,
+ pvtkey,
password)) ==
LIBSSH2_ERROR_EAGAIN) ;
if (rc) {
@@ -341,15 +354,22 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth,
goto disconnect;
} else
goto exit;
+ } else {
+ goto exit;
}
disconnect:
libssh2_session_disconnect(session, "Disconnecting...");
libssh2_session_free(session);
err:
+ VIR_FREE(userhome);
+ VIR_FREE(pubkey);
+ VIR_FREE(pvtkey);
VIR_FREE(password);
return NULL;
exit:
+ VIR_FREE(userhome);
+ VIR_FREE(pvtkey);
VIR_FREE(password);
return session;
}
--
Libvir-list mailing list
Libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list