Only setup CRL cron job if needed
authorJan Dittberner <jandd@cacert.org>
Sun, 15 Apr 2018 10:29:28 +0000 (12:29 +0200)
committerJan Dittberner <jandd@cacert.org>
Sun, 15 Apr 2018 10:29:28 +0000 (12:29 +0200)
The CRL job is only needed if client certificates have to be verified. This
commit adds parameters to the base profile to take care of conditional
installation of the update-crls job and customizes the job based on a
configurable list of services that need to be reloaded after CRL updates.

hieradata/nodes/monitor.yaml
hieradata/nodes/svn.yaml
sitemodules/profiles/files/base/update-crls [deleted file]
sitemodules/profiles/manifests/base.pp
sitemodules/profiles/templates/base/apt_sources.list.epp
sitemodules/profiles/templates/base/update-crls.epp [new file with mode: 0755]

index 068a343..db2a326 100644 (file)
@@ -4,3 +4,6 @@ classes:
 profiles::base::admins:
   - jandd
   - law
+profiles::base::crl_job_enable: true
+profiles::base::crl_job_services:
+  - apache2
index 7a66efe..6d6e107 100644 (file)
@@ -4,3 +4,6 @@ classes:
 profiles::base::admins:
   - jandd
   - law
+profiles::base::crl_job_enable: true
+profiles::base::crl_job_services:
+  - apache2
diff --git a/sitemodules/profiles/files/base/update-crls b/sitemodules/profiles/files/base/update-crls
deleted file mode 100755 (executable)
index 6c1e8d2..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-set -e
-
-CRL_PATH='/var/local/ssl/crls/'
-CA_CERT='/etc/ssl/certs/ca-certificates.crt'
-RSYNC_LOCATION='crl.cacert.org::crl'
-
-rsync -aqz "$RSYNC_LOCATION" "$CRL_PATH"
-
-for crl in "$CRL_PATH"*.crl
-do
-       if openssl crl -noout -inform DER -in "$crl" -CAfile "$CA_CERT" 2>/dev/null
-       then
-               openssl crl -inform DER -in "$crl" -out "$crl".pem
-       else
-               echo "Error: Could not validate the CRL at $crl" >&2
-       fi
-done
-
-c_rehash "$CRL_PATH" 2>/dev/null >&2
-
-service apache2 reload > /dev/null
-
-exit 0
index ea3855f..bf2a354 100644 (file)
 #
 # @param rootalias alias that gets emails for root
 #
+# @param crl_job_enable whether to setup the hourly CRL update job
+#
+# @param crl_job_services which services to reload after the CRL update
+#
 # Examples
 # --------
 #
 # Copyright 2016-2018 Jan Dittberner
 #
 class profiles::base (
-  Array[String] $admins     = [],
-  Hash[String, Data] $users = {},
-  String $rootalias         = "${trusted['certname']}-admin@cacert.org",
+  Array[String] $admins           = [],
+  Hash[String, Data] $users       = {},
+  String $rootalias               = "${trusted['certname']}-admin@cacert.org",
+  Boolean $crl_job_enable         = false,
+  Array[String] $crl_job_services = [],
 ) {
   # ensure admin users for this container
   $admins.each |String $username| {
@@ -180,31 +186,39 @@ class profiles::base (
     recipient => $rootalias,
   }
 
-  package { ['ca-certificates', 'ca-cacert']:
-    ensure => installed,
-  }
+  if ($crl_job_enable) {
+    package { ['ca-certificates', 'ca-cacert']:
+      ensure => installed,
+    }
 
-  file { '/var/local/ssl':
-    ensure => directory,
-    owner  => 'root',
-    group  => 'root',
-    mode   => '0755',
-  }
+    file { '/var/local/ssl':
+      ensure => directory,
+      owner  => 'root',
+      group  => 'root',
+      mode   => '0755',
+    }
 
-  file { '/var/local/ssl/crls':
-    ensure  => directory,
-    owner   => 'root',
-    group   => 'root',
-    mode    => '0755',
-    require => File['/var/local/ssl'],
-  }
+    file { '/var/local/ssl/crls':
+      ensure  => directory,
+      owner   => 'root',
+      group   => 'root',
+      mode    => '0755',
+      require => File['/var/local/ssl'],
+    }
 
-  file { '/etc/cron.hourly/update-crls':
-    ensure  => file,
-    owner   => 'root',
-    group   => 'root',
-    mode    => '0755',
-    source  => 'puppet:///modules/profiles/base/update-crls',
-    require => [Package['ca-certificates'], Package['ca-cacert'], File['/var/local/ssl/crls']],
+    file { '/etc/cron.hourly/update-crls':
+      ensure  => file,
+      owner   => 'root',
+      group   => 'root',
+      mode    => '0755',
+      content => epp(
+        'profiles/base/update-crls.epp',
+        { 'service' => $crl_job_services }),
+      require => [Package['ca-certificates'], Package['ca-cacert'], File['/var/local/ssl/crls']],
+    }
+  } else {
+    file { '/etc/cron.hourly/update-crls':
+      ensure => absent,
+    }
   }
 }
index ecc8cde..8709862 100644 (file)
@@ -1,4 +1,4 @@
-<%- | String $oscodename = "" |-%>
+<%- | String $oscodename = "" | -%>
 # THIS FILE IS MANAGED BY PUPPET, MANUAL CHANGES WILL BE OVERWRITTEN AT THE
 # NEXT PUPPET RUN.
 deb http://ftp.nl.debian.org/debian <%= $oscodename %> main
diff --git a/sitemodules/profiles/templates/base/update-crls.epp b/sitemodules/profiles/templates/base/update-crls.epp
new file mode 100755 (executable)
index 0000000..65bc7e8
--- /dev/null
@@ -0,0 +1,30 @@
+<% | Array[String] $services | %>
+#!/bin/sh
+
+# THIS FILE IS MANAGED BY PUPPET, MANUAL CHANGES WILL BE OVERWRITTEN AT THE
+# NEXT PUPPET RUN.
+
+set -e
+
+CRL_PATH='/var/local/ssl/crls/'
+CA_CERT='/etc/ssl/certs/ca-certificates.crt'
+RSYNC_LOCATION='crl.cacert.org::crl'
+
+rsync -aqz "$RSYNC_LOCATION" "$CRL_PATH"
+
+for crl in "$CRL_PATH"*.crl
+do
+       if openssl crl -noout -inform DER -in "$crl" -CAfile "$CA_CERT" 2>/dev/null
+       then
+               openssl crl -inform DER -in "$crl" -out "$crl".pem
+       else
+               echo "Error: Could not validate the CRL at $crl" >&2
+       fi
+done
+
+c_rehash "$CRL_PATH" 2>/dev/null >&2
+<% $services.each |$service| { -%>
+service <%= $service %> reload > /dev/null
+<% } %>
+
+exit 0