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:
Daniel P. Berrangé 2021-05-24 14:02:07 +01:00
parent a91f308e05
commit faf8354674
4 changed files with 30 additions and 42 deletions

View File

@ -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;

View File

@ -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;
} }
} }
} }

View File

@ -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);

View File

@ -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);