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:
Cédric Bosdonnat 2017-12-18 15:48:33 +01:00
parent b475a91b77
commit faec195861

View File

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