#! /bin/sh # dodelayed - handle delayed control messages, if they still exist # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/usr/local/libexec/cnews/config} PATH=$NEWSCTL/bin:$NEWSBIN/relay:$NEWSBIN:$NEWSPATH ; export PATH umask $NEWSUMASK lock LOCK $$ || exit 1 trap 'unlock LOCK ; trap 0 ; exit 0' 0 1 2 15 cd $NEWSARTS # if there is nothing to do, don't try to do it if test ! -s $NEWSCTL/delayed then exit 0 fi # first, which ones are due? now="`now`" awk 'BEGIN { now = '$now' } { if ($1 > now) print $1, $2 else print "do", $2 }' $NEWSCTL/delayed >/tmp/delayed$$ # second, which of those still exist? sed -n '/^do /s///p' /tmp/delayed$$ | dbz -x $NEWSCTL/history | awk -F' ' 'NF == 3 { print $3 }' | tr . / | while read first rest do if test -r "$first" then echo "$first" fi done >/tmp/delaydo$$ # do them if test -s /tmp/delaydo$$ then for f in `cat /tmp/delaydo$$` do canonhdr $f | sed -n 's;^Control:[ ]*;'$NEWSBIN/relay/del';p' | egrep -v '/^(cancel|ihave|sendme) ' >/tmp/ctl$$ # It might seem as if we need to duplicate relaynews's # security checks -- for .. or metacharacters -- but a # control message never gets into NEWSCTL/delayed unless # relaynews approves of it. sh /tmp/ctl$$ <$f done fi # and clean up egrep -v '^do' /tmp/delayed$$ >$NEWSCTL/delayed rm -f /tmp/ctl$$ /tmp/delayed$$ /tmp/delaydo$$