home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / news / cnews.tar / ctl / dodelayed < prev    next >
Text File  |  1994-10-17  |  1KB  |  60 lines

  1. #! /bin/sh
  2. # dodelayed - handle delayed control messages, if they still exist
  3. # =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
  4. . ${NEWSCONFIG-/etc/news/bin/config}
  5.  
  6. PATH=$NEWSCTL/bin:$NEWSBIN/relay:$NEWSBIN:$NEWSPATH ; export PATH
  7. umask $NEWSUMASK
  8.  
  9. lock LOCK $$ || exit 1
  10. trap 'unlock LOCK ; trap 0 ; exit 0' 0 1 2 15
  11.  
  12. cd $NEWSARTS
  13.  
  14. # if there is nothing to do, don't try to do it
  15. if test ! -s $NEWSCTL/delayed
  16. then
  17.     exit 0
  18. fi
  19.  
  20. # first, which ones are due?
  21. now="`now`"
  22. awk 'BEGIN { now = '$now' }
  23.     {
  24.         if ($1 > now)
  25.             print $1, $2
  26.         else
  27.             print "do", $2
  28.     }' $NEWSCTL/delayed >/tmp/delayed$$
  29.  
  30. # second, which of those still exist?
  31. sed -n '/^do /s///p' /tmp/delayed$$ | dbz -x $NEWSCTL/history |
  32.     awk -F'    ' 'NF == 3 { print $3 }' | tr . / |
  33.     while read first rest
  34.     do
  35.         if test -r "$first"
  36.         then
  37.             echo "$first"
  38.         fi
  39.     done >/tmp/delaydo$$
  40.  
  41. # do them
  42. if test -s /tmp/delaydo$$
  43. then
  44.     for f in `cat /tmp/delaydo$$`
  45.     do
  46.         canonhdr $f | 
  47.             sed -n 's;^Control:[     ]*;'$NEWSBIN/relay/del';p' |
  48.             egrep -v '/^(cancel|ihave|sendme) ' >/tmp/ctl$$
  49.         # It might seem as if we need to duplicate relaynews's
  50.         # security checks -- for .. or metacharacters -- but a
  51.         # control message never gets into NEWSCTL/delayed unless
  52.         # relaynews approves of it.
  53.         sh /tmp/ctl$$ <$f
  54.     done
  55. fi
  56.  
  57. # and clean up
  58. egrep -v '^do' /tmp/delayed$$ >$NEWSCTL/delayed
  59. rm -f /tmp/ctl$$ /tmp/delayed$$ /tmp/delaydo$$
  60.