commit bb78e81d15c36f5ac8202b91e87f2ca6a736cdbe Author: Elyrith Date: Tue Jun 4 17:09:35 2013 -0400 Move from Bitbucket to GitHub diff --git a/check_domain b/check_domain new file mode 100755 index 0000000..ecb09c9 --- /dev/null +++ b/check_domain @@ -0,0 +1,161 @@ +#!/bin/bash + +################################################################################ +# # +# This program is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +################################################################################ + +# This is a Nagios plugin to check the expiration date of a domain name. +# It uses the "whois" command, which usually comes as a "whois" package. +# Debian/Ubuntu: apt-get install whois +# +# Original version had this copyright notice in it: +# Copyright (c) 2005 Tomàs Núñez Lirola , +# 2009-2012 Elan Ruusamäe , under GPL License +# +# Ryan found it hosted at: +# http://git.pld-linux.org/gitweb.cgi/?p=packages/nagios-plugin-check_domain.git +# +# This is a modified version, hosted at https://bitbucket.org/elyrith/check_domain +# Currently supports .com, .ca, .tv, .ee, .ru +# Support for .ca and .se by Ryan Loudfoot (ryan@loudfoot.ca) +# Support for Performance Data by Ryan Loudfoot + +PROGRAM=${0##*/} +PROGPATH=${0%/*} + +# Ryan's note: utils.sh is installed with nagios-plugins in with the plugins +. $PROGPATH/utils.sh + +# Default values (days): +critical=7 +warning=30 + +# Parse arguments +args=$(getopt -o hd:w:c:P: --long help,domain:,warning:,critical:,path: -u -n $PROGRAM -- "$@") +if [ $? != 0 ]; then + echo >&2 "$PROGRAM: Could not parse arguments" + echo "Usage: $PROGRAM -h | -d [-c ] [-w ]" + exit 1 +fi +set -- $args + +die() { + local rc=$1 + local msg=$2 + echo $msg + exit $rc +} + +fullusage() { + cat < [-c ] [-w ] +NOTE: -d must be specified + +Options: +-h + Print detailed help +-d + Domain name to check +-w + Response time to result in warning status (days) +-c + Response time to result in critical status (days) + +This plugin will use whois service to get the expiration date for the domain name. +Example: + $PROGRAM -d domain.tld -w 30 -c 10 + +Currently supports .com, .ca, .tv, .ee, .ru + +EOF +} + +while :; do + case "$1" in + -c|--critical) critical=$2; shift 2;; + -w|--warning) warning=$2; shift 2;; + -d|--domain) domain=$2; shift 2;; + -P|--path) whoispath=$2; shift 2;; + -h|--help) fullusage; exit;; + --) shift; break;; + *) die $STATE_UNKNOWN "Internal error!";; + esac +done + +if [ -z $domain ]; then + die $STATE_UNKNOWN "UNKNOWN - There is no domain name to check" +fi + +# Looking for whois binary +if [ -z $whoispath ]; then + type whois > /dev/null 2>&1 || die $STATE_UNKNOWN "UNKNOWN - Unable to find whois binary in your path. Is it installed? Please specify path." + whois=whois +else + [ -x "$whoispath/whois" ] || die $STATE_UNKNOWN "UNKNOWN - Unable to find whois binary, you specified an incorrect path" + whois="$whoispath/whois" +fi + +out=$($whois $domain) + +# Calculate days until expiration +case "$domain" in +*.com) + expiration=$(echo "$out" | awk -F: '/Expiration Date:/{print substr($0, length($1) + 2)}') + ;; +*.ru) + expiration=$(echo "$out" | awk '/paid-till:/{split($2, a, "."); printf("%s-%s-%s\n", a[1], a[2], a[3])}') + ;; +*.ee) + expiration=$(echo "$out" | awk '/expire:/{split($2, a, "."); printf("%s-%s-%s\n", a[3], a[2], a[1])}') + ;; +*.tv) + expiration=$(echo "$out" | awk -F: '/Expiration Date:/{print substr($0, length($1) + 3, 10)}') + ;; +*.ca) + expiration=$(echo "$out" | awk '/Expiry date:/{split($3, a, "/"); printf("%s/%s/%s\n", a[2], a[3], a[1])}') + ;; +*.se) + expiration=$(echo "$out" | awk '/expires:/{split($2, a, "-"); printf("%s-%s-%s\n", a[1], a[2], a[3])}') + ;; +*) + expiration=$(echo "$out" | awk -F: '/Expiration Date:/{print substr($0, length($1) + 2)}') + ;; +esac + +# For debugging only: +# echo $expiration + +[ -z "$expiration" ] && die $STATE_UNKNOWN "UNKNOWN - Domain doesn't exist or no WHOIS server available." + +expseconds=$(date +%s --date="$expiration") +expdate=$(date +'%Y-%m-%d' --date="$expiration") +nowseconds=$(date +%s) +diffseconds=$((expseconds-nowseconds)) +expdays=$((diffseconds/86400)) + +# Trigger alarms if applicable +#[ $expdays -lt 0 ] && die $STATE_CRITICAL "CRITICAL - Domain expired on $expiration. | Warning: $warning, Critical: $critical" +#[ $expdays -lt $critical ] && die $STATE_CRITICAL "CRITICAL - Domain will expire in $expdays days ($expdate). | Warning: $warning, Critical: $critical" +#[ $expdays -lt $warning ] && die $STATE_WARNING "WARNING - Domain will expire in $expdays days ($expdate). | Warning: $warning, Critical: $critical" + +# No alarms? Ok, everything is right. +echo "OK - Domain will expire in $expdays days ($expdate). | Warning: $warning, Critical: $critical" +exit $STATE_OK \ No newline at end of file