mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-22 22:13:18 +00:00
remote: consistently use flags for passing ro/user/autostart props
We have helper methods that return boolans for ro/user/autostart properties. We then pack them into a flags parameter, and later unpack them again. This makes the code consistently use flags throughout. Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
a91f308e05
commit
faf8354674
@ -942,9 +942,7 @@ doRemoteOpen(virConnectPtr conn,
|
|||||||
case REMOTE_DRIVER_TRANSPORT_LIBSSH2:
|
case REMOTE_DRIVER_TRANSPORT_LIBSSH2:
|
||||||
if (!sockname &&
|
if (!sockname &&
|
||||||
!(sockname = remoteGetUNIXSocket(transport, mode, driver_str,
|
!(sockname = remoteGetUNIXSocket(transport, mode, driver_str,
|
||||||
flags & REMOTE_DRIVER_OPEN_RO,
|
flags, &daemon_name)))
|
||||||
flags & REMOTE_DRIVER_OPEN_USER,
|
|
||||||
&daemon_name)))
|
|
||||||
goto failed;
|
goto failed;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1257,9 +1255,7 @@ remoteConnectOpen(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
struct private_data *priv;
|
struct private_data *priv;
|
||||||
int ret = VIR_DRV_OPEN_ERROR;
|
int ret = VIR_DRV_OPEN_ERROR;
|
||||||
int rflags = 0;
|
unsigned int rflags = 0;
|
||||||
bool user;
|
|
||||||
bool autostart;
|
|
||||||
char *driver = NULL;
|
char *driver = NULL;
|
||||||
remoteDriverTransport transport;
|
remoteDriverTransport transport;
|
||||||
|
|
||||||
@ -1295,15 +1291,11 @@ remoteConnectOpen(virConnectPtr conn,
|
|||||||
if (!(priv = remoteAllocPrivateData()))
|
if (!(priv = remoteAllocPrivateData()))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
|
||||||
|
remoteGetURIDaemonInfo(conn->uri, transport, &rflags);
|
||||||
if (flags & VIR_CONNECT_RO)
|
if (flags & VIR_CONNECT_RO)
|
||||||
rflags |= REMOTE_DRIVER_OPEN_RO;
|
rflags |= REMOTE_DRIVER_OPEN_RO;
|
||||||
|
|
||||||
remoteGetURIDaemonInfo(conn->uri, transport, &user, &autostart);
|
|
||||||
if (user)
|
|
||||||
rflags |= REMOTE_DRIVER_OPEN_USER;
|
|
||||||
if (autostart)
|
|
||||||
rflags |= REMOTE_DRIVER_OPEN_AUTOSTART;
|
|
||||||
|
|
||||||
ret = doRemoteOpen(conn, priv, driver, transport, auth, conf, rflags);
|
ret = doRemoteOpen(conn, priv, driver, transport, auth, conf, rflags);
|
||||||
if (ret != VIR_DRV_OPEN_SUCCESS) {
|
if (ret != VIR_DRV_OPEN_SUCCESS) {
|
||||||
conn->privateData = NULL;
|
conn->privateData = NULL;
|
||||||
|
@ -101,13 +101,12 @@ remoteSplitURIScheme(virURI *uri,
|
|||||||
static char *
|
static char *
|
||||||
remoteGetUNIXSocketHelper(remoteDriverTransport transport,
|
remoteGetUNIXSocketHelper(remoteDriverTransport transport,
|
||||||
const char *sock_prefix,
|
const char *sock_prefix,
|
||||||
bool ro,
|
unsigned int flags)
|
||||||
bool session)
|
|
||||||
{
|
{
|
||||||
char *sockname = NULL;
|
char *sockname = NULL;
|
||||||
g_autofree char *userdir = NULL;
|
g_autofree char *userdir = NULL;
|
||||||
|
|
||||||
if (session) {
|
if (flags & REMOTE_DRIVER_OPEN_USER) {
|
||||||
userdir = virGetUserRuntimeDirectory();
|
userdir = virGetUserRuntimeDirectory();
|
||||||
|
|
||||||
sockname = g_strdup_printf("%s/%s-sock", userdir, sock_prefix);
|
sockname = g_strdup_printf("%s/%s-sock", userdir, sock_prefix);
|
||||||
@ -120,13 +119,14 @@ remoteGetUNIXSocketHelper(remoteDriverTransport transport,
|
|||||||
*/
|
*/
|
||||||
sockname = g_strdup_printf("%s/run/libvirt/%s-%s", LOCALSTATEDIR,
|
sockname = g_strdup_printf("%s/run/libvirt/%s-%s", LOCALSTATEDIR,
|
||||||
sock_prefix,
|
sock_prefix,
|
||||||
ro ? "sock-ro" : "sock");
|
flags & REMOTE_DRIVER_OPEN_RO ?
|
||||||
|
"sock-ro" : "sock");
|
||||||
}
|
}
|
||||||
|
|
||||||
VIR_DEBUG("Built UNIX sockname=%s for transport=%s "
|
VIR_DEBUG("Built UNIX sockname=%s for transport=%s "
|
||||||
"prefix=%s ro=%d session=%d",
|
"prefix=%s flags=0x%x",
|
||||||
sockname, remoteDriverTransportTypeToString(transport),
|
sockname, remoteDriverTransportTypeToString(transport),
|
||||||
sock_prefix, ro, session);
|
sock_prefix, flags);
|
||||||
return sockname;
|
return sockname;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,8 +135,7 @@ char *
|
|||||||
remoteGetUNIXSocket(remoteDriverTransport transport,
|
remoteGetUNIXSocket(remoteDriverTransport transport,
|
||||||
remoteDriverMode mode,
|
remoteDriverMode mode,
|
||||||
const char *driver,
|
const char *driver,
|
||||||
bool ro,
|
unsigned int flags,
|
||||||
bool session,
|
|
||||||
char **daemon)
|
char **daemon)
|
||||||
{
|
{
|
||||||
char *sock_name = NULL;
|
char *sock_name = NULL;
|
||||||
@ -145,10 +144,10 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
|
|||||||
g_autofree char *direct_sock_name = NULL;
|
g_autofree char *direct_sock_name = NULL;
|
||||||
g_autofree char *legacy_sock_name = NULL;
|
g_autofree char *legacy_sock_name = NULL;
|
||||||
|
|
||||||
VIR_DEBUG("Choosing remote socket for transport=%s mode=%s driver=%s ro=%d session=%d",
|
VIR_DEBUG("Choosing remote socket for transport=%s mode=%s driver=%s flags=0x%x",
|
||||||
remoteDriverTransportTypeToString(transport),
|
remoteDriverTransportTypeToString(transport),
|
||||||
remoteDriverModeTypeToString(mode),
|
remoteDriverModeTypeToString(mode),
|
||||||
driver, ro, session);
|
driver, flags);
|
||||||
|
|
||||||
if (driver)
|
if (driver)
|
||||||
direct_daemon = g_strdup_printf("virt%sd", driver);
|
direct_daemon = g_strdup_printf("virt%sd", driver);
|
||||||
@ -156,9 +155,9 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
|
|||||||
legacy_daemon = g_strdup("libvirtd");
|
legacy_daemon = g_strdup("libvirtd");
|
||||||
|
|
||||||
if (driver)
|
if (driver)
|
||||||
direct_sock_name = remoteGetUNIXSocketHelper(transport, direct_daemon, ro, session);
|
direct_sock_name = remoteGetUNIXSocketHelper(transport, direct_daemon, flags);
|
||||||
|
|
||||||
legacy_sock_name = remoteGetUNIXSocketHelper(transport, "libvirt", ro, session);
|
legacy_sock_name = remoteGetUNIXSocketHelper(transport, "libvirt", flags);
|
||||||
|
|
||||||
if (mode == REMOTE_DRIVER_MODE_AUTO) {
|
if (mode == REMOTE_DRIVER_MODE_AUTO) {
|
||||||
if (transport == REMOTE_DRIVER_TRANSPORT_UNIX) {
|
if (transport == REMOTE_DRIVER_TRANSPORT_UNIX) {
|
||||||
@ -221,13 +220,11 @@ remoteGetUNIXSocket(remoteDriverTransport transport,
|
|||||||
void
|
void
|
||||||
remoteGetURIDaemonInfo(virURI *uri,
|
remoteGetURIDaemonInfo(virURI *uri,
|
||||||
remoteDriverTransport transport,
|
remoteDriverTransport transport,
|
||||||
bool *session,
|
unsigned int *flags)
|
||||||
bool *autostart)
|
|
||||||
{
|
{
|
||||||
const char *autostart_str = getenv("LIBVIRT_AUTOSTART");
|
const char *autostart_str = getenv("LIBVIRT_AUTOSTART");
|
||||||
|
|
||||||
*session = false;
|
*flags = 0;
|
||||||
*autostart = false;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* User session daemon is used for
|
* User session daemon is used for
|
||||||
@ -244,7 +241,7 @@ remoteGetURIDaemonInfo(virURI *uri,
|
|||||||
STRPREFIX(uri->scheme, "test+")) &&
|
STRPREFIX(uri->scheme, "test+")) &&
|
||||||
geteuid() > 0) {
|
geteuid() > 0) {
|
||||||
VIR_DEBUG("User session daemon required");
|
VIR_DEBUG("User session daemon required");
|
||||||
*session = true;
|
*flags |= REMOTE_DRIVER_OPEN_USER;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Furthermore if no servername is given,
|
* Furthermore if no servername is given,
|
||||||
@ -256,7 +253,7 @@ remoteGetURIDaemonInfo(virURI *uri,
|
|||||||
(!autostart_str ||
|
(!autostart_str ||
|
||||||
STRNEQ(autostart_str, "0"))) {
|
STRNEQ(autostart_str, "0"))) {
|
||||||
VIR_DEBUG("Try daemon autostart");
|
VIR_DEBUG("Try daemon autostart");
|
||||||
*autostart = true;
|
*flags |= REMOTE_DRIVER_OPEN_AUTOSTART;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,10 +265,10 @@ remoteGetURIDaemonInfo(virURI *uri,
|
|||||||
VIR_DEBUG("Auto-probe remote URI");
|
VIR_DEBUG("Auto-probe remote URI");
|
||||||
if (geteuid() > 0) {
|
if (geteuid() > 0) {
|
||||||
VIR_DEBUG("Auto-spawn user daemon instance");
|
VIR_DEBUG("Auto-spawn user daemon instance");
|
||||||
*session = true;
|
*flags |= REMOTE_DRIVER_OPEN_USER;
|
||||||
if (!autostart_str ||
|
if (!autostart_str ||
|
||||||
STRNEQ(autostart_str, "0"))
|
STRNEQ(autostart_str, "0"))
|
||||||
*autostart = true;
|
*flags |= REMOTE_DRIVER_OPEN_AUTOSTART;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,12 +66,10 @@ char *
|
|||||||
remoteGetUNIXSocket(remoteDriverTransport transport,
|
remoteGetUNIXSocket(remoteDriverTransport transport,
|
||||||
remoteDriverMode mode,
|
remoteDriverMode mode,
|
||||||
const char *driver,
|
const char *driver,
|
||||||
bool ro,
|
unsigned int flags, /* remoteDriverOpenFlags */
|
||||||
bool session,
|
|
||||||
char **daemon);
|
char **daemon);
|
||||||
|
|
||||||
void
|
void
|
||||||
remoteGetURIDaemonInfo(virURI *uri,
|
remoteGetURIDaemonInfo(virURI *uri,
|
||||||
remoteDriverTransport transport,
|
remoteDriverTransport transport,
|
||||||
bool *session,
|
unsigned int *flags); /* remoteDriverOpenFlags */
|
||||||
bool *autostart);
|
|
||||||
|
@ -355,8 +355,6 @@ int main(int argc, char **argv)
|
|||||||
g_autoptr(virURI) uri = NULL;
|
g_autoptr(virURI) uri = NULL;
|
||||||
g_autofree char *driver = NULL;
|
g_autofree char *driver = NULL;
|
||||||
remoteDriverTransport transport;
|
remoteDriverTransport transport;
|
||||||
bool user = false;
|
|
||||||
bool autostart = false;
|
|
||||||
gboolean version = false;
|
gboolean version = false;
|
||||||
gboolean readonly = false;
|
gboolean readonly = false;
|
||||||
g_autofree char *sock_path = NULL;
|
g_autofree char *sock_path = NULL;
|
||||||
@ -369,6 +367,7 @@ int main(int argc, char **argv)
|
|||||||
{ "version", 'V', 0, G_OPTION_ARG_NONE, &version, "Display version information", NULL },
|
{ "version", 'V', 0, G_OPTION_ARG_NONE, &version, "Display version information", NULL },
|
||||||
{ NULL, '\0', 0, 0, NULL, NULL, NULL }
|
{ NULL, '\0', 0, 0, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
unsigned int flags;
|
||||||
|
|
||||||
context = g_option_context_new("- libvirt socket proxy");
|
context = g_option_context_new("- libvirt socket proxy");
|
||||||
g_option_context_add_main_entries(context, entries, PACKAGE);
|
g_option_context_add_main_entries(context, entries, PACKAGE);
|
||||||
@ -422,16 +421,18 @@ int main(int argc, char **argv)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteGetURIDaemonInfo(uri, transport, &user, &autostart);
|
remoteGetURIDaemonInfo(uri, transport, &flags);
|
||||||
|
if (readonly)
|
||||||
|
flags |= REMOTE_DRIVER_OPEN_RO;
|
||||||
|
|
||||||
sock_path = remoteGetUNIXSocket(transport,
|
sock_path = remoteGetUNIXSocket(transport,
|
||||||
REMOTE_DRIVER_MODE_AUTO,
|
REMOTE_DRIVER_MODE_AUTO,
|
||||||
driver,
|
driver,
|
||||||
!!readonly,
|
flags,
|
||||||
user,
|
|
||||||
&daemon_name);
|
&daemon_name);
|
||||||
|
|
||||||
if (virNetSocketNewConnectUNIX(sock_path, autostart, daemon_name, &sock) < 0) {
|
if (virNetSocketNewConnectUNIX(sock_path, flags & REMOTE_DRIVER_OPEN_AUTOSTART,
|
||||||
|
daemon_name, &sock) < 0) {
|
||||||
g_printerr(_("%s: cannot connect to '%s': %s\n"),
|
g_printerr(_("%s: cannot connect to '%s': %s\n"),
|
||||||
argv[0], sock_path, virGetLastErrorMessage());
|
argv[0], sock_path, virGetLastErrorMessage());
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
Loading…
Reference in New Issue
Block a user