#include "virdomainsnapshotobjlist.h"
#include "virdomaincheckpointobjlist.h"
#include "virutil.h"
-#include "vircrypto.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN
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:
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);
#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
#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,
virDomainFSTypeToString;
virDomainFSWrpolicyTypeFromString;
virDomainFSWrpolicyTypeToString;
-virDomainGenerateMachineName;
virDomainGetBlkioParametersAssignFromDef;
virDomainGetFilesystemForTarget;
virDomainGraphicsAuthConnectedTypeFromString;
# hypervisor/domain_driver.h
+virDomainDriverGenerateMachineName;
virDomainDriverMergeBlkioDevice;
virDomainDriverParseBlkioDeviceStr;
virDomainDriverSetupPersistentDefBlkioParams;
#include "virtime.h"
#include "virsystemd.h"
#include "virinitctl.h"
+#include "domain_driver.h"
#define VIR_FROM_THIS VIR_FROM_LXC
}
if (!ret)
- ret = virDomainGenerateMachineName("lxc", NULL, def->id, def->name, true);
+ ret = virDomainDriverGenerateMachineName("lxc", NULL, def->id, def->name, true);
return ret;
}
#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"
}
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;
}
# 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");
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)) {