home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / unix_c / usenet / mvjunk.sh < prev    next >
Text File  |  1989-03-21  |  5KB  |  153 lines

  1. 24-Oct-85 14:27:30-MDT,5112;000000000001
  2. Return-Path: <unix-sources-request@BRL.ARPA>
  3. Received: from BRL-TGR.ARPA by SIMTEL20.ARPA with TCP; Thu 24 Oct 85 14:27:14-MDT
  4. Received: from usenet by TGR.BRL.ARPA id a009999; 24 Oct 85 14:41 EDT
  5. From: Jim Scardelis <frodo@wcom.uucp>
  6. Newsgroups: net.sources
  7. Subject: revised mvjunk script
  8. Message-ID: <837@wcom.UUCP>
  9. Date: 23 Oct 85 03:24:38 GMT
  10. To:       unix-sources@BRL-TGR.ARPA
  11.  
  12.  
  13.     A couple of days ago, right after rmgroup'ing net.bizarre, and
  14. net.misc.coke, a script that I had taken off of the net awhile ago went
  15. and recreated them NET-WIDE. The script is mvjunk, which takes articles
  16. that end up in the junk newsgroup, and puts them back into the groups 
  17. they came from. I use it because wcom seems to get alot of articles that
  18. it thinks are too old for it, or stuff posted to new newsgroups that we
  19. haven't gotten newgroup control messages for yet, or groups that are
  20. in regional distributions, but are so rarely posted to that we don't
  21. know about them. Unfortunately, the script as originally distributed 
  22. just did an inews -C, which results in the group being created net-wide.
  23. I have modified it so that it only does it locally.
  24.  
  25. Thanks go to my fellow news administrators that pointed out the bug to me,
  26. and sincere apologies to anyone whom the extraneous control messages have
  27. inconvenienced.
  28.  
  29. The modified version of mvjunk follows:
  30. ---CUT HERE---CUT HERE---CUT HERE----------------------------------------
  31.  
  32. #! /bin/sh
  33. # @(#)mvjunk.sh   (TRW Advanced Technology Facility) STA 2-Jun-1985
  34. #
  35. # Modified 10/22/85-James M. Scardelis, SA, Warner Computer Systems
  36. #       to create newsgroups locally only.
  37. #
  38. # Move news files out of junk and into their proper directories,
  39. # updating the active list and localgroups as we go.  Unknown newsgroups
  40. # are created LOCALLY and the article installed.
  41. #
  42. # Be CAREFULL with that active list!  Although we try to write out
  43. # buffers as quickly as possible, conflicts can occur if someone else
  44. # tries to use it at the same time this script is running!
  45. #
  46. # Strange occurences are dribbled into mvjunk-log.
  47. #
  48. # TRW DSG EDS SISD SDL ATF STA
  49.  
  50. JUNK=/usr/spool/news/junk
  51. NEWSDIR=/usr/spool/news
  52. LIB=/usr/lib/news        : See line 88
  53.  
  54. chmod u+wr $LIB/active
  55.  
  56. cd $JUNK
  57.  
  58. if /bin/test -z "`ls`" ; then exit
  59. fi
  60. chmod u+wr *
  61.  
  62. for j in $JUNK/*
  63. do
  64.     for group in `egrep '^Newsgroups:' $j | head -1 | \
  65.         sed 's;Newsgroups:[     ];;' | \
  66.         sed 's;,; ;g'`
  67.     do
  68.         l=`egrep '^Control:' $j`
  69.         if /bin/test -n "$l" ; then
  70.             GROUPDIR="control"
  71.             group="control"
  72.         else
  73.             GROUPDIR=`echo $group | sed 's;\.;\/;g'`
  74.         fi
  75. # Sick Lex... really sick!
  76.         cd $NEWSDIR
  77.         if /bin/test -d $GROUPDIR ; then
  78.             cd $GROUPDIR
  79.             l=`ls`
  80.             if /bin/test -n "$l" ; then
  81.                 a=`ls | sort -r -n`
  82.                 for f in $a
  83.                 do
  84.                     if /bin/test -f "$f" ; then
  85.                         article=`echo $f "+1" | bc`
  86.                         break
  87.                     fi
  88.                 done
  89.             else
  90.                 article=1
  91.             fi
  92.         else
  93.             mkdir $NEWSDIR/$GROUPDIR
  94.             article=1
  95.         fi
  96.         cd $NEWSDIR/$GROUPDIR
  97.         if /bin/test ! -d "$article" ; then
  98.  
  99.             cp $j $NEWSDIR/$GROUPDIR/$article
  100.  
  101.             chmod ugo+wrx $NEWSDIR/$GROUPDIR/$article
  102.             chown news $NEWSDIR/$GROUPDIR/$article
  103.             chgrp news $NEWSDIR/$GROUPDIR/$article
  104.             entry=`egrep "^$group " $LIB/active`
  105.             if /bin/test -z "$entry" ; then
  106.                 echo "Distribution: local \nControl: newgroup $group" | \
  107.                 /usr/lib/news/inews -h -n control -t cmsg
  108.                 the_date=`date`
  109.                 echo "Created group $group at $date" >> $LIB/mvjunk-log
  110.                 entry="$group 00001 00001 y" >> $LIB/localgroups
  111.             fi
  112.             entry="^$entry "
  113.             the_date=`date`
  114. #
  115. # There should be a way of passing shell variables into awk, but since
  116. # we don't know how to do that we just hardwire it.  Kludgy... no?
  117. #
  118.             echo $article $entry $the_date | \
  119.                 awk 'BEGIN { FS = " " } \
  120.             { if ( NF != 11 ) printf "Munged active entry: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
  121.             if ( length($1) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
  122.             if ( length($3) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
  123.             if ( length($4) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
  124.             printf "/%s/s;%s;",$2,$3 ; \
  125.             for ( i = 5 - length($1) ; i > 0 ; i-- ) printf "0" ; \
  126.             print $1 ";" ; \
  127.             if ( length($4) < 5 ) { \
  128.                 printf "s;%s;",$4 ; \
  129.                 for ( i = 5 - length($1) ; i > 0 ; i-- ) printf "0" ; \
  130.                 print $4 ";" \
  131.                 } \
  132.             if ( $5 != "y" && $5 != "n" ) print "s;.$;y;" } \
  133.  
  134.                     END { printf "w\nq\n" }' | ed - $LIB/active
  135.         else
  136.             echo "Hey, there's a directory called $NEWSDIR/$GROUPDIR/$article!"
  137.             echo "Hey, there's a directory called $NEWSDIR/$GROUPDIR/$article!" >> $LIB/mvjunk-log
  138.         fi
  139.     done
  140.     if /bin/test -f $NEWSDIR/$GROUPDIR/$article ; then
  141.         /bin/rm -f $j        # But my MOTHER lives in Hackensack!
  142.     else
  143.         echo "Couldn't find the article I just installed!"
  144.         echo "Couldn't find the article I just installed!" >> $LIB/mvjunk-log
  145.     fi
  146. done
  147. -- 
  148.  
  149. UUCP: ...{decvax,ihnp4,allegra}!seismo!trwatf!root    - Lord Frith
  150. ARPA: trwatf!root@SEISMO
  151.  
  152. "Money from da Buddah"
  153.