Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-certbot-apache for 
openSUSE:Factory checked in at 2021-12-21 20:42:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-certbot-apache (Old)
 and      /work/SRC/openSUSE:Factory/.python-certbot-apache.new.2520 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-certbot-apache"

Tue Dec 21 20:42:17 2021 rev:32 rq:941933 version:1.22.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-certbot-apache/python-certbot-apache.changes  
    2021-12-21 18:41:35.257925328 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-certbot-apache.new.2520/python-certbot-apache.changes
    2021-12-21 20:42:18.038012694 +0100
@@ -1,0 +2,6 @@
+Tue Dec 21 18:31:04 UTC 2021 - Danilo Spinella <danilo.spine...@suse.com>
+
+- Update to version 1.22.0
+  * sync with the main certbot package
+
+-------------------------------------------------------------------

Old:
----
  certbot-apache-1.20.0.tar.gz

New:
----
  certbot-apache-1.22.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-certbot-apache.spec ++++++
--- /var/tmp/diff_new_pack.vTbZot/_old  2021-12-21 20:42:18.658013031 +0100
+++ /var/tmp/diff_new_pack.vTbZot/_new  2021-12-21 20:42:18.662013033 +0100
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-certbot-apache
-Version:        1.20.0
+Version:        1.22.0
 Release:        0
 Summary:        Apache plugin for Certbot
 License:        Apache-2.0

++++++ certbot-apache-1.20.0.tar.gz -> certbot-apache-1.22.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/certbot-apache-1.20.0/PKG-INFO 
new/certbot-apache-1.22.0/PKG-INFO
--- old/certbot-apache-1.20.0/PKG-INFO  2021-10-05 15:53:05.602080600 +0200
+++ new/certbot-apache-1.22.0/PKG-INFO  2021-12-07 23:02:53.898576000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: certbot-apache
-Version: 1.20.0
+Version: 1.22.0
 Summary: Apache plugin for Certbot
 Home-page: https://github.com/letsencrypt/letsencrypt
 Author: Certbot Project
@@ -18,6 +18,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Internet :: WWW/HTTP
 Classifier: Topic :: Security
 Classifier: Topic :: System :: Installation/Setup
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/apache_util.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/apache_util.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/apache_util.py   
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/apache_util.py   
2021-12-07 23:02:45.000000000 +0100
@@ -242,6 +242,7 @@
 
     return stdout
 
+
 def find_ssl_apache_conf(prefix):
     """
     Find a TLS Apache config file in the dedicated storage.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/assertions.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/assertions.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/assertions.py    
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/assertions.py    
2021-12-07 23:02:45.000000000 +0100
@@ -29,6 +29,7 @@
         # (but identical) directory structures.
         assert first.filepath == second.filepath
 
+
 def assertEqualComment(first, second): # pragma: no cover
     """ Equality assertion for CommentNode """
 
@@ -38,6 +39,7 @@
     if not isPass(first.comment) and not isPass(second.comment):  # type: 
ignore
         assert first.comment == second.comment  # type: ignore
 
+
 def _assertEqualDirectiveComponents(first, second): # pragma: no cover
     """ Handles assertion for instance variables for DirectiveNode and 
BlockNode"""
 
@@ -50,6 +52,7 @@
     if not isPass(first.parameters) and not isPass(second.parameters):
         assert first.parameters == second.parameters
 
+
 def assertEqualDirective(first, second):
     """ Equality assertion for DirectiveNode """
 
@@ -57,12 +60,14 @@
     assert isinstance(second, interfaces.DirectiveNode)
     _assertEqualDirectiveComponents(first, second)
 
+
 def isPass(value): # pragma: no cover
     """Checks if the value is set to PASS"""
     if isinstance(value, bool):
         return True
     return PASS in value
 
+
 def isPassDirective(block):
     """ Checks if BlockNode or DirectiveNode should pass the assertion """
 
@@ -74,6 +79,7 @@
         return True
     return False
 
+
 def isPassComment(comment):
     """ Checks if CommentNode should pass the assertion """
 
@@ -83,6 +89,7 @@
         return True
     return False
 
+
 def isPassNodeList(nodelist): # pragma: no cover
     """ Checks if a ParserNode in the nodelist should pass the assertion,
     this function is used for results of find_* methods. Unimplemented find_*
@@ -101,11 +108,13 @@
         return isPassDirective(node)
     return isPassComment(node)
 
+
 def assertEqualSimple(first, second):
     """ Simple assertion """
     if not isPass(first) and not isPass(second):
         assert first == second
 
