#!/bin/bash # -*- Mode: Sh -*- # lcf --- # Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) # Created On : Mon Feb 25 12:04:52 2002 # Created On Node : glaurung.green-gryphon.com # Last Modified By : Manoj Srivastava # Last Modified On : Mon Feb 25 12:06:54 2002 # Last Machine Used: glaurung.green-gryphon.com # Update Count : 2 # Status : Unknown, Use with caution! # HISTORY : # Description : # # # make sure we exit on error set -e # set the version and revision progname="$(basename $0)" pversion='Revision: 3.00' ###################################################################### ######## ######### ######## Utility functions ######### ######## ######### ###################################################################### setq() { # Variable Value Doc_string if [ "x$2" = "x" ]; then echo >&2 "$progname: Unable to determine $3" exit 1; else if [ "x$VERBOSE" != "x" ]; then echo "$progname: $3 is $2"; fi eval "$1=\"\$2\""; fi } withecho () { echo "$@" >&2 "$@" } usageversion () { cat >&2 <&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "$TEMP" while true ; do case "$1" in -h|--help) usageversion; exit 0 ;; -n|--no-action) action='echo'; docmd='NO'; shift ;; -v|--verbose) VERBOSE=1; shift ;; -s|--src-dir) opt_source_dir="$2"; shift 2 ;; -d|--debug) # d has an optional argument. As we are in quoted mode, # an empty parameter will be generated if its optional # argument is not found. case "$2" in "") setq DEBUG 1 "The Debug value"; shift 2 ;; *) setq DEBUG "$2" "The Debug value"; shift 2 ;; esac ;; --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done if [ $# != 2 ]; then echo >&2 "*** ERROR: Need exactly two arguments, got $#"; echo >&2 "" usageversion; exit 0 ; fi setq dest_file "$1" "The Destination file"; setq source_dir "$2" "The source directory"; # Load site defaults and over rides. if [ -f /etc/ucf.conf ]; then . /etc/ucf.conf fi # Command line, env variable, config file, or default if [ "X$source_dir" = "X" ]; then if [ ! "x$opt_source_dir" = "x" ]; then setq source_dir "$opt_source_dir" "The Source directory" elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then setq source_dir "$UCF_SOURCE_DIR" "The Source directory" elif [ ! "x$conf_source_dir" = "x" ]; then setq source_dir "$conf_source_dir" "The Source directory" fi fi if [ ! -d "$source_dir" ]; then echo >&2 "The source dir does not exist. Stopping now." exit 2; fi if [ "X$dest_file" = "X" ]; then echo >&2 "Uknown file to search for. Stopping now." exit 2; fi old_mdsum_dir="$source_dir/$(basename ${new_file}).md5sum.d"; old_mdsum_file="$source_dir/$(basename ${new_file}).md5sum"; if [ -e "$statedir/hashfile" -a ! -r "$statedir/hashfile" ]; then echo >&2 "$progname: do not have read privilege to the state data" if [ "X$docmd" = "XYES" ]; then exit 1; fi fi # test and see if this file exists in the database if [ -e "$statedir/hashfile" ]; then if [ "X$VERBOSE" != "X" ]; then echo >&2 "The hash file exists"; echo grep "[[:space:]]${dest_file}$" "$statedir/hashfile"; grep "[[:space:]]${dest_file}$" "$statedir/hashfile" ; fi lastsum=$(grep "[[:space:]]${dest_file}$" "$statedir/hashfile" | \ awk '{print $1;}' ); fi if [ "X$lastsum" = "X" ]; then echo >&2 "$progname: No record of file in databse. Stopping now." exit 2; fi if [ $DEBUG -gt 0 ]; then cat <&2 "Histotical md5sums did not match." fi if [ -d "$old_mdsum_dir" ]; then if [ -e "${old_mdsum_dir}/default" ]; then echo default; exit 0; fi elif [ -f "$old_mdsum_file" ]; then oldsum=$(grep "[[:space:]]default$" "$old_mdsum_file" | \ awk '{print $1;}') if [ "X$oldsum" != "X" ]; then # Bingo echo default; exit 0; fi fi fi exit 0;