mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
virAuth: Don't require virConnectPtr to retrieve authentication creds
Previously a connection object was required to retrieve the auth credentials. This patch adds the option to call the retrieval functions only using the connection URI or path to the configuration file. This will allow to use this toolkit to request passwords for ssh authentication in the libssh2 connection driver. Changes: *virAuthGetConfigFilePathURI(): use URI to retrieve the config file path *virAuthGetCredential(): Remove the need to propagate conn object virAuthGetPasswordPath(): *virAuthGetUsernamePath(): New functions, that use config file path instead of conn object
This commit is contained in:
parent
6d986d9918
commit
c7dba5d695
@ -36,9 +36,9 @@
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_AUTH
|
||||
|
||||
|
||||
int virAuthGetConfigFilePath(virConnectPtr conn,
|
||||
char **path)
|
||||
int
|
||||
virAuthGetConfigFilePathURI(virURIPtr uri,
|
||||
char **path)
|
||||
{
|
||||
int ret = -1;
|
||||
size_t i;
|
||||
@ -56,13 +56,12 @@ int virAuthGetConfigFilePath(virConnectPtr conn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (conn && conn->uri) {
|
||||
for (i = 0; i < conn->uri->paramsCount; i++) {
|
||||
if (STREQ_NULLABLE(conn->uri->params[i].name, "authfile") &&
|
||||
conn->uri->params[i].value) {
|
||||
VIR_DEBUG("Using path from URI '%s'",
|
||||
conn->uri->params[i].value);
|
||||
if (VIR_STRDUP(*path, conn->uri->params[i].value) < 0)
|
||||
if (uri) {
|
||||
for (i = 0; i < uri->paramsCount; i++) {
|
||||
if (STREQ_NULLABLE(uri->params[i].name, "authfile") &&
|
||||
uri->params[i].value) {
|
||||
VIR_DEBUG("Using path from URI '%s'", uri->params[i].value);
|
||||
if (VIR_STRDUP(*path, uri->params[i].value) < 0)
|
||||
goto cleanup;
|
||||
return 0;
|
||||
}
|
||||
@ -101,33 +100,36 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
virAuthGetConfigFilePath(virConnectPtr conn,
|
||||
char **path)
|
||||
{
|
||||
return virAuthGetConfigFilePathURI(conn ? conn->uri : NULL, path);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
virAuthGetCredential(virConnectPtr conn,
|
||||
const char *servicename,
|
||||
virAuthGetCredential(const char *servicename,
|
||||
const char *hostname,
|
||||
const char *credname,
|
||||
const char *path,
|
||||
char **value)
|
||||
{
|
||||
int ret = -1;
|
||||
char *path = NULL;
|
||||
virAuthConfigPtr config = NULL;
|
||||
const char *tmp;
|
||||
|
||||
*value = NULL;
|
||||
|
||||
if (virAuthGetConfigFilePath(conn, &path) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (path == NULL) {
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
if (path == NULL)
|
||||
return 0;
|
||||
|
||||
if (!(config = virAuthConfigNew(path)))
|
||||
goto cleanup;
|
||||
|
||||
if (virAuthConfigLookup(config,
|
||||
servicename,
|
||||
VIR_URI_SERVER(conn->uri),
|
||||
hostname,
|
||||
credname,
|
||||
&tmp) < 0)
|
||||
goto cleanup;
|
||||
@ -139,24 +141,23 @@ virAuthGetCredential(virConnectPtr conn,
|
||||
|
||||
cleanup:
|
||||
virAuthConfigFree(config);
|
||||
VIR_FREE(path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virAuthGetUsername(virConnectPtr conn,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *defaultUsername,
|
||||
const char *hostname)
|
||||
virAuthGetUsernamePath(const char *path,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *defaultUsername,
|
||||
const char *hostname)
|
||||
{
|
||||
unsigned int ncred;
|
||||
virConnectCredential cred;
|
||||
char *prompt;
|
||||
char *ret = NULL;
|
||||
|
||||
if (virAuthGetCredential(conn, servicename, "username", &ret) < 0)
|
||||
if (virAuthGetCredential(servicename, hostname, "username", path, &ret) < 0)
|
||||
return NULL;
|
||||
if (ret != NULL)
|
||||
return ret;
|
||||
@ -199,20 +200,41 @@ virAuthGetUsername(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *
|
||||
virAuthGetPassword(virConnectPtr conn,
|
||||
virAuthGetUsername(virConnectPtr conn,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *username,
|
||||
const char *defaultUsername,
|
||||
const char *hostname)
|
||||
{
|
||||
char *ret;
|
||||
char *path;
|
||||
|
||||
if (virAuthGetConfigFilePath(conn, &path) < 0)
|
||||
return NULL;
|
||||
|
||||
ret = virAuthGetUsernamePath(path, auth, servicename,
|
||||
defaultUsername, hostname);
|
||||
|
||||
VIR_FREE(path);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virAuthGetPasswordPath(const char *path,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *username,
|
||||
const char *hostname)
|
||||
{
|
||||
unsigned int ncred;
|
||||
virConnectCredential cred;
|
||||
char *prompt;
|
||||
char *ret = NULL;
|
||||
|
||||
if (virAuthGetCredential(conn, servicename, "password", &ret) < 0)
|
||||
if (virAuthGetCredential(servicename, hostname, "password", path, &ret) < 0)
|
||||
return NULL;
|
||||
if (ret != NULL)
|
||||
return ret;
|
||||
@ -248,3 +270,24 @@ virAuthGetPassword(virConnectPtr conn,
|
||||
|
||||
return cred.result;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virAuthGetPassword(virConnectPtr conn,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *username,
|
||||
const char *hostname)
|
||||
{
|
||||
char *ret;
|
||||
char *path;
|
||||
|
||||
if (virAuthGetConfigFilePath(conn, &path) < 0)
|
||||
return NULL;
|
||||
|
||||
ret = virAuthGetPasswordPath(path, auth, servicename, username, hostname);
|
||||
|
||||
VIR_FREE(path);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* virauth.h: authentication related utility functions
|
||||
*
|
||||
* Copyright (C) 2013 Red Hat, Inc.
|
||||
* Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -23,10 +24,15 @@
|
||||
# define __VIR_AUTH_H__
|
||||
|
||||
# include "internal.h"
|
||||
# include "viruri.h"
|
||||
|
||||
int virAuthGetConfigFilePath(virConnectPtr conn,
|
||||
char **path);
|
||||
|
||||
int virAuthGetConfigFilePathURI(virURIPtr uri,
|
||||
char **path);
|
||||
|
||||
|
||||
char *virAuthGetUsername(virConnectPtr conn,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
@ -37,5 +43,14 @@ char *virAuthGetPassword(virConnectPtr conn,
|
||||
const char *servicename,
|
||||
const char *username,
|
||||
const char *hostname);
|
||||
|
||||
char * virAuthGetUsernamePath(const char *path,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *defaultUsername,
|
||||
const char *hostname);
|
||||
char * virAuthGetPasswordPath(const char *path,
|
||||
virConnectAuthPtr auth,
|
||||
const char *servicename,
|
||||
const char *username,
|
||||
const char *hostname);
|
||||
#endif /* __VIR_AUTH_H__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user