File skip_crl_validity_check.patch of Package monitoring-plugins-ssl_validity

--- check_ssl_validity.orig	2018-05-17 14:55:08.467324480 +0200
+++ check_ssl_validity	2018-05-17 15:55:50.548777109 +0200
@@ -19,10 +19,10 @@
 use Digest::MD5 qw(md5_hex);
 use LWP::Simple;
 
-getopts('p:t:H:dw:c:I:C:d');
+getopts('p:t:H:dw:c:I:C:dS');
 
 sub usage {
-        print "check_ssl_validity -H <cert hostname> [-I <IP/host>] [-p <port>]\n[-t <timeout>] [-w <expire warning (days)>] [-c <expire critical (dats)>]\n[-C (CRL update frequency in seconds)] [-d (debug)]\n";
+        print "check_ssl_validity -H <cert hostname> [-I <IP/host>] [-p <port>]\n[-t <timeout>] [-w <expire warning (days)>] [-c <expire critical (dats)>]\n[-C (CRL update frequency in seconds)] [-d (debug)]\n[-S (skip CRL validity check)\n";
         print "\nWill look for hostname provided with -H in the certificate, but will contact\n";
         print "server with host/IP provided by -I (optional)\n";
         exit(1);
@@ -214,90 +214,107 @@
 if ($opt_d) {
     print "Certificate serial: $serial\n";
 }
+
 @crldps = @{$decoded->CRLDistributionPoints};
 $crlskip = 0;
-foreach $crldp (@crldps) {
+# skip CRL validity check
+if ($opt_S) {
     if ($opt_d) {
-        print "Checking CRL DP $crldp.\n";
+        print " ... skipping CRL validity check !!!\n";
     }
-    $cachefile = "/tmp/" . md5_hex($crldp) . "_crl.tmp";
-    if (-f $cachefile) {
-        $cacheage = $uxtime-(stat($cachefile))[9];
-        if ($cacheage > $crlupdatefreq) {
-            if ($opt_d) { print "Download update, more than a day old.\n"; }
-            updatecrl($crldp, $cachefile);
+} else {
+    foreach $crldp (@crldps) {
+        # skip 'ldap' CRL DistributionPoint URI
+        if ( $crldp =~ /^ldap.*/ ) {
+            next;
+        }
+        if ($opt_d) {
+            print "Checking CRL DP $crldp.\n";
+        }
+        $cachefile = "/tmp/" . md5_hex($crldp) . "_crl.tmp";
+        if (-f $cachefile) {
+            $cacheage = $uxtime-(stat($cachefile))[9];
+            if ($cacheage > $crlupdatefreq) {
+                if ($opt_d) { print "Download update, more than a day old.\n"; }
+                updatecrl($crldp, $cachefile);
+            } else {
+                if ($opt_d) { print "Reusing cached copy of it.\n"; }
+#               print "Reuse CRL DP cachefile for $crldp, less than a day old.\n";
+#               No need to check CRL, it has already been so? Well we could have many certs to check.
+#               $crlskip = 1;
+#               next;
+            }
         } else {
-            if ($opt_d) { print "Reusing cached copy of it.\n"; }
-#            print "Reuse CRL DP cachefile for $crldp, less than a day old.\n";
-#            No need to check CRL, it has already been so? Well we could have many certs to check.
-#            $crlskip = 1;
-#            next;
+            if ($opt_d) { print "Download initial copy.\n"; }
+            updatecrl($crldp, $cachefile);
+        }
+#       print "Check CRL DP $crldp $cachefile\n";
+        $crl = "";
+        my $format;
+        open(my $cachefile_io, '<', $cachefile);
+        $format = <$cachefile_io> =~ /-----BEGIN X509 CRL-----/ ? 'PEM' : 'DER';
+        close $cachefile_io;
+        open(CMD, "openssl crl -inform $format -text -in $cachefile -noout 2>&1 |");
+        while (<CMD>) {
+            $crl .= $_;
+        }
+        close(CMD);
+        $ret = $?;
+        if ($ret != 0) {
+            $crl =~ s@\n@ @g;
+            $crl =~ s@\s+$@@;
+            doexit(2, "Could not parse $format from URL $crldp while checking $hosttxt: $crl");
         }
-    } else {
-        if ($opt_d) { print "Download initial copy.\n"; }
-        updatecrl($crldp, $cachefile);
-    }
-#    print "Check CRL DP $crldp $cachefile\n";
-    $crl = "";
-    my $format;
-    open(my $cachefile_io, '<', $cachefile);
-    $format = <$cachefile_io> =~ /-----BEGIN X509 CRL-----/ ? 'PEM' : 'DER';
-    close $cachefile_io;
-    open(CMD, "openssl crl -inform $format -text -in $cachefile -noout 2>&1 |");
-    while (<CMD>) {
-        $crl .= $_;
-    }
-    close(CMD);
-    $ret = $?;
-    if ($ret != 0) {
-        $crl =~ s@\n@ @g;
-        $crl =~ s@\s+$@@;
-        doexit(2, "Could not parse $format from URL $crldp while checking $hosttxt: $crl");
-    }
 
-    # Crude CRL parsing goes here
-    $mode = 0;
-    foreach $cline (split(/\n/, $crl)) {
-#        print "cline=$cline\n";
-        if ($cline =~ /.*Next Update: (.+)/) {
-            $nextup = $1;
-            $nextuptime = str2time($nextup);
-            $crlvalid = $nextuptime-$uxtime;
-            if ($opt_d) { print "Next CRL update: $nextup\n"; }
-#            print "crlvalid: $crlvalid\n";
-            if ($crlvalid < 0) {
-                doexit(2, "Could not use CRL from $crldp, it expired past next update on $nextup");
+        # Crude CRL parsing goes here
+        $mode = 0;
+        foreach $cline (split(/\n/, $crl)) {
+#           print "cline=$cline\n";
+            if ($cline =~ /.*Next Update: (.+)/) {
+                $nextup = $1;
+                $nextuptime = str2time($nextup);
+                $crlvalid = $nextuptime-$uxtime;
+                if ($opt_d) { print "Next CRL update: $nextup\n"; }
+#               print "crlvalid: $crlvalid\n";
+                if ($crlvalid < 0) {
+                    doexit(2, "Could not use CRL from $crldp, it expired past next update on $nextup");
+                }
+#               print "nextuptime $nextuptime nextup $nextup X\n";
+            } elsif ($cline =~ /.*Last Update: (.+)/) {
+                $lastup = $1;
+                if ($opt_d) { print "Last CRL update: $lastup\n"; }
+#               $lastuptime = str2time($lastup);
+#               print "lastuptime $lastuptime lastup $lastup X\n";
+            } elsif ($mode == 0) {
+                if ($cline =~ /.*Serial Number: (\S+)/i) {
+                    ckserial;
+                    $crserial = lc($1);
+                    $crrev = "";
+                } elsif ($cline =~ /.*Revocation Date: (.+)/i) {
+                    $crrev = $1;
+                }
+            } elsif ($cline =~ /Signature Algorithm/) {
+                last;
             }
-#            print "nextuptime $nextuptime nextup $nextup X\n";
-        } elsif ($cline =~ /.*Last Update: (.+)/) {
-            $lastup = $1;
-            if ($opt_d) { print "Last CRL update: $lastup\n"; }
-#            $lastuptime = str2time($lastup);
-#            print "lastuptime $lastuptime lastup $lastup X\n";
-        } elsif ($mode == 0) {
-            if ($cline =~ /.*Serial Number: (\S+)/i) {
-                ckserial;
-                $crserial = lc($1);
-                $crrev = "";
-            } elsif ($cline =~ /.*Revocation Date: (.+)/i) {
-                $crrev = $1;
-            } 
-        } elsif ($cline =~ /Signature Algorithm/) {
-            last;
         }
+        ckserial;
     }
-    ckserial;
 }
+
 if (-f $tempfile) {
     unlink ($tempfile);
 }
 
 $oktxt =~ s@\s+$@@;
 print "$oktxt, still valid for $certdaysfmt days. ";
-if ($crlskip == 0) {
-    print "Serial $serial not found on any Certificate Revokation Lists.\n";
+if (!$opt_S) {
+    if ($crlskip == 0) {
+        print "Serial $serial not found on any Certificate Revokation Lists.\n";
+    } else {
+        print "CRL checks skipped, next check in " . ($crlupdatefreq - $cacheage) . " seconds.\n";
+    }
 } else {
-    print "CRL checks skipped, next check in " . ($crlupdatefreq - $cacheage) . " seconds.\n";
+    print "\n";
 }
 
 exit 0;