bbecb6
From 20ff7c16022793c707f6c2b8fb38a801870bc0e2 Mon Sep 17 00:00:00 2001
bbecb6
From: Rob Crittenden <rcritten@redhat.com>
bbecb6
Date: Wed, 8 Feb 2023 10:42:58 -0500
bbecb6
Subject: [PATCH] Fix setting values of 0 in ACME pruning
bbecb6
bbecb6
Replace comparisons of "if value" with "if value is not None"
bbecb6
in order to handle 0.
bbecb6
bbecb6
Add a short reference to the man page to indicat that a cert
bbecb6
or request retention time of 0 means remove at the next
bbecb6
execution.
bbecb6
bbecb6
Also indicate that the search time limit is in seconds.
bbecb6
bbecb6
Fixes: https://pagure.io/freeipa/issue/9325
bbecb6
bbecb6
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
bbecb6
Reviewed-By: Francisco Trivino <ftrivino@redhat.com>
bbecb6
---
bbecb6
 doc/designs/expired_certificate_pruning.md |  4 ++--
bbecb6
 install/tools/man/ipa-acme-manage.1        |  8 +++----
bbecb6
 ipaserver/install/ipa_acme_manage.py       | 28 +++++++++++-----------
bbecb6
 3 files changed, 20 insertions(+), 20 deletions(-)
bbecb6
bbecb6
diff --git a/doc/designs/expired_certificate_pruning.md b/doc/designs/expired_certificate_pruning.md
bbecb6
index a23e452696ba2a150c4ad5a3e57360ae0a16a338..35ead7b00145b5df44caf542cba277f0e6e08b6a 100644
bbecb6
--- a/doc/designs/expired_certificate_pruning.md
bbecb6
+++ b/doc/designs/expired_certificate_pruning.md
bbecb6
@@ -67,11 +67,11 @@ There are four values each that can be managed for pruning certificates and requ
bbecb6
 * expired cert/incomplete request time
bbecb6
 * time unit
bbecb6
 * LDAP search size limit
bbecb6
-* LDAP search time limit
bbecb6
+* LDAP search time limit (in seconds)
bbecb6
 
bbecb6
 The first two configure when an expired certificate or incomplete request will be deleted. The unit can be one of: minute, hour, day, year. By default it is 30 days.
bbecb6
 
bbecb6
-The LDAP limits control how many entries are returned and how long the search can take. By default it is 1000 entries and unlimited time.
bbecb6
+The LDAP limits control how many entries are returned and how long the search can take. By default it is 1000 entries and unlimited time (0 == unlimited, unit is seconds).
bbecb6
 
bbecb6
 ### Configuration settings
bbecb6
 
bbecb6
diff --git a/install/tools/man/ipa-acme-manage.1 b/install/tools/man/ipa-acme-manage.1
bbecb6
index e6cec4e4a7fd460c514a72456a2dc9a2e3682ebd..b8383c14f482698d2bcc8b08f0c0bf5882c3c298 100644
bbecb6
--- a/install/tools/man/ipa-acme-manage.1
bbecb6
+++ b/install/tools/man/ipa-acme-manage.1
bbecb6
@@ -79,7 +79,7 @@ For example, "0 0 1 * *" schedules the job to run at 12:00am on the first
bbecb6
 day of each month.
bbecb6
 .TP
bbecb6
 \fB\-\-certretention=CERTRETENTION\fR
bbecb6
-Certificate retention time. The default is 30.
bbecb6
+Certificate retention time. The default is 30. A value of 0 will remove expired certificates with no delay.
bbecb6
 .TP
bbecb6
 \fB\-\-certretentionunit=CERTRETENTIONUNIT\fR
bbecb6
 Certificate retention units. Valid units are: minute, hour, day, year.
bbecb6
@@ -89,10 +89,10 @@ The default is days.
bbecb6
 LDAP search size limit searching for expired certificates. The default is 1000. This is a client-side limit. There may be additional server-side limitations.
bbecb6
 .TP
bbecb6
 \fB\-\-certsearchtimelimit=CERTSEARCHTIMELIMIT\fR
bbecb6
-LDAP search time limit searching for expired certificates. The default is 0, no limit. This is a client-side limit. There may be additional server-side limitations.
bbecb6
+LDAP search time limit (seconds) searching for expired certificates. The default is 0, no limit. This is a client-side limit. There may be additional server-side limitations.
bbecb6
 .TP
bbecb6
 \fB\-\-requestretention=REQUESTRETENTION\fR
bbecb6
-Request retention time. The default is 30.
bbecb6
+Request retention time. The default is 30. A value of 0 will remove expired requests with no delay.
bbecb6
 .TP
bbecb6
 \fB\-\-requestretentionunit=REQUESTRETENTIONUNIT\fR
bbecb6
 Request retention units. Valid units are: minute, hour, day, year.
bbecb6
@@ -102,7 +102,7 @@ The default is days.
bbecb6
 LDAP search size limit searching for unfulfilled requests. The default is 1000. There may be additional server-side limitations.
bbecb6
 .TP
bbecb6
 \fB\-\-requestsearchtimelimit=REQUESTSEARCHTIMELIMIT\fR
