diff --git a/templates/listen.erb b/templates/listen.erb index a418737fde4975bdd194fe7642bfcca259329a3c..8bc9b930f479870bca233a39e3718eb9aa06dff8 100644 --- a/templates/listen.erb +++ b/templates/listen.erb @@ -1,22 +1,25 @@ <% listen_on = [] - [@urls].flatten.sort.uniq.each { |u| + [@urls].flatten.sort.uniq.each do |u| u =~ /^([a-z]*):\/\/([^:\/]+|\[[^\[\]]+\])(:([0-9]+))?\/?$/ (schema,host,port) = $1,$2,$4 if host == '' host = @name end if host == '*' - addr = host - elsif host =~ /^\[[0-9a-f:]*:[0-9a-f:]*\]$/ - addr = host # IPv6 numeric address "[0000:1111::eeee:ffff]" + addrs = host + elsif host =~ /^\[[0-9A-Fa-f:]*:[0-9A-Fa-f:]*:[0-9A-Fa-f:]*\]$/ + # IPv6 numeric address "[0000:1111::eeee:ffff]" + # Note: keep brackets, as those are needed below + addrs = host elsif host =~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ - addr = host # IPv4 numeric address "111.222.333.444" + # IPv4 numeric address "111.222.333.444" + addrs = host elsif host =~ /^\[(.+)\]$/ # Hostname within brackets "[www.example.com]", not to be resolved - host = addr = $1 + addrs = host = $1 else - addr = scope.function_resolve_ipnets([host, 'failerrors']) + addrs = scope.function_resolve_ipnets([host, 'failerrors']) end if port == nil if schema == 'http' @@ -29,8 +32,14 @@ raise(Puppet::Error, "Unknown URL schema and no port: #{u}") end end - listen_on << addr + ':' + port + ' ' + schema - } + [addrs].flatten.each do |a| + if a =~ /^[0-9A-Fa-f:]*:[0-9A-Fa-f:]*:[0-9A-Fa-f:]*$/ + # IPv6 addresses need to be enclosed within square brackets + a = '[' + a + ']' + end + listen_on << a + ':' + port + ' ' + schema + end + end listen_on.sort!.uniq! -%> <% listen_on.each do |listen_spec| -%> diff --git a/templates/named_vhost.conf.erb b/templates/named_vhost.conf.erb index add9d1283ffd8ce4907e15715068a5d2e4027f19..bf297900bc6cd84cd60c237c3ef87e7f5bde565a 100644 --- a/templates/named_vhost.conf.erb +++ b/templates/named_vhost.conf.erb @@ -1,23 +1,26 @@ <% server_names = [] server_addrs = [] - [@urls].flatten.sort.each { |u| + [@urls].flatten.sort.each do |u| u =~ /^([a-z]*):\/\/([^:\/]+|\[[^\[\]]+\])(:([0-9]+))?\/?$/ (schema,host,port) = $1,$2,$4 if host == '' host = @name end if host == '*' - addr = host - elsif host =~ /^\[[0-9a-f:]*:[0-9a-f:]*\]$/ - addr = host # IPv6 numeric address "[0000:1111::eeee:ffff]" + addrs = host + elsif host =~ /^\[[0-9A-Fa-f:]*:[0-9A-Fa-f:]*:[0-9A-Fa-f:]*\]$/ + # IPv6 numeric address "[0000:1111::eeee:ffff]" + # Note: keep brackets, as those are needed below + addrs = host elsif host =~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ - addr = host # IPv4 numeric address "111.222.333.444" + # IPv4 numeric address "111.222.333.444" + addrs = host elsif host =~ /^\[(.+)\]$/ # Hostname within brackets "[www.example.com]", not to be resolved - host = addr = $1 + addrs = host = $1 else - addr = scope.function_resolve_ipnets([host, 'failerrors']) + addrs = scope.function_resolve_ipnets([host, 'failerrors']) end if port == nil if schema == 'http' @@ -31,8 +34,14 @@ end end server_names << host + ':' + port - server_addrs << addr + ':' + port - } + [addrs].flatten.each do |a| + if a =~ /^[0-9A-Fa-f:]*:[0-9A-Fa-f:]*:[0-9A-Fa-f:]*$/ + # IPv6 addresses need to be enclosed within square brackets + a = '[' + a + ']' + end + server_addrs << a + ':' + port + end + end if @servernames != [] server_names = @servernames end