[libvirt] [PATCH] phyp: Use virRequestUsername and virRequestPassword

--- src/phyp/phyp_driver.c | 73 ++++++++++++++++++++--------------------------- src/phyp/phyp_driver.h | 1 - 2 files changed, 31 insertions(+), 43 deletions(-) diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 32c0a7a..9598162 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -102,12 +102,6 @@ phypOpen(virConnectPtr conn, return VIR_DRV_OPEN_ERROR; } - if (conn->uri->user == NULL) { - PHYP_ERROR(conn, VIR_ERR_INTERNAL_ERROR, - "%s", _("Missing username in phyp:// URI")); - return VIR_DRV_OPEN_ERROR; - } - if (VIR_ALLOC(phyp_driver) < 0) { virReportOOMError(); goto failure; @@ -160,9 +154,8 @@ phypOpen(virConnectPtr conn, "%s", _("Error while opening SSH session.")); goto failure; } - //conn->uri->path = string; + connection_data->session = session; - connection_data->auth = auth; uuid_table->nlpars = 0; uuid_table->lpars = NULL; @@ -245,8 +238,8 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, { LIBSSH2_SESSION *session; const char *hostname = conn->uri->server; - const char *username = conn->uri->user; - const char *password = NULL; + char *username = NULL; + char *password = NULL; int sock; int rc; struct addrinfo *ai = NULL, *cur; @@ -270,6 +263,28 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, goto err; } + if (conn->uri->user != NULL) { + username = strdup(conn->uri->user); + + if (username == NULL) { + virReportOOMError(); + goto err; + } + } else { + if (auth == NULL || auth->cb == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, + "%s", _("No authentication callback provided.")); + goto err; + } + + username = virRequestUsername(auth, NULL, conn->uri->server); + + if (username == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "Username request failed"); + goto err; + } + } + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV; hints.ai_socktype = SOCK_STREAM; @@ -336,44 +351,16 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, if (rc == LIBSSH2_ERROR_SOCKET_NONE || rc == LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED || rc == LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED) { - int i; - int hasPassphrase = 0; - - virConnectCredential creds[] = { - {VIR_CRED_PASSPHRASE, "password", "Password", NULL, NULL, 0}, - }; - - if (!auth || !auth->cb) { + if (auth == NULL || auth->cb == NULL) { PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "%s", _("No authentication callback provided.")); goto disconnect; } - for (i = 0; i < auth->ncredtype; i++) { - if (auth->credtype[i] == VIR_CRED_PASSPHRASE) - hasPassphrase = 1; - } + password = virRequestPassword(auth, username, conn->uri->server); - if (!hasPassphrase) { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Required credentials are not supported.")); - goto disconnect; - } - - int res = - (auth->cb) (creds, ARRAY_CARDINALITY(creds), auth->cbdata); - - if (res < 0) { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Unable to fetch credentials.")); - goto disconnect; - } - - if (creds[0].result) { - password = creds[0].result; - } else { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Unable to get password certificates")); + if (password == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "Password request failed"); goto disconnect; } @@ -404,6 +391,7 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, VIR_FREE(userhome); VIR_FREE(pubkey); VIR_FREE(pvtkey); + VIR_FREE(username); VIR_FREE(password); return NULL; @@ -411,6 +399,7 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, VIR_FREE(userhome); VIR_FREE(pubkey); VIR_FREE(pvtkey); + VIR_FREE(username); VIR_FREE(password); return session; } diff --git a/src/phyp/phyp_driver.h b/src/phyp/phyp_driver.h index d05f184..f680994 100644 --- a/src/phyp/phyp_driver.h +++ b/src/phyp/phyp_driver.h @@ -35,7 +35,6 @@ typedef struct _ConnectionData ConnectionData; typedef ConnectionData *ConnectionDataPtr; struct _ConnectionData { LIBSSH2_SESSION *session; - virConnectAuthPtr auth; int sock; }; -- 1.6.3.3

