The virDomainGenerateMachineName() function doesn't belong in
src/conf/ really, because it has nothing to do with domain XML
parsing. It landed there because of lack of better place in the
past. But now that we have src/hypervisor/ the function should
live there. At the same time, the function name is changed to
match new location.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
Reviewed-by: Andrea Bolognani <abologna(a)redhat.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/conf/domain_conf.c | 72 ---------------------------------
src/conf/domain_conf.h | 7 ----
src/hypervisor/domain_driver.c | 74 ++++++++++++++++++++++++++++++++++
src/hypervisor/domain_driver.h | 7 ++++
src/libvirt_private.syms | 2 +-
src/lxc/lxc_domain.c | 3 +-
src/qemu/qemu_domain.c | 7 ++--
tests/virsystemdtest.c | 5 ++-
8 files changed, 91 insertions(+), 86 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 914e03c705..efb9a61243 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -62,7 +62,6 @@
#include "virdomainsnapshotobjlist.h"
#include "virdomaincheckpointobjlist.h"
#include "virutil.h"
-#include "vircrypto.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN
@@ -31037,77 +31036,6 @@ virDomainDiskSetBlockIOTune(virDomainDiskDefPtr disk,
return 0;
}
-#define HOSTNAME_CHARS \
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"
-
-static void
-virDomainMachineNameAppendValid(virBufferPtr buf,
- const char *name)
-{
- bool skip = true;
-
- for (; *name; name++) {
- if (strlen(virBufferCurrentContent(buf)) >= 64)
- break;
-
- if (*name == '.' || *name == '-') {
- if (!skip)
- virBufferAddChar(buf, *name);
- skip = true;
- continue;
- }
-
- skip = false;
-
- if (!strchr(HOSTNAME_CHARS, *name))
- continue;
-
- virBufferAddChar(buf, *name);
- }
-
- /* trailing dashes or dots are not allowed */
- virBufferTrimChars(buf, "-.");
-}
-
-#undef HOSTNAME_CHARS
-
-char *
-virDomainGenerateMachineName(const char *drivername,
- const char *root,
- int id,
- const char *name,
- bool privileged)
-{
- virBuffer buf = VIR_BUFFER_INITIALIZER;
-
- virBufferAsprintf(&buf, "%s-", drivername);
-
- if (root) {
- g_autofree char *hash = NULL;
-
- /* When two embed drivers start two domains with the same @name and @id
- * we would generate a non-unique name. Include parts of hashed @root
- * which guarantees uniqueness. The first 8 characters of SHA256 ought
- * to be enough for anybody. */
- if (virCryptoHashString(VIR_CRYPTO_HASH_SHA256, root, &hash) < 0)
- return NULL;
-
- virBufferAsprintf(&buf, "embed-%.8s-", hash);
- } else if (!privileged) {
- g_autofree char *username = NULL;
- if (!(username = virGetUserName(geteuid()))) {
- virBufferFreeAndReset(&buf);
- return NULL;
- }
- virBufferAsprintf(&buf, "%s-", username);
- }
-
- virBufferAsprintf(&buf, "%d-", id);
- virDomainMachineNameAppendValid(&buf, name);
-
- return virBufferContentAndReset(&buf);
-}
-
/**
* virDomainNetTypeSharesHostView:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 33875d942f..575290a6ac 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3649,13 +3649,6 @@ virDomainGetBlkioParametersAssignFromDef(virDomainDefPtr def,
int virDomainDiskSetBlockIOTune(virDomainDiskDefPtr disk,
virDomainBlockIoTuneInfo *info);
-char *
-virDomainGenerateMachineName(const char *drivername,
- const char *root,
- int id,
- const char *name,
- bool privileged);
-
bool
virDomainNetTypeSharesHostView(const virDomainNetDef *net);
diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
index fc5b6eeefe..7bf0fb3f98 100644
--- a/src/hypervisor/domain_driver.c
+++ b/src/hypervisor/domain_driver.c
@@ -23,10 +23,84 @@
#include "domain_driver.h"
#include "viralloc.h"
#include "virstring.h"
+#include "vircrypto.h"
+#include "virutil.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN
+#define HOSTNAME_CHARS \
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"
+
+static void
+virDomainMachineNameAppendValid(virBufferPtr buf,
+ const char *name)
+{
+ bool skip = true;
+
+ for (; *name; name++) {
+ if (strlen(virBufferCurrentContent(buf)) >= 64)
+ break;
+
+ if (*name == '.' || *name == '-') {
+ if (!skip)
+ virBufferAddChar(buf, *name);
+ skip = true;
+ continue;
+ }
+
+ skip = false;
+
+ if (!strchr(HOSTNAME_CHARS, *name))
+ continue;
+
+ virBufferAddChar(buf, *name);
+ }
+
+ /* trailing dashes or dots are not allowed */
+ virBufferTrimChars(buf, "-.");
+}
+
+#undef HOSTNAME_CHARS
+
+char *
+virDomainDriverGenerateMachineName(const char *drivername,
+ const char *root,
+ int id,
+ const char *name,
+ bool privileged)
+{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+
+ virBufferAsprintf(&buf, "%s-", drivername);
+
+ if (root) {
+ g_autofree char *hash = NULL;
+
+ /* When two embed drivers start two domains with the same @name and @id
+ * we would generate a non-unique name. Include parts of hashed @root
+ * which guarantees uniqueness. The first 8 characters of SHA256 ought
+ * to be enough for anybody. */
+ if (virCryptoHashString(VIR_CRYPTO_HASH_SHA256, root, &hash) < 0)
+ return NULL;
+
+ virBufferAsprintf(&buf, "embed-%.8s-", hash);
+ } else if (!privileged) {
+ g_autofree char *username = NULL;
+ if (!(username = virGetUserName(geteuid()))) {
+ virBufferFreeAndReset(&buf);
+ return NULL;
+ }
+ virBufferAsprintf(&buf, "%s-", username);
+ }
+
+ virBufferAsprintf(&buf, "%d-", id);
+ virDomainMachineNameAppendValid(&buf, name);
+
+ return virBufferContentAndReset(&buf);
+}
+
+
/* Modify dest_array to reflect all blkio device changes described in
* src_array. */
int
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
index b6d5e66bba..c52e37f038 100644
--- a/src/hypervisor/domain_driver.h
+++ b/src/hypervisor/domain_driver.h
@@ -22,6 +22,13 @@
#include "domain_conf.h"
+char *
+virDomainDriverGenerateMachineName(const char *drivername,
+ const char *root,
+ int id,
+ const char *name,
+ bool privileged);
+
int virDomainDriverMergeBlkioDevice(virBlkioDevicePtr *dest_array,
size_t *dest_size,
virBlkioDevicePtr src_array,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index e276f55bb1..b02b6380ed 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -406,7 +406,6 @@ virDomainFSTypeFromString;
virDomainFSTypeToString;
virDomainFSWrpolicyTypeFromString;
virDomainFSWrpolicyTypeToString;
-virDomainGenerateMachineName;
virDomainGetBlkioParametersAssignFromDef;
virDomainGetFilesystemForTarget;
virDomainGraphicsAuthConnectedTypeFromString;
@@ -1403,6 +1402,7 @@ virDomainCgroupSetupMemtune;
# hypervisor/domain_driver.h
+virDomainDriverGenerateMachineName;
virDomainDriverMergeBlkioDevice;
virDomainDriverParseBlkioDeviceStr;
virDomainDriverSetupPersistentDefBlkioParams;
diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c
index ebd2c2b56e..59f803837a 100644
--- a/src/lxc/lxc_domain.c
+++ b/src/lxc/lxc_domain.c
@@ -31,6 +31,7 @@
#include "virtime.h"
#include "virsystemd.h"
#include "virinitctl.h"
+#include "domain_driver.h"
#define VIR_FROM_THIS VIR_FROM_LXC
@@ -406,7 +407,7 @@ virLXCDomainGetMachineName(virDomainDefPtr def, pid_t pid)
}
if (!ret)
- ret = virDomainGenerateMachineName("lxc", NULL, def->id,
def->name, true);
+ ret = virDomainDriverGenerateMachineName("lxc", NULL, def->id,
def->name, true);
return ret;
}
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e54eeae58f..25ee46fe34 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -44,6 +44,7 @@
#include "virfile.h"
#include "domain_addr.h"
#include "domain_capabilities.h"
+#include "domain_driver.h"
#include "domain_event.h"
#include "virtime.h"
#include "virnetdevopenvswitch.h"
@@ -16544,9 +16545,9 @@ qemuDomainGetMachineName(virDomainObjPtr vm)
}
if (!ret)
- ret = virDomainGenerateMachineName("qemu", cfg->root,
- vm->def->id, vm->def->name,
- driver->privileged);
+ ret = virDomainDriverGenerateMachineName("qemu", cfg->root,
+ vm->def->id, vm->def->name,
+ driver->privileged);
return ret;
}
diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
index 050941dce8..e7dcdea8e9 100644
--- a/tests/virsystemdtest.c
+++ b/tests/virsystemdtest.c
@@ -34,6 +34,7 @@
# include "virlog.h"
# include "virmock.h"
# include "rpc/virnetsocket.h"
+# include "domain_driver.h"
# define VIR_FROM_THIS VIR_FROM_NONE
VIR_LOG_INIT("tests.systemdtest");
@@ -414,8 +415,8 @@ testMachineName(const void *opaque)
int ret = -1;
char *actual = NULL;
- if (!(actual = virDomainGenerateMachineName("qemu", data->root,
- data->id, data->name, true)))
+ if (!(actual = virDomainDriverGenerateMachineName("qemu", data->root,
+ data->id, data->name,
true)))
goto cleanup;
if (STRNEQ(actual, data->expected)) {
--
2.24.1