From 3914c4c018afa48168804209abc5ec08285d1987 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Fri, 26 Jun 2015 16:40:10 +0100 Subject: [PATCH 1/3] Enforce maximum length on proxy hostname derivation --- proxy/create_container_interceptor.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/proxy/create_container_interceptor.go b/proxy/create_container_interceptor.go index db9433ef..b7d8d0c2 100644 --- a/proxy/create_container_interceptor.go +++ b/proxy/create_container_interceptor.go @@ -13,6 +13,8 @@ import ( "github.com/weaveworks/weave/nameserver" ) +const MaxDockerHostname = 64 + type createContainerInterceptor struct{ proxy *Proxy } type createContainerRequestBody struct { @@ -110,9 +112,14 @@ func (i *createContainerInterceptor) setWeaveDNS(container *createContainerReque name := r.URL.Query().Get("name") if container.Hostname == "" && name != "" { - container.Hostname = name // Strip trailing period because it's unusual to see it used on the end of a host name - container.Domainname = strings.TrimSuffix(dnsDomain, ".") + trimmedDNSDomain := strings.TrimSuffix(dnsDomain, ".") + if len(name)+1+len(trimmedDNSDomain) > MaxDockerHostname { + Warning.Printf("Container name [%s] too long to be used as hostname", name) + } else { + container.Hostname = name + container.Domainname = trimmedDNSDomain + } } if len(container.HostConfig.DNSSearch) == 0 { From d1a887857d04cf095dfea3c4ca301544d334c122 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Fri, 26 Jun 2015 17:44:37 +0100 Subject: [PATCH 2/3] Enforce maximum length on weave run hostname derivation --- weave | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/weave b/weave index b36721b0..9574975d 100755 --- a/weave +++ b/weave @@ -693,8 +693,13 @@ dns_args() { DNS_ARGS="--dns $DOCKER_BRIDGE_IP" if [ -n "$NAME_ARG" -a -z "$HOSTNAME_SPECIFIED" ] ; then DOMAIN=$(dns_domain) - DNS_ARGS="$DNS_ARGS --hostname=$NAME_ARG.${DOMAIN%.}" - HOSTNAME_SPECIFIED=1 + HOSTNAME="$NAME_ARG.${DOMAIN%.}" + if [ ${#HOSTNAME} -gt 64 ] ; then + echo "Container name too long to be used as hostname" >&2 + else + DNS_ARGS="$DNS_ARGS --hostname=$HOSTNAME" + HOSTNAME_SPECIFIED=1 + fi fi if [ -z "$DNS_SEARCH_SPECIFIED" ] ; then if [ -z "$HOSTNAME_SPECIFIED" ] ; then From d427c99161174b59fc9d14c2c0e3b43cf15c4cb7 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Wed, 1 Jul 2015 14:35:39 +0100 Subject: [PATCH 3/3] Add smoke test --- test/270_use_name_as_hostname_test.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/270_use_name_as_hostname_test.sh b/test/270_use_name_as_hostname_test.sh index ccb0ff86..9d59bbe9 100755 --- a/test/270_use_name_as_hostname_test.sh +++ b/test/270_use_name_as_hostname_test.sh @@ -33,4 +33,8 @@ assert_expected_fqdn "$HOSTNAME" -h $HOSTNAME --name=$NAME assert_expected_fqdn "$HOSTNAME" --hostname=$HOSTNAME --name=$NAME assert_expected_fqdn "$HOSTNAME" --hostname $HOSTNAME --name=$NAME +# Ensure we can launch a container with a name that is too long for hostname derivation +SIXTY_FIVE_CHARS=01234567890123456789012345678901234567890123456789012345678901234 +assert_raises "start_container $HOST1 --name=$SIXTY_FIVE_CHARS" + end_suite