home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # Try to recover 2nd field of active file.
-
- # =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- . ${NEWSCONFIG-/var/lib/news/bin/config}
-
- PATH=$NEWSCTL/bin:$NEWSBIN/expire:$NEWSBIN:$NEWSPATH ; export PATH
- umask $NEWSUMASK
-
- cd $NEWSCTL || { echo "$0: can't cd to $NEWSCTL" >&2; exit 1; }
-
- # check active file format
- set ""`sed 1q active`
- case $# in
- 4) ;;
- *) echo "$0: active file has other than 4 fields" >&2
- exit 1 ;;
- esac
-
- # lock news system
- lock="$NEWSCTL/LOCK"
- ltemp="$NEWSCTL/L.$$"
- echo $$ >$ltemp
- trap "rm -f $ltemp ; exit 0" 0 1 2 15
- while true
- do
- if newslock $ltemp $lock
- then
- trap "rm -f $ltemp $lock ; exit 0" 0 1 2 15
- break
- fi
- sleep 30
- done
-
- while read group max min fourth
- do
- dir=`echo $group | tr . / ` # map ng name to directory name
- new=
- if test -d $NEWSARTS/$dir
- then
- new=`ls $NEWSARTS/$dir | egrep '^[0-9]+$' | sort -n | tail -1`
- fi
- case "$new" in
- "") new=$max ;; # no files -- preserve old value
- *) if test "$new" -lt "$max" # old value more recent (!)
- then
- new="$max"
- fi
- ;;
- esac
- dots="`echo $max | tr 0123456789 ..........`"
- max="`expr 0000000000$new : '.*\('$dots'\)$'`" # preserve length
-
- echo $group $max $min $fourth
- done <active >active.new
-
- # replace active, carefully
- rm -f active.old
- ln active active.old
- mv active.new active
-
- exit 0
-