[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