diff options
-rw-r--r-- | Bugzilla/Config/Common.pm | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Bugzilla/Config/Common.pm b/Bugzilla/Config/Common.pm index f5f5a3fb2..e6f0398e3 100644 --- a/Bugzilla/Config/Common.pm +++ b/Bugzilla/Config/Common.pm @@ -101,17 +101,21 @@ sub check_sslbase { return "must be a legal URL, that starts with https and ends with a slash."; } my $host = $1; - if ($host =~ /:\d+$/) { - return "must not contain a port."; + # Fall back to port 443 if for some reason getservbyname() fails. + my $port = getservbyname('https', 'tcp') || 443; + if ($host =~ /^(.+):(\d+)$/) { + $host = $1; + $port = $2; } local *SOCK; my $proto = getprotobyname('tcp'); socket(SOCK, PF_INET, SOCK_STREAM, $proto); - my $sin = sockaddr_in(443, inet_aton($host)); + my $iaddr = inet_aton($host) || return "The host $host cannot be resolved"; + my $sin = sockaddr_in($port, $iaddr); if (!connect(SOCK, $sin)) { - return "Failed to connect to " . html_quote($host) . - ":443, unable to enable SSL."; + return "Failed to connect to $host:$port; unable to enable SSL"; } + close(SOCK); } return ""; } |