mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
lxc: set a hostname based on the container name
Set a transient hostname on containers. The hostname is computed from the container name, only keeping the valid characters [a-zA-Z0-9-] in it. This filtering is based on RFC 1123 and allows a digit to start the hostname.
This commit is contained in:
parent
b475a91b77
commit
faec195861
@ -2159,6 +2159,37 @@ static int lxcContainerSetUserGroup(virCommandPtr cmd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char hostname_validchars[] =
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"0123456789-";
|
||||
|
||||
static int lxcContainerSetHostname(virDomainDefPtr def)
|
||||
{
|
||||
int ret = -1;
|
||||
char *name = NULL;
|
||||
char *hostname = NULL;
|
||||
|
||||
/* Filter the VM name to get a valid hostname */
|
||||
if (VIR_STRDUP(name, def->name) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* RFC 1123 allows 0-9 digits as a first character in hostname */
|
||||
virStringFilterChars(name, hostname_validchars);
|
||||
hostname = name;
|
||||
if (strlen(name) > 0 && name[0] == '-')
|
||||
hostname = name + 1;
|
||||
|
||||
if (sethostname(hostname, strlen(hostname)) < 0) {
|
||||
virReportSystemError(errno, "%s", _("Failed to set hostname"));
|
||||
goto cleanup;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* lxcContainerChild:
|
||||
@ -2269,6 +2300,10 @@ static int lxcContainerChild(void *data)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (lxcContainerSetHostname(vmDef) < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
||||
/* drop a set of root capabilities */
|
||||
if (lxcContainerDropCapabilities(vmDef, !!hasReboot) < 0)
|
||||
goto cleanup;
|
||||
|
Loading…
x
Reference in New Issue
Block a user