+
 def isEqualVirtualHost(first, second):
     """
     Checks that two VirtualHost objects are similar. There are some built
@@ -126,6 +135,7 @@
         first.ancestor == second.ancestor
     )
 
+
 def assertEqualPathsList(first, second):  # pragma: no cover
     """
     Checks that the two lists of file paths match. This assertion allows for 
wildcard
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/augeasparser.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/augeasparser.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/augeasparser.py  
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/augeasparser.py  
2021-12-07 23:02:45.000000000 +0100
@@ -160,8 +160,7 @@
 
         # remove [...], it's not allowed in Apache configuration and is used
         # for indexing within Augeas
-        name = name.split("[")[0]
-        return name
+        return name.split("[")[0]
 
 
 class AugeasCommentNode(AugeasParserNode):
@@ -170,7 +169,6 @@
     def __init__(self, **kwargs):
         comment, kwargs = util.commentnode_kwargs(kwargs)  # pylint: 
disable=unused-variable
         super().__init__(**kwargs)
-        # self.comment = comment
         self.comment = comment
 
     def __eq__(self, other):
@@ -278,13 +276,14 @@
         )
 
         # Parameters will be set at the initialization of the new object
-        new_block = AugeasBlockNode(name=name,
-                                    parameters=parameters,
-                                    enabled=enabled,
-                                    ancestor=assertions.PASS,
-                                    
filepath=apache_util.get_file_path(realpath),
-                                    metadata=new_metadata)
-        return new_block
+        return AugeasBlockNode(
+            name=name,
+            parameters=parameters,
+            enabled=enabled,
+            ancestor=assertions.PASS,
+            filepath=apache_util.get_file_path(realpath),
+            metadata=new_metadata,
+        )
 
     # pylint: disable=unused-argument
     def add_child_directive(self, name, parameters=None, position=None):  # 
pragma: no cover
@@ -308,13 +307,14 @@
             apache_util.get_file_path(realpath)
         )
 
-        new_dir = AugeasDirectiveNode(name=name,
-                                      parameters=parameters,
-                                      enabled=enabled,
-                                      ancestor=assertions.PASS,
-                                      
filepath=apache_util.get_file_path(realpath),
-                                      metadata=new_metadata)
-        return new_dir
+        return AugeasDirectiveNode(
+            name=name,
+            parameters=parameters,
+            enabled=enabled,
+            ancestor=assertions.PASS,
+            filepath=apache_util.get_file_path(realpath),
+            metadata=new_metadata,
+        )
 
     def add_child_comment(self, comment="", position=None):
         """Adds a new CommentNode to the sequence of children"""
@@ -330,11 +330,12 @@
         # Set the comment content
         self.parser.aug.set(realpath, comment)
 
-        new_comment = AugeasCommentNode(comment=comment,
-                                        ancestor=assertions.PASS,
-                                        
filepath=apache_util.get_file_path(realpath),
-                                        metadata=new_metadata)
-        return new_comment
+        return AugeasCommentNode(
+            comment=comment,
+            ancestor=assertions.PASS,
+            filepath=apache_util.get_file_path(realpath),
+            metadata=new_metadata,
+        )
 
     def find_blocks(self, name, exclude=True):
         """Recursive search of BlockNodes from the sequence of children"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/configurator.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/configurator.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/configurator.py  
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/configurator.py  
2021-12-07 23:02:45.000000000 +0100
@@ -2,7 +2,6 @@
 # pylint: disable=too-many-lines
 from collections import defaultdict
 import copy
-from distutils.version import LooseVersion
 import fnmatch
 import logging
 import re
@@ -17,9 +16,8 @@
 
 from acme import challenges
 from certbot import errors
-from certbot import interfaces
 from certbot import util
-from certbot.achallenges import KeyAuthorizationAnnotatedChallenge  # pylint: 
disable=unused-import
+from certbot.achallenges import KeyAuthorizationAnnotatedChallenge
 from certbot.compat import filesystem
 from certbot.compat import os
 from certbot.display import util as display_util
@@ -117,7 +115,7 @@
 # TODO: Add directives to sites-enabled... not sites-available.
 #     sites-available doesn't allow immediate find_dir search even with save()
 #     and load()
-class ApacheConfigurator(common.Installer, interfaces.Authenticator):
+class ApacheConfigurator(common.Configurator):
     """Apache configurator.
 
     :ivar config: Configuration.