bbecb6
-LDAP search time limit searching for unfulfilled requests. The default is 0, no limit. There may be additional server-side limitations.
bbecb6
+LDAP search time limit (seconds) searching for unfulfilled requests. The default is 0, no limit. There may be additional server-side limitations.
bbecb6
 .TP
bbecb6
 \fB\-\-config\-show\fR
bbecb6
 Show the current pruning configuration
bbecb6
diff --git a/ipaserver/install/ipa_acme_manage.py b/ipaserver/install/ipa_acme_manage.py
bbecb6
index b7b2111d9edcec2580aa4a485d7a7340146ff065..e7c35ff6fb5b7a30ac9e2c0c18f8db805cf06ee9 100644
bbecb6
--- a/ipaserver/install/ipa_acme_manage.py
bbecb6
+++ b/ipaserver/install/ipa_acme_manage.py
bbecb6
@@ -207,14 +207,14 @@ class IPAACMEManage(AdminTool):
bbecb6
                         self.options.enable,
bbecb6
                         self.options.disable,
bbecb6
                         self.options.cron,
bbecb6
-                        self.options.certretention,
bbecb6
+                        self.options.certretention is not None,
bbecb6
                         self.options.certretentionunit,
bbecb6
-                        self.options.requestretention,
bbecb6
+                        self.options.requestretention is not None,
bbecb6
                         self.options.requestretentionunit,
bbecb6
-                        self.options.certsearchsizelimit,
bbecb6
-                        self.options.certsearchtimelimit,
bbecb6
-                        self.options.requestsearchsizelimit,
bbecb6
-                        self.options.requestsearchtimelimit,
bbecb6
+                        self.options.certsearchsizelimit is not None,
bbecb6
+                        self.options.certsearchtimelimit is not None,
bbecb6
+                        self.options.requestsearchsizelimit is not None,
bbecb6
+                        self.options.requestsearchtimelimit is not None,
bbecb6
                     ]
bbecb6
                 )
bbecb6
                 and (self.options.config_show or self.options.run)
bbecb6
@@ -226,7 +226,7 @@ class IPAACMEManage(AdminTool):
bbecb6
             elif self.options.cron:
bbecb6
                 if len(self.options.cron.split()) != 5:
bbecb6
                     self.option_parser.error("Invalid format for --cron")
bbecb6
-                # dogtag does no validation when setting an option so
bbecb6
+                # dogtag does no validation when setting this option so
bbecb6
                 # do the minimum. The dogtag cron is limited compared to
bbecb6
                 # crontab(5).
bbecb6
                 opt = self.options.cron.split()
bbecb6
@@ -255,7 +255,7 @@ class IPAACMEManage(AdminTool):
bbecb6
                 'pki-server', command,
bbecb6
                 f'{prefix}.{directive}'
bbecb6
             ]
bbecb6
-            if value:
bbecb6
+            if value is not None:
bbecb6
                 args.extend([str(value)])
bbecb6
             logger.debug(args)
bbecb6
             result = run(args, raiseonerr=False, capture_output=True,
bbecb6
@@ -350,28 +350,28 @@ class IPAACMEManage(AdminTool):
bbecb6
 
bbecb6
         # pki-server ca-config-set can only set one option at a time so
bbecb6
         # loop through all the options and set what is there.
bbecb6
-        if self.options.certretention:
bbecb6
+        if self.options.certretention is not None:
bbecb6
             ca_config_set('certRetentionTime',
bbecb6
                           self.options.certretention)
bbecb6
         if self.options.certretentionunit:
bbecb6
             ca_config_set('certRetentionUnit',
bbecb6
                           self.options.certretentionunit)
bbecb6
-        if self.options.certsearchtimelimit:
bbecb6
+        if self.options.certsearchtimelimit is not None:
bbecb6
             ca_config_set('certSearchTimeLimit',
bbecb6
                           self.options.certsearchtimelimit)
bbecb6
-        if self.options.certsearchsizelimit:
bbecb6
+        if self.options.certsearchsizelimit is not None:
bbecb6
             ca_config_set('certSearchSizeLimit',
bbecb6
                           self.options.certsearchsizelimit)
bbecb6
-        if self.options.requestretention:
bbecb6
+        if self.options.requestretention is not None:
bbecb6
             ca_config_set('requestRetentionTime',
bbecb6
                           self.options.requestretention)
bbecb6
         if self.options.requestretentionunit:
bbecb6
             ca_config_set('requestRetentionUnit',
bbecb6
                           self.options.requestretentionunit)
bbecb6
-        if self.options.requestsearchsizelimit:
bbecb6
+        if self.options.requestsearchsizelimit is not None:
bbecb6
             ca_config_set('requestSearchSizeLimit',
bbecb6
                           self.options.requestsearchsizelimit)
bbecb6
-        if self.options.requestsearchtimelimit:
bbecb6
+        if self.options.requestsearchtimelimit is not None:
bbecb6
             ca_config_set('requestSearchTimeLimit',
bbecb6
                           self.options.requestsearchtimelimit)
bbecb6
         if self.options.cron:
bbecb6
-- 
bbecb6
2.39.1
bbecb6