#!/bin/sh # Small script to survey CRL # GPL v3+ # Default values # Warning : 10 days - 10 years RANGE_WARNING="864000:315360000" # Critical : 4 days RANGE_CRITICAL="345600:" # Output OUTPUT_EXIT_STATUS=0 OUTPUT_DETAIL_WARNING="" OUTPUT_DETAIL_CRITICAL="" # Stop at the first non-catched error set -e # # Help function # usage() { cat </dev/null 2>&1 ; then echo "UNKNOWN 'openssl' not found." exit 1 fi # # Parameters management # while getopts hw:c:f: OPT; do case "$OPT" in 'h') usage exit ;; 'w') if check_range_syntax "$OPTARG" >/dev/null; then RANGE_WARNING="$OPTARG" else echo "UNKNOWN: invalid range." exit 3 fi ;; 'c') if check_range_syntax "$OPTARG" >/dev/null; then RANGE_CRITICAL="$OPTARG" else echo "UNKNOWN: invalid range." exit 3 fi ;; 'f') # I'm not very proud of this one : aesthetically speaking, treatments # should not be done during params management :) CRL_FILE="$OPTARG" if [ ! -f "$CRL_FILE" ]; then echo "UNKNOWN: inexistent file." exit 3 fi # Extract time left, in seconds EXPIRATION_DATE="$( openssl crl -noout -text -in "$CRL_FILE" | sed -n "s/^[[:space:]]\+Next Update: \(.*\)$/\1/p" )" if [ -z "$EXPIRATION_DATE" ]; then echo "UNKNOWN: couldn't get expiration date." exit 3 fi TIME_LEFT=$(( $( date +%s ) - $( date --date="$EXPIRATION_DATE" +%s ) )) # Check time left against range if ! check_range "$TIME_LEFT" "$RANGE_CRITICAL"; then OUTPUT_EXIT_STATUS=2 OUTPUT_DETAIL_CRITICAL="$OUTPUT_DETAIL_CRITICAL crl:$CRL_FILE" elif ! check_range "$CPT" "$RANGE_WARNING"; then if [ "$OUTPUT_EXIT_STATUS" -eq 0 ]; then OUTPUT_EXIT_STATUS=1 fi OUTPUT_DETAIL_WARNING="$OUTPUT_DETAIL_WARNING crl:$CRL_FILE" fi ;; \?) usage exit 1 ;; esac done case "$OUTPUT_EXIT_STATUS" in '0') printf "OK" ;; '1') printf "WARNING %s" "$OUTPUT_DETAIL_WARNING" ;; '2') printf "CRITICAL %s" "$OUTPUT_DETAIL_CRITICAL" ;; *) printf "UNKNOWN" ;; esac # on supprime les retours à la ligne exit $RETURN_STATUS