@@ -154,9 +152,10 @@
         """
         # Disabling TLS session tickets is supported by Apache 2.4.11+ and 
OpenSSL 1.0.2l+.
         # So for old versions of Apache we pick a configuration without this 
option.
+        min_openssl_version = util.parse_loose_version('1.0.2l')
         openssl_version = self.openssl_version(warn_on_no_mod_ssl)
         if self.version < (2, 4, 11) or not openssl_version or\
-            LooseVersion(openssl_version) < LooseVersion('1.0.2l'):
+            util.parse_loose_version(openssl_version) < min_openssl_version:
             return apache_util.find_ssl_apache_conf("old")
         return apache_util.find_ssl_apache_conf("current")
 
@@ -486,7 +485,7 @@
             name=assertions.PASS,
             ancestor=None,
             filepath=self.parser.loc["root"],
-            metadata=metadata
+            metadata=metadata,
         )
 
     def deploy_cert(self, domain, cert_path, key_path,
@@ -2437,10 +2436,9 @@
         except errors.SubprocessError as err:
             logger.warning("Unable to restart apache using %s",
                         self.options.restart_cmd)
-            alt_restart = self.options.restart_cmd_alt
-            if alt_restart:
+            if self.options.restart_cmd_alt:
                 logger.debug("Trying alternative restart command: %s",
-                             alt_restart)
+                             self.options.restart_cmd_alt)
                 # There is an alternative restart command available
                 # This usually is "restart" verb while original is "graceful"
                 try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/display_ops.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/display_ops.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/display_ops.py   
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/display_ops.py   
2021-12-07 23:02:45.000000000 +0100
@@ -103,7 +103,7 @@
                 https="HTTPS" if vhost.ssl else "",
                 active="Enabled" if vhost.enabled else "",
                 fn_size=filename_size,
-                name_size=disp_name_size)
+                name_size=disp_name_size),
         )
 
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/dualparser.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/dualparser.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/dualparser.py    
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/dualparser.py    
2021-12-07 23:02:45.000000000 +0100
@@ -185,8 +185,7 @@
         primary_new = self.primary.add_child_block(name, parameters, position)
         secondary_new = self.secondary.add_child_block(name, parameters, 
position)
         assertions.assertEqual(primary_new, secondary_new)
-        new_block = DualBlockNode(primary=primary_new, secondary=secondary_new)
-        return new_block
+        return DualBlockNode(primary=primary_new, secondary=secondary_new)
 
     def add_child_directive(self, name, parameters=None, position=None):
         """ Creates a new child DirectiveNode, asserts that both 
implementations
@@ -196,8 +195,7 @@
         primary_new = self.primary.add_child_directive(name, parameters, 
position)
         secondary_new = self.secondary.add_child_directive(name, parameters, 
position)
         assertions.assertEqual(primary_new, secondary_new)
-        new_dir = DualDirectiveNode(primary=primary_new, 
secondary=secondary_new)
-        return new_dir
+        return DualDirectiveNode(primary=primary_new, secondary=secondary_new)
 
     def add_child_comment(self, comment="", position=None):
         """ Creates a new child CommentNode, asserts that both implementations
@@ -207,8 +205,7 @@
         primary_new = self.primary.add_child_comment(comment, position)
         secondary_new = self.secondary.add_child_comment(comment, position)
         assertions.assertEqual(primary_new, secondary_new)
-        new_comment = DualCommentNode(primary=primary_new, 
secondary=secondary_new)
-        return new_comment
+        return DualCommentNode(primary=primary_new, secondary=secondary_new)
 
     def _create_matching_list(self, primary_list, secondary_list):
         """ Matches the list of primary_list to a list of secondary_list and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/entrypoint.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/entrypoint.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/entrypoint.py    
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/entrypoint.py    
2021-12-07 23:02:45.000000000 +0100
@@ -1,6 +1,4 @@
 """ Entry point for Apache Plugin """
-from distutils.version import LooseVersion
-
 from certbot import util
 from certbot_apache._internal import configurator
 from certbot_apache._internal import override_arch
@@ -47,7 +45,8 @@
     override_class = None
 
     # Special case for older Fedora versions
-    if os_name == 'fedora' and LooseVersion(os_version) < LooseVersion('29'):
+    min_version = util.parse_loose_version('29')
+    if os_name == 'fedora' and util.parse_loose_version(os_version) < 
min_version:
         os_name = 'fedora_old'
 
     try:
@@ -57,8 +56,7 @@
         os_like = util.get_systemd_os_like()
         if os_like:
             for os_name in os_like:
-                if os_name in OVERRIDE_CLASSES.keys():
-                    override_class = OVERRIDE_CLASSES[os_name]
+                override_class = OVERRIDE_CLASSES.get(os_name)
         if not override_class:
             # No override class found, return the generic configurator
             override_class = configurator.ApacheConfigurator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/http_01.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/http_01.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/http_01.py       
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/http_01.py       
2021-12-07 23:02:45.000000000 +0100
@@ -3,6 +3,7 @@
 import logging
 from typing import List
 from typing import Set
+from typing import TYPE_CHECKING
 
 from certbot import errors
 from certbot.compat import filesystem
@@ -11,6 +12,9 @@
 from certbot_apache._internal.obj import VirtualHost  # pylint: 
disable=unused-import
 from certbot_apache._internal.parser import get_aug_path
 
+if TYPE_CHECKING:
+    from certbot_apache._internal.configurator import ApacheConfigurator  # 
pragma: no cover
+
 logger = logging.getLogger(__name__)
 
 
@@ -46,8 +50,9 @@
         </Location>
     """
 
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
+    def __init__(self, configurator: "ApacheConfigurator") -> None:
+        super().__init__(configurator)
+        self.configurator: "ApacheConfigurator"
         self.challenge_conf_pre = os.path.join(
             self.configurator.conf("challenge-location"),
             "le_http_01_challenge_pre.conf")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/obj.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/obj.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/obj.py   2021-10-05 
15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/obj.py   2021-12-07 
23:02:45.000000000 +0100
@@ -176,7 +176,6 @@
                 names=", ".join(self.get_names()),
                 https="Yes" if self.ssl else "No"))
 
-
     def __eq__(self, other):
         if isinstance(other, self.__class__):
             return (self.filep == other.filep and self.path == other.path and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/override_debian.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/override_debian.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/override_debian.py       
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/override_debian.py       
2021-12-07 23:02:45.000000000 +0100
@@ -118,7 +118,8 @@
         # Generate reversal command.
         # Try to be safe here... check that we can probably reverse before
         # applying enmod command
-        if not util.exe_exists(self.options.dismod):
+        if (self.options.dismod is None or self.options.enmod is None
+                or not util.exe_exists(self.options.dismod)):
             raise errors.MisconfigurationError(
                 "Unable to find a2dismod, please make sure a2enmod and "
                 "a2dismod are configured correctly for certbot.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache/_internal/parser.py 
new/certbot-apache-1.22.0/certbot_apache/_internal/parser.py
--- old/certbot-apache-1.20.0/certbot_apache/_internal/parser.py        
2021-10-05 15:52:55.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache/_internal/parser.py        
2021-12-07 23:02:45.000000000 +0100
@@ -15,7 +15,7 @@
 try:
     from augeas import Augeas
 except ImportError:  # pragma: no cover
-    Augeas = None  # type: ignore
+    Augeas = None
 
 logger = logging.getLogger(__name__)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache.egg-info/PKG-INFO 
new/certbot-apache-1.22.0/certbot_apache.egg-info/PKG-INFO
--- old/certbot-apache-1.20.0/certbot_apache.egg-info/PKG-INFO  2021-10-05 
15:53:05.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache.egg-info/PKG-INFO  2021-12-07 
23:02:53.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: certbot-apache
-Version: 1.20.0
+Version: 1.22.0
 Summary: Apache plugin for Certbot
 Home-page: https://github.com/letsencrypt/letsencrypt
 Author: Certbot Project
@@ -18,6 +18,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Internet :: WWW/HTTP
 Classifier: Topic :: Security
 Classifier: Topic :: System :: Installation/Setup
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/certbot-apache-1.20.0/certbot_apache.egg-info/requires.txt 
new/certbot-apache-1.22.0/certbot_apache.egg-info/requires.txt
--- old/certbot-apache-1.20.0/certbot_apache.egg-info/requires.txt      
2021-10-05 15:53:05.000000000 +0200
+++ new/certbot-apache-1.22.0/certbot_apache.egg-info/requires.txt      
2021-12-07 23:02:53.000000000 +0100
@@ -1,5 +1,5 @@
-acme>=1.20.0
-certbot>=1.20.0
+acme>=1.22.0
+certbot>=1.22.0
 python-augeas
 setuptools>=39.0.1
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/certbot-apache-1.20.0/setup.py 
new/certbot-apache-1.22.0/setup.py
--- old/certbot-apache-1.20.0/setup.py  2021-10-05 15:52:56.000000000 +0200
+++ new/certbot-apache-1.22.0/setup.py  2021-12-07 23:02:46.000000000 +0100
@@ -1,7 +1,7 @@
 from setuptools import find_packages
 from setuptools import setup
 
-version = '1.20.0'
+version = '1.22.0'
 
 install_requires = [
     # We specify the minimum acme and certbot version as the current plugin
@@ -38,6 +38,7 @@
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
+        'Programming Language :: Python :: 3.10',
         'Topic :: Internet :: WWW/HTTP',
         'Topic :: Security',
         'Topic :: System :: Installation/Setup',

Reply via email to