#!/bin/sh
#< Simple script to validate IPv4 addresses - use as a filter
# Returns 1 if error, 0 if validation successful
# KW 05/03/05

prog=$(basename ${0})

read input
set -- ${input}
if [ "$#" -ne "1" ]; then
   echo "${prog}: Usage: some_command | ${prog}" >&2
   exit 1
fi

quad=${1}

oldIFS=${IFS}
IFS=.
set -- ${quad}

if [ "$#" -ne "4" ]; then
  echo "${prog}: ip_address must have 4 quads" >&2
  exit 1
fi

for oct in ${1} ${2} ${3} ${4}; do
  echo ${oct} | egrep "^[0-9]+$" >/dev/null 2>&1
  if [ "$?" -ne "0" ]; then
     echo "${prog}: ${oct}: not numeric" >&2
     exit 1
  else
     if [ "${oct}" -lt "0" -o "${oct}" -gt "255" ]; then
        echo "${prog}: ${oct}: out of range" >&2
        exit 1
     fi
  fi
done

echo "${quad}" | grep "\.$" >/dev/null 2>&1
if [ "$?" -eq "0" ]; then
  echo "${prog}: trailing period - invalid" >&2
  exit 1
fi

echo "${quad}" | grep "^\." >/dev/null 2>&1
if [ "$?" -eq "0" ]; then
  echo "${prog}: leading period - invalid" >&2
  exit 1
fi

echo "${quad}" | grep "\.\." >/dev/null 2>&1
if [ "$?" -eq "0" ]; then
  echo "${prog}: empty quad - invalid" >&2
  exit 1
fi

# if we're here, we're validated
exit 0