def _find_duplicative_certs(config, domains): """Find existing certs that duplicate the request.""" identical_names_cert, subset_names_cert = None, None cli_config = configuration.RenewerConfiguration(config) configs_dir = cli_config.renewal_configs_dir # Verify the directory is there le_util.make_or_verify_dir(configs_dir, mode=0o755, uid=os.geteuid()) for renewal_file in renewal.renewal_conf_files(cli_config): try: candidate_lineage = storage.RenewableCert(renewal_file, cli_config) except (errors.CertStorageError, IOError): logger.warning("Renewal conf file %s is broken. Skipping.", renewal_file) logger.debug("Traceback was:\n%s", traceback.format_exc()) continue # TODO: Handle these differently depending on whether they are # expired or still valid? candidate_names = set(candidate_lineage.names()) if candidate_names == set(domains): identical_names_cert = candidate_lineage elif candidate_names.issubset(set(domains)): # This logic finds and returns the largest subset-names cert # in the case where there are several available. if subset_names_cert is None: subset_names_cert = candidate_lineage elif len(candidate_names) > len(subset_names_cert.names()): subset_names_cert = candidate_lineage return identical_names_cert, subset_names_cert
def _find_duplicative_certs(config, domains): """Find existing certs that duplicate the request.""" identical_names_cert, subset_names_cert = None, None cli_config = configuration.RenewerConfiguration(config) configs_dir = cli_config.renewal_configs_dir # Verify the directory is there util.make_or_verify_dir(configs_dir, mode=0o755, uid=os.geteuid()) for renewal_file in renewal.renewal_conf_files(cli_config): try: candidate_lineage = storage.RenewableCert(renewal_file, cli_config) except (errors.CertStorageError, IOError): logger.warning("Renewal conf file %s is broken. Skipping.", renewal_file) logger.debug("Traceback was:\n%s", traceback.format_exc()) continue # TODO: Handle these differently depending on whether they are # expired or still valid? candidate_names = set(candidate_lineage.names()) if candidate_names == set(domains): identical_names_cert = candidate_lineage elif candidate_names.issubset(set(domains)): # This logic finds and returns the largest subset-names cert # in the case where there are several available. if subset_names_cert is None: subset_names_cert = candidate_lineage elif len(candidate_names) > len(subset_names_cert.names()): subset_names_cert = candidate_lineage return identical_names_cert, subset_names_cert
def update_live_symlinks(config): """Update the certificate file family symlinks to use archive_dir. Use the information in the config file to make symlinks point to the correct archive directory. .. note:: This assumes that the installation is using a Reverter object. :param config: Configuration. :type config: :class:`certbot.interfaces.IConfig` """ renewer_config = configuration.RenewerConfiguration(config) for renewal_file in renewal.renewal_conf_files(renewer_config): storage.RenewableCert(renewal_file, configuration.RenewerConfiguration(renewer_config), update_symlinks=True)
def rename_lineage(config): """Rename the specified lineage to the new name. :param config: Configuration. :type config: :class:`certbot.interfaces.IConfig` """ disp = zope.component.getUtility(interfaces.IDisplay) renewer_config = configuration.RenewerConfiguration(config) certname = config.certname if not certname: filenames = renewal.renewal_conf_files(renewer_config) choices = [ storage.lineagename_for_filename(name) for name in filenames ] if not choices: raise errors.Error("No existing certificates found.") code, index = disp.menu("Which certificate would you like to rename?", choices, ok_label="Select", flag="--cert-name") if code != display_util.OK or not index in range(0, len(choices)): raise errors.Error("User ended interaction.") certname = choices[index] new_certname = config.new_certname if not new_certname: code, new_certname = disp.input( "Enter the new name for certificate {0}".format(certname), flag="--updated-cert-name") if code != display_util.OK or not new_certname: raise errors.Error("User ended interaction.") lineage = lineage_for_certname(config, certname) if not lineage: raise errors.ConfigurationError("No existing certificate with name " "{0} found.".format(certname)) storage.rename_renewal_config(certname, new_certname, renewer_config) disp.notification("Successfully renamed {0} to {1}.".format( certname, new_certname), pause=False)
def _search_lineages(config, func, initial_rv): """Iterate func over unbroken lineages, allowing custom return conditions. Allows flexible customization of return values, including multiple return values and complex checks. """ cli_config = configuration.RenewerConfiguration(config) configs_dir = cli_config.renewal_configs_dir # Verify the directory is there util.make_or_verify_dir(configs_dir, mode=0o755, uid=os.geteuid()) rv = initial_rv for renewal_file in renewal.renewal_conf_files(cli_config): try: candidate_lineage = storage.RenewableCert(renewal_file, cli_config) except (errors.CertStorageError, IOError): logger.debug("Renewal conf file %s is broken. Skipping.", renewal_file) logger.debug("Traceback was:\n%s", traceback.format_exc()) continue rv = func(candidate_lineage, rv) return rv
def certificates(config): """Display information about certs configured with Certbot :param config: Configuration. :type config: :class:`certbot.interfaces.IConfig` """ renewer_config = configuration.RenewerConfiguration(config) parsed_certs = [] parse_failures = [] for renewal_file in renewal.renewal_conf_files(renewer_config): try: renewal_candidate = storage.RenewableCert(renewal_file, configuration.RenewerConfiguration(config)) parsed_certs.append(renewal_candidate) except Exception as e: # pylint: disable=broad-except logger.warning("Renewal configuration file %s produced an " "unexpected error: %s. Skipping.", renewal_file, e) logger.debug("Traceback was:\n%s", traceback.format_exc()) parse_failures.append(renewal_file) # Describe all the certs _describe_certs(parsed_certs, parse_failures)
def certificates(config): """Display information about certs configured with Certbot :param config: Configuration. :type config: :class:`certbot.interfaces.IConfig` """ renewer_config = configuration.RenewerConfiguration(config) parsed_certs = [] parse_failures = [] for renewal_file in renewal.renewal_conf_files(renewer_config): try: renewal_candidate = storage.RenewableCert( renewal_file, configuration.RenewerConfiguration(config)) parsed_certs.append(renewal_candidate) except Exception as e: # pylint: disable=broad-except logger.warning( "Renewal configuration file %s produced an " "unexpected error: %s. Skipping.", renewal_file, e) logger.debug("Traceback was:\n%s", traceback.format_exc()) parse_failures.append(renewal_file) # Describe all the certs _describe_certs(parsed_certs, parse_failures)
def rename_lineage(config): """Rename the specified lineage to the new name. :param config: Configuration. :type config: :class:`certbot.interfaces.IConfig` """ disp = zope.component.getUtility(interfaces.IDisplay) renewer_config = configuration.RenewerConfiguration(config) certname = config.certname if not certname: filenames = renewal.renewal_conf_files(renewer_config) choices = [storage.lineagename_for_filename(name) for name in filenames] if not choices: raise errors.Error("No existing certificates found.") code, index = disp.menu("Which certificate would you like to rename?", choices, ok_label="Select", flag="--cert-name") if code != display_util.OK or not index in range(0, len(choices)): raise errors.Error("User ended interaction.") certname = choices[index] new_certname = config.new_certname if not new_certname: code, new_certname = disp.input("Enter the new name for certificate {0}" .format(certname), flag="--updated-cert-name") if code != display_util.OK or not new_certname: raise errors.Error("User ended interaction.") lineage = lineage_for_certname(config, certname) if not lineage: raise errors.ConfigurationError("No existing certificate with name " "{0} found.".format(certname)) storage.rename_renewal_config(certname, new_certname, renewer_config) disp.notification("Successfully renamed {0} to {1}." .format(certname, new_certname), pause=False)