On Sun, Mar 14, 2010 at 10:18:05PM +0100, Matthias Bolte wrote:
--- src/phyp/phyp_driver.c | 73 ++++++++++++++++++++--------------------------- src/phyp/phyp_driver.h | 1 - 2 files changed, 31 insertions(+), 43 deletions(-)
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 32c0a7a..9598162 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -102,12 +102,6 @@ phypOpen(virConnectPtr conn, return VIR_DRV_OPEN_ERROR; }
- if (conn->uri->user == NULL) { - PHYP_ERROR(conn, VIR_ERR_INTERNAL_ERROR, - "%s", _("Missing username in phyp:// URI")); - return VIR_DRV_OPEN_ERROR; - } - if (VIR_ALLOC(phyp_driver) < 0) { virReportOOMError(); goto failure; @@ -160,9 +154,8 @@ phypOpen(virConnectPtr conn, "%s", _("Error while opening SSH session.")); goto failure; } - //conn->uri->path = string; + connection_data->session = session; - connection_data->auth = auth;
uuid_table->nlpars = 0; uuid_table->lpars = NULL; @@ -245,8 +238,8 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, { LIBSSH2_SESSION *session; const char *hostname = conn->uri->server; - const char *username = conn->uri->user; - const char *password = NULL; + char *username = NULL; + char *password = NULL; int sock; int rc; struct addrinfo *ai = NULL, *cur; @@ -270,6 +263,28 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, goto err; }
+ if (conn->uri->user != NULL) { + username = strdup(conn->uri->user); + + if (username == NULL) { + virReportOOMError(); + goto err; + } + } else { + if (auth == NULL || auth->cb == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, + "%s", _("No authentication callback provided.")); + goto err; + } + + username = virRequestUsername(auth, NULL, conn->uri->server); + + if (username == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "Username request failed"); + goto err; + } + } + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV; hints.ai_socktype = SOCK_STREAM; @@ -336,44 +351,16 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, if (rc == LIBSSH2_ERROR_SOCKET_NONE || rc == LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED || rc == LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED) { - int i; - int hasPassphrase = 0; - - virConnectCredential creds[] = { - {VIR_CRED_PASSPHRASE, "password", "Password", NULL, NULL, 0}, - }; - - if (!auth || !auth->cb) { + if (auth == NULL || auth->cb == NULL) { PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "%s", _("No authentication callback provided.")); goto disconnect; }
- for (i = 0; i < auth->ncredtype; i++) { - if (auth->credtype[i] == VIR_CRED_PASSPHRASE) - hasPassphrase = 1; - } + password = virRequestPassword(auth, username, conn->uri->server);
- if (!hasPassphrase) { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Required credentials are not supported.")); - goto disconnect; - } - - int res = - (auth->cb) (creds, ARRAY_CARDINALITY(creds), auth->cbdata); - - if (res < 0) { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Unable to fetch credentials.")); - goto disconnect; - } - - if (creds[0].result) { - password = creds[0].result; - } else { - PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, - "%s", _("Unable to get password certificates")); + if (password == NULL) { + PHYP_ERROR(conn, VIR_ERR_AUTH_FAILED, "Password request failed"); goto disconnect; }
@@ -404,6 +391,7 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, VIR_FREE(userhome); VIR_FREE(pubkey); VIR_FREE(pvtkey); + VIR_FREE(username); VIR_FREE(password); return NULL;
@@ -411,6 +399,7 @@ openSSHSession(virConnectPtr conn, virConnectAuthPtr auth, VIR_FREE(userhome); VIR_FREE(pubkey); VIR_FREE(pvtkey); + VIR_FREE(username); VIR_FREE(password); return session; } diff --git a/src/phyp/phyp_driver.h b/src/phyp/phyp_driver.h index d05f184..f680994 100644 --- a/src/phyp/phyp_driver.h +++ b/src/phyp/phyp_driver.h @@ -35,7 +35,6 @@ typedef struct _ConnectionData ConnectionData; typedef ConnectionData *ConnectionDataPtr; struct _ConnectionData { LIBSSH2_SESSION *session; - virConnectAuthPtr auth; int sock;
ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (2)
-
Daniel P. Berrange
-
Matthias Bolte