[libvirt] [PATCH] phyp: Use virRequestUsername and virRequestPassword
Daniel P. Berrange
berrange at redhat.com
Mon Mar 15 15:29:11 UTC 2010
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 :|
More information about the libvir-list
mailing list