mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-25 10:03:49 +03:00
virDomainDriverGenerateMachineName: Factor out embed path hashing
The code that generates "qemu-embed-$hash" is going to be useful in more places. Separate it out into a function. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
8b9488d929
commit
5bc3299447
@ -28,6 +28,22 @@
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_DOMAIN
|
||||
|
||||
char *
|
||||
virDomainDriverGenerateRootHash(const char *drivername,
|
||||
const char *root)
|
||||
{
|
||||
g_autofree char *hash = NULL;
|
||||
|
||||
if (virCryptoHashString(VIR_CRYPTO_HASH_SHA256, root, &hash) < 0)
|
||||
return 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. */
|
||||
return g_strdup_printf("%s-embed-%.8s", drivername, hash);
|
||||
}
|
||||
|
||||
|
||||
#define HOSTNAME_CHARS \
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"
|
||||
@ -72,26 +88,24 @@ virDomainDriverGenerateMachineName(const char *drivername,
|
||||
{
|
||||
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)
|
||||
if (!(hash = virDomainDriverGenerateRootHash(drivername, root)))
|
||||
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-", hash);
|
||||
} else {
|
||||
virBufferAsprintf(&buf, "%s-", drivername);
|
||||
if (!privileged) {
|
||||
|
||||
g_autofree char *username = NULL;
|
||||
if (!(username = virGetUserName(geteuid()))) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
return NULL;
|
||||
}
|
||||
virBufferAsprintf(&buf, "%s-", username);
|
||||
}
|
||||
virBufferAsprintf(&buf, "%s-", username);
|
||||
}
|
||||
|
||||
virBufferAsprintf(&buf, "%d-", id);
|
||||
|
@ -22,6 +22,10 @@
|
||||
|
||||
#include "domain_conf.h"
|
||||
|
||||
char *
|
||||
virDomainDriverGenerateRootHash(const char *drivername,
|
||||
const char *root);
|
||||
|
||||
char *
|
||||
virDomainDriverGenerateMachineName(const char *drivername,
|
||||
const char *root,
|
||||
|
@ -1403,6 +1403,7 @@ virDomainCgroupSetupMemtune;
|
||||
|
||||
# hypervisor/domain_driver.h
|
||||
virDomainDriverGenerateMachineName;
|
||||
virDomainDriverGenerateRootHash;
|
||||
virDomainDriverMergeBlkioDevice;
|
||||
virDomainDriverParseBlkioDeviceStr;
|
||||
virDomainDriverSetupPersistentDefBlkioParams;
|
||||
|
Loading…
x
Reference in New Issue
Block a user