mirror of
https://github.com/certbot/certbot.git
synced 2026-07-28 08:45:22 +02:00
Ignoring mod_macro virtualhosts, but displaying a notification why it's done
This commit is contained in:
committed by
Joona Hoikkala
parent
c8efa0acb8
commit
9f8ab4677e
@@ -348,8 +348,12 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator):
|
||||
"""
|
||||
all_names = set()
|
||||
|
||||
vhost_macro = []
|
||||
|
||||
for vhost in self.vhosts:
|
||||
all_names.update(vhost.get_names())
|
||||
if vhost.modmacro:
|
||||
vhost_macro.append(vhost.filep)
|
||||
|
||||
for addr in vhost.addrs:
|
||||
if common.hostname_regex.match(addr.get_addr()):
|
||||
@@ -359,6 +363,12 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator):
|
||||
if name:
|
||||
all_names.add(name)
|
||||
|
||||
if len(vhost_macro) > 0:
|
||||
zope.component.getUtility(interfaces.IDisplay).notification(
|
||||
"Apache mod_macro seems to be in use in file(s):\n{0}"
|
||||
"\n\nUnfortunately mod_macro is not yet supported".format(
|
||||
"\n ".join(vhost_macro)))
|
||||
|
||||
return all_names
|
||||
|
||||
def get_name_from_ip(self, addr): # pylint: disable=no-self-use
|
||||
@@ -395,11 +405,34 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator):
|
||||
"ServerAlias", None, start=host.path, exclude=False)
|
||||
|
||||
for alias in serveralias_match:
|
||||
host.aliases.add(self.parser.get_arg(alias))
|
||||
serveralias = self.parser.get_arg(alias)
|
||||
if not self._is_mod_macro(serveralias):
|
||||
host.aliases.add(serveralias)
|
||||
else:
|
||||
host.modmacro = True
|
||||
|
||||
if servername_match:
|
||||
# Get last ServerName as each overwrites the previous
|
||||
host.name = self.parser.get_arg(servername_match[-1])
|
||||
servername = self.parser.get_arg(servername_match[-1])
|
||||
if not self._is_mod_macro(servername):
|
||||
host.name = servername
|
||||
else:
|
||||
host.modmacro = True
|
||||
|
||||
def _is_mod_macro(self, name):
|
||||
"""Helper function for _add_servernames().
|
||||
Checks if the ServerName / ServerAlias belongs to a macro
|
||||
|
||||
:param str name: Name to check and filter out if it's a variable
|
||||
|
||||
:returns: boolean
|
||||
:rtype: boolean
|
||||
|
||||
"""
|
||||
|
||||
if "$" in name:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _create_vhost(self, path):
|
||||
"""Used by get_virtual_hosts to create vhost objects
|
||||
@@ -1236,7 +1269,7 @@ def get_file_path(vhost_path):
|
||||
avail_fp = vhost_path[6:]
|
||||
# This can be optimized...
|
||||
while True:
|
||||
# Cast both to lowercase to be case insensitive
|
||||
# Cast all to lowercase to be case insensitive
|
||||
find_if = avail_fp.lower().find("/ifmodule")
|
||||
if find_if != -1:
|
||||
avail_fp = avail_fp[:find_if]
|
||||
@@ -1245,6 +1278,10 @@ def get_file_path(vhost_path):
|
||||
if find_vh != -1:
|
||||
avail_fp = avail_fp[:find_vh]
|
||||
continue
|
||||
find_macro = avail_fp.lower().find("/macro")
|
||||
if find_macro != -1:
|
||||
avail_fp = avail_fp[:find_macro]
|
||||
continue
|
||||
break
|
||||
return avail_fp
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ class VirtualHost(object): # pylint: disable=too-few-public-methods
|
||||
|
||||
:ivar bool ssl: SSLEngine on in vhost
|
||||
:ivar bool enabled: Virtual host is enabled
|
||||
:ivar bool modmacro: VirtualHost is using mod_macro
|
||||
|
||||
https://httpd.apache.org/docs/2.4/vhosts/details.html
|
||||
|
||||
@@ -112,7 +113,9 @@ class VirtualHost(object): # pylint: disable=too-few-public-methods
|
||||
# ?: is used for not returning enclosed characters
|
||||
strip_name = re.compile(r"^(?:.+://)?([^ :$]*)")
|
||||
|
||||
def __init__(self, filep, path, addrs, ssl, enabled, name=None, aliases=None):
|
||||
def __init__(self, filep, path, addrs, ssl, enabled, modmacro=False,
|
||||
name=None, aliases=None):
|
||||
|
||||
# pylint: disable=too-many-arguments
|
||||
"""Initialize a VH."""
|
||||
self.filep = filep
|
||||
@@ -122,6 +125,7 @@ class VirtualHost(object): # pylint: disable=too-few-public-methods
|
||||
self.aliases = aliases if aliases is not None else set()
|
||||
self.ssl = ssl
|
||||
self.enabled = enabled
|
||||
self.modmacro = modmacro
|
||||
|
||||
def get_names(self):
|
||||
"""Return a set of all names."""
|
||||
|
||||
Reference in New Issue
Block a user