mirror of
https://github.com/certbot/certbot.git
synced 2026-07-31 18:34:41 +02:00
Use UTF-8 for renewal configuration file encoding (#8789)
This commit is contained in:
@@ -46,6 +46,7 @@ More details about these changes can be found on our GitHub repo.
|
|||||||
* The module `acme.magic_typing` is deprecated and will be removed in a future release.
|
* The module `acme.magic_typing` is deprecated and will be removed in a future release.
|
||||||
Please use the built-in module `typing` instead.
|
Please use the built-in module `typing` instead.
|
||||||
* The DigitalOcean plugin now creates TXT records for the DNS-01 challenge with a lower 30s TTL.
|
* The DigitalOcean plugin now creates TXT records for the DNS-01 challenge with a lower 30s TTL.
|
||||||
|
* Use UTF-8 encoding for renewal configuration files
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|||||||
@@ -616,7 +616,9 @@ def _delete_if_appropriate(config):
|
|||||||
|
|
||||||
# don't delete if the archive_dir is used by some other lineage
|
# don't delete if the archive_dir is used by some other lineage
|
||||||
archive_dir = storage.full_archive_path(
|
archive_dir = storage.full_archive_path(
|
||||||
configobj.ConfigObj(storage.renewal_file_for_certname(config, config.certname)),
|
configobj.ConfigObj(
|
||||||
|
storage.renewal_file_for_certname(config, config.certname),
|
||||||
|
encoding='utf-8', default_encoding='utf-8'),
|
||||||
config, config.certname)
|
config, config.certname)
|
||||||
try:
|
try:
|
||||||
cert_manager.match_and_check_overlaps(config, [lambda x: archive_dir],
|
cert_manager.match_and_check_overlaps(config, [lambda x: archive_dir],
|
||||||
|
|||||||
@@ -67,13 +67,16 @@ def cert_path_for_cert_name(config: interfaces.IConfig, cert_name: str) -> str:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
cert_name_implied_conf = renewal_file_for_certname(config, cert_name)
|
cert_name_implied_conf = renewal_file_for_certname(config, cert_name)
|
||||||
return configobj.ConfigObj(cert_name_implied_conf)["fullchain"]
|
return configobj.ConfigObj(
|
||||||
|
cert_name_implied_conf, encoding='utf-8', default_encoding='utf-8')["fullchain"]
|
||||||
|
|
||||||
|
|
||||||
def config_with_defaults(config=None):
|
def config_with_defaults(config=None):
|
||||||
"""Merge supplied config, if provided, on top of builtin defaults."""
|
"""Merge supplied config, if provided, on top of builtin defaults."""
|
||||||
defaults_copy = configobj.ConfigObj(constants.RENEWER_DEFAULTS)
|
defaults_copy = configobj.ConfigObj(
|
||||||
defaults_copy.merge(config if config is not None else configobj.ConfigObj())
|
constants.RENEWER_DEFAULTS, encoding='utf-8', default_encoding='utf-8')
|
||||||
|
defaults_copy.merge(config if config is not None else configobj.ConfigObj(
|
||||||
|
encoding='utf-8', default_encoding='utf-8'))
|
||||||
return defaults_copy
|
return defaults_copy
|
||||||
|
|
||||||
|
|
||||||
@@ -114,7 +117,7 @@ def write_renewal_config(o_filename, n_filename, archive_dir, target, relevant_d
|
|||||||
:rtype: configobj.ConfigObj
|
:rtype: configobj.ConfigObj
|
||||||
|
|
||||||
"""
|
"""
|
||||||
config = configobj.ConfigObj(o_filename)
|
config = configobj.ConfigObj(o_filename, encoding='utf-8', default_encoding='utf-8')
|
||||||
config["version"] = certbot.__version__
|
config["version"] = certbot.__version__
|
||||||
config["archive_dir"] = archive_dir
|
config["archive_dir"] = archive_dir
|
||||||
for kind in ALL_FOUR:
|
for kind in ALL_FOUR:
|
||||||
@@ -196,7 +199,7 @@ def update_configuration(lineagename, archive_dir, target, cli_config):
|
|||||||
write_renewal_config(config_filename, temp_filename, archive_dir, target, values)
|
write_renewal_config(config_filename, temp_filename, archive_dir, target, values)
|
||||||
filesystem.replace(temp_filename, config_filename)
|
filesystem.replace(temp_filename, config_filename)
|
||||||
|
|
||||||
return configobj.ConfigObj(config_filename)
|
return configobj.ConfigObj(config_filename, encoding='utf-8', default_encoding='utf-8')
|
||||||
|
|
||||||
|
|
||||||
def get_link_target(link):
|
def get_link_target(link):
|
||||||
@@ -324,7 +327,8 @@ def delete_files(config, certname):
|
|||||||
full_default_archive_dir = full_archive_path(None, config, certname)
|
full_default_archive_dir = full_archive_path(None, config, certname)
|
||||||
full_default_live_dir = _full_live_path(config, certname)
|
full_default_live_dir = _full_live_path(config, certname)
|
||||||
try:
|
try:
|
||||||
renewal_config = configobj.ConfigObj(renewal_filename)
|
renewal_config = configobj.ConfigObj(
|
||||||
|
renewal_filename, encoding='utf-8', default_encoding='utf-8')
|
||||||
except configobj.ConfigObjError:
|
except configobj.ConfigObjError:
|
||||||
# config is corrupted
|
# config is corrupted
|
||||||
logger.warning("Could not parse %s. You may wish to manually "
|
logger.warning("Could not parse %s. You may wish to manually "
|
||||||
@@ -434,7 +438,8 @@ class RenewableCert(interfaces.RenewableCert):
|
|||||||
# systemwide renewal configuration; self.configfile should be
|
# systemwide renewal configuration; self.configfile should be
|
||||||
# used to make and save changes.
|
# used to make and save changes.
|
||||||
try:
|
try:
|
||||||
self.configfile = configobj.ConfigObj(config_filename)
|
self.configfile = configobj.ConfigObj(
|
||||||
|
config_filename, encoding='utf-8', default_encoding='utf-8')
|
||||||
except configobj.ConfigObjError:
|
except configobj.ConfigObjError:
|
||||||
raise errors.CertStorageError(
|
raise errors.CertStorageError(
|
||||||
"error parsing {0}".format(config_filename))
|
"error parsing {0}".format(config_filename))
|
||||||
|
|||||||
Reference in New Issue
Block a user