home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / suck-422.zip / CHANGELOG next >
Text File  |  1999-12-27  |  62KB  |  1,591 lines

  1.  
  2. CHANGES
  3. =======
  4. -- Changes from Suck-4.2.1 -> Suck-4.2.2
  5.  
  6. * lmove.c match_group(), move_msgs(), scan_args() - Re-wrote
  7.     for new options -h and -s to create hard or symbolic
  8.     links to files crossposted to multiple groups.  Re-wrote
  9.      code to handle malformed header with spaces either before
  10.     or after the newsgroup names.
  11.  
  12.     load_active() - added test for duplicate group line.
  13.  
  14. * suck.c - do_one_group() - changed command from "xhdr 111-"
  15.     to "xhdr 111-2222" for brain-dead servers that don't
  16.     follow the proposed standard and treat 111- correctly.
  17.  
  18. * xover.c - do_xover(), do_group_xover() - changed command from
  19.     "xover 111-" to "xover 111-222".
  20.  
  21. 25 July 1999 - Suck-4.2.2 released
  22.  
  23. -- Changes from Suck-4.2.0 -> Suck-4.2.1
  24.  
  25. * rpost.c - do_perl() - fixed bug where infile was being lost
  26.     due to FREETMPS, causing failed posting.
  27.  
  28. * suck.c - restart_yn() - fixed bug where if prior to restart,
  29.     we had sent command for an article, but not received it,
  30.     then on restart, we would skip article.   So I have
  31.     to set sentcmd to false if we haven't downloaded it.
  32.  
  33. * xover.c - chk_a_group() - rewrote into one loop, to get rid
  34.     of segfaults on NULL field, and to speed things up for
  35.     complicated xover files.
  36.  
  37. 23 May 1999 - Suck-4.2.1 released
  38.  
  39. -- Changes from Suck-4.1.2 -> Suck-4.2.0
  40.  
  41. * active.c - get_msgids() - added new option, -i, to set the default
  42.     number of articles to download when using the -A or -AL option
  43.     and a new group is added.  See man page for usage.
  44.  
  45.         do_one_group() - changed handling of return from 
  46.     do_group_xover() so handle new error code.
  47.  
  48.     parse_args(), main() - added code to handle -i option.
  49.  
  50.     get_articles() - fixed bug in handling of pause and
  51.     reconnect after X nr of articles.  Wasn't taken into
  52.     account 0 articles correctly.
  53.  
  54. * killfile.c - moved xoverview pointer out of master killfile and
  55.     into master struct, so can use independently of killfiles
  56.     (for -Z option).
  57.  
  58.     parse_killfile() - changed to passed which argument to 
  59.     various setup routines, so can distinguish between XOVER
  60.     and regular killfiles.
  61.  
  62. * killprg.c - killprg_forkit(), killperl_setup() - added test for
  63.     which, so if XOVER killfiles we don't point the killfile
  64.     functions to killprg stuff.
  65.  
  66.     - killprg_sendoverview(), killprg_sendxover, 
  67.     killperl_sendxover() - created.  These routines handle 
  68.     the sending of the overview.fmt and each overview line
  69.     to a child program or perl subroutine for matching.
  70.  
  71. * suck.c - main() - added code to handle retreival and freeing up
  72.     of memory used by overview.fmt.  Added call to free up
  73.     xoverp killfile.u
  74.  
  75.     - do_one_group() - added code to handle new option, -Z,
  76.     to use XOVER vice XHDR to get message-ids, in case the 
  77.     remote server doesn't support the XHDR command.
  78.  
  79. * xover.c - do_group_xover() - changed the error code returned
  80.     if server can't do xover command, so can recover 
  81.     gracefully from other errors (such as too long msgid)
  82.  
  83.     get_xover(), find_msgid() - created.  These routines
  84.     use the XOVER command to get the Message-ID and alloc
  85.     it for the -Z option.
  86.  
  87.     Moved xoverview pointer out of master killfile and into
  88.     master struct, so can use for -Z option.
  89.  
  90.     - do_one_line() - added code so if we have a program
  91.     or perl subroutine to do the checking, it gets called
  92.  
  93. 11 May 1999 - suck-4.2.0 released
  94.  
  95. -- Changes from Suck-4.1.1 -> Suck-4.1.2
  96.  
  97. * suck.c -- do_supplemental() - added call to do_sup_bynr().
  98.  
  99.     do_sup_bynr() - created.  Handles lines in suckothermsgs
  100.     that specify a group name and article number for retreival.
  101.  
  102. 14 Apr 1999 - suck-4.1.2 released
  103.  
  104. -- Changes from Suck-4.1.0 -> Suck-4.1.1
  105.  
  106. * suck.c - get_one_article() - fixed bug in sending command
  107.     for the second article, was resending first article
  108.     command.
  109.  
  110. 27 Mar 1999 - suck-4.1.1 released
  111.  
  112. -- Changes from Suck-4.0.0 -> Suck-4.1.0
  113.  
  114. * killfile.c - get_one_article_kill() - added code to handle
  115.     new option, -g, to get only the headers of articles.
  116.     See man pages for details.
  117.  
  118. * suck.c - get_one_article() - added code to handle new option
  119.     -g, to get only the headers of articles.
  120.  
  121. * xover.c - chk_a_group() - fix bug in counting of Xref line,
  122.     causing inaccurate count.
  123.  
  124.         do_one_line(), get_xoverview() - fixed handling of :full
  125.     flag in overview.fmt.
  126.  
  127. 22 Mar 99 - suck-4.1.0 released
  128.  
  129. -- Changes from Suck-3.10.4 -> Suck-4.0.0
  130.  
  131. * reworked restart code.  Got rid of suck.restart and suck.sorted,
  132.    replaced with suck.db, which contains the records of all messages.
  133.    All of this code is now contained in db.c.  Cleaned up the use of
  134.    the Mandatory field by creating separate delete and sentcmd fields.
  135.  
  136. * chkhistory.c chkhistory() - fixed bug which caused no articles to be
  137.     checked, I wasn't passing the current article to my_bsearch().
  138.  
  139.         chkhistory() - changed HISTORY_FILE to a run time option vice
  140.     the constant defined in the Makefile.
  141.  
  142. * chkhistory_db.c 
  143.     chkhistory(), open_history() - changed HISTORY_FILE to a
  144.     run_time option.
  145.  
  146. * killfile.c - added code to handle new killfile option NRXREF.
  147.     This works the same as NRGRPS, but on the Xref line
  148.     instead of the Newsgroups line.
  149.  
  150.   killfile_done() - fixed bug in freeing perl_int.
  151.  
  152.   check_a_group() - fixed bug in counting nr of groups.
  153.  
  154.   pass_two() - fix bug if groupline didn't have group name, we could
  155.     core dump when trying to nuke nl.
  156.  
  157. * ssort.c - changed params that my_bsearch is called with, to make
  158.     chkhistory faster.  Changed second param to string vice struct.
  159.  
  160. * suck.c - do_cleanup() - fixed a bug with moving suck.newrc to sucknewsrc.
  161.     If we're restarted with -R, no suck.newrc would exist, and
  162.     we'd move sucknewsrc to sucknewsrc.old, and fail on the
  163.     move of suck.newrc to sucknewsrc.  Now if suck.newrc doesn't
  164.     exist, we don't move sucknewsrc either.
  165.  
  166.     parse_args() - added code to handle history file option (HF).
  167.  
  168. * xover.c - added code to handle to option NRXREF, like above.
  169.     Also added code to handle new option XOVER_LOG_LONG,
  170.     which causes suck to format xover kills so that they
  171.     look like message headers, instead of printing just
  172.     the Xover line.
  173.  
  174. 13 Mar 99 - Suck-4.0.0 released
  175.  
  176. -- Changes from Suck-3.10.3 -> Suck-3.10.4
  177.  
  178. * active.c - get_message_index_active() - added code to handle -F
  179.     option, reconnect after reading the active file.  This is
  180.     in case of a large active file, and the remote end times
  181.     out while reading it.
  182.  
  183. * killprg.c - tweaked the #ifdef for the Perl 5.004 stuff
  184.  
  185. * lmove.c - move_msg(), scan_args() - Added test to see if article
  186.     exists in new location before I move it.  This is to avoid
  187.     overwriting articles if another process adds articles to
  188.     directory without changing the active file.   If an article
  189.     already exists, I abort UNLESS you use the -A option.  See
  190.     man page for more details. 
  191.     
  192.    main() - rewrote tests for msgdir and basedir, to avoid segfaults
  193.     if not defined.
  194.  
  195. * suck.c - main(), scan_args() - added code to handle -F option.
  196.  
  197. * xover.c - get_xoverview() - fixed bug in parsing of xoverview, not
  198.     stripping the blanks and nls correctly.  Also fixed bug in
  199.     allocing of memory (had POverview vice Overview).
  200.  
  201. 25 Jan 1999 - Suck-3.10.4 released
  202.  
  203. -- Changes from Suck-3.10.2 -> Suck-3.10.3
  204.  
  205. * batch.c - do_post_filter() - created, allows you to edit all articles
  206.     downloaded.
  207.  
  208. *batch.c - do_lmove_patch()
  209. *killprg.c - killprg_forkit()
  210. *rpost.c - do_filter - added exit(-1) so that if child doesn't execl,
  211.     we don't have both parent and child running.
  212.  
  213. * chkhistory.c - chkhistory() - changed error_log() call to MyPerror()
  214.     for open of history file, so get more descriptive error msg.
  215.  
  216. *  suck.c - main(), parse_args() - added arg handling for do_post_filter().
  217.  
  218.    get_articles(), restart_yn() - re-worked the handling of restarts, to 
  219.     avoid downloading same article twice, or not downloading an article,
  220.     due to the de-duping process when I did a rescan for new articles,
  221.     so I had the same MsgId twice, then deleted the first one already
  222.     downloaded, and then downloaded it again.
  223.  
  224. * dedupe.c - dedupe_list() - added code so that if one of a set of dupes
  225.     is marked as downloaded, or a dupe, I delete the other one 
  226.     instead, to help avoid the scenario above.    
  227.  
  228. 10 Dec 98  - Suck-3.10.3 released
  229.  
  230. -- Changes from Suck-3.10.1 -> Suck-3.10.2
  231.  
  232. * chkhistory.c - chkhistory() - changed to new, hopefully faster routine,
  233.     using ssort() and my_bsearch().
  234.  
  235. * dedupe.c - dedupe_list() - changed to use  new routine to handle deduping
  236.     based on the ssort() routine.
  237.  
  238. * ssort.c - created, contains ssort() and my_search().
  239.  
  240. * suckutils.c - qcmp_msgid() - created for use by my_bsearch().
  241.  
  242. * xover.c - do_group_xover(), do_one_line() - rewrote to fix bug in 
  243.     not handling multiple group keep/delete files.  
  244.  
  245. 8 Nov 98 - Suck-3.10.2 released
  246.  
  247. -- Changes from Suck-3.10.0 -> Suck-3.10.1
  248.  
  249. * chkhistory_db.c - open_history() - fixed typo in GDBM code had == where
  250.     it should have been = .
  251.  
  252. * killprg.c - added #define ERRSV and PL_na, since Perl 5.004 and earlier
  253.     don't have these.
  254.  
  255. * rpost.c - main(), scan_args() - modified to handle perl embedded filter.
  256.  
  257. * rpost.c - parse_perl(), perl_done(), do_perl() - created, handles embedded
  258.     perl subroutine for filtering files uploaded.
  259.  
  260. * xover.c - get_xoverview() - fix bug in not initializing elements of the
  261.     linked list (next = NULL).
  262.  
  263. 13 Oct 98 - Suck-3.10.1 released
  264.  
  265. -- Changes from Suck-3.9.4 -> Suck-3.10.0
  266.  
  267. * both.c  - added tests for <net/socket.h> and <arpa/inet.h> for BEos,
  268.     it needs net/socket.h, everyone else needs the other one.
  269.     
  270.     error_log(), do_debug_vl()  - added code to handle printing of error
  271.         messages to do_debug().
  272.  
  273. * chkhistory.c - chkhistory() - added code to check for valid lines, since
  274.     INN now has lines that begin with [, used by the DBZ code, and
  275.     we need to ignore them, and use only the lines that start with <.
  276.  
  277. * chkhistory_db.c - open_history(), close_history() - added code for using
  278.       GDBM database.
  279.  
  280. * killfile.c - parse_killfile(), do_debug() - changed to pointer and malloc
  281.     for master killfile, so can re-use routine to load in XOVER killfiles.
  282.     Added filename parameter, so can tell it what file to parse.  Changed
  283.     TRUE_STR() macro to use true_str function from suck.c
  284.  
  285.     parse_a_file() - added initialization of bodybig and bodysmall.
  286.  
  287.     parse_killfile(), parse_one_file() - changed so that if a killfile
  288.     evaluates to empty, we throw it away, so we don't spend time
  289.     finding groups for empty killfiles.
  290.  
  291.     parse_killfile(), free_killfile() - changed to set up for embeded
  292.     perl killfile call.
  293.  
  294. * killprg.c - killperl_setup(), killperl_done(), chk_msg_kill_perl() -
  295.         created, handles calling embedded perl subroutine for killfiles.
  296.  
  297. * lpost.c - added include <string.h> to fix compile bug on SunOS.
  298.  
  299. * rpost.c - do_article() - added code to test for a string to confirm
  300.     a duplicate post error message, since some servers don't use
  301.     a separate error code to dilineate these from other failures.
  302.  
  303.     scan_args() - added call to error_log() so that error_log and 
  304.     MyPerror messages also go to debug.suck, if debug is true.
  305.  
  306. * suck.c - main(), get_articles(), parse_args() - added code to change the
  307.         format of the BPS and count output to make it easier for a gui to
  308.         pick these out and display separately.  For use in my java gui, 
  309.     or anything else for that matter.  Added arg -G to toggle this on.
  310.  
  311.     main() - changed calls to true_str() and null_str() from macros
  312.     to true functions, since they are used so much in debug code, so
  313.     as not not have 300 copies of "true" "false" and "null" in the
  314.     program.  Added -f option, to reconnect after deduping the
  315.     messages, in case of long dedupes, and the remote disconnects
  316.     due to time outs.
  317.  
  318.     main(), parse_args() allocnode(), do_one_group()  - added code to
  319.     handle the new XOVER arg, to parse the xover killfiles, to allow
  320.     passing of article number, and to do the xover() call.
  321.  
  322.     parse_args() - added call so if debug is set, error_log and MyPerror
  323.         reports to debug.suck.
  324.  
  325. * testhost.c - main() - added -o option, to list the overview format, which
  326.     is what the XOVER command returns.  Added -M option, in case you
  327.     need the mode reader command for the -o option to work.
  328.  
  329. * xover.c - created, holds code to process XOVER killfiles.
  330.  
  331. 5 Oct 98 - Suck-3.10.0 released
  332.  
  333. -- Changes from Suck-3.9.3 -> Suck-3.9.4
  334.  
  335. * active.c - add_to_list() - added code to do regular expression testing,
  336.        if your system supports regex().
  337.        - read_ignore() - added code to compile regular expressions if
  338.        your system supports regex().
  339.  
  340. *chkhistory_db.c - added code to handle INN-2.0's new database routines.
  341.  
  342. * makephrases.c - count_vars() - rewrote so can't go past end of string
  343.        when checking for a variable.  Added <string.h>.
  344.  
  345. * suck.c - do_one_group() - changed so abort on non 411,500 error codes
  346.     when sending the group command.
  347.  
  348. 23 Jul 98 - Suck-3.9.4 released
  349.  
  350. -- Changes from Suck-3.9.2 -> Suck-3.9.3
  351.  
  352. * suck.c - main() - added code to get reply from "quit" command, that
  353.     way if remote end is in process of sending us something, we
  354.     don't close down the buffer prematurely.
  355.  
  356. 23 Apr 98 - Suck-3.9.3 released
  357.  
  358. -- Changes from Suck-3.9.1 -> Suck-3.9.2
  359.  
  360. * As of this version, my e-mail address has changed from boby@pixi.com
  361. to bobyetman@worldnet.att.net.
  362.  
  363. killprg.c - chk_msg_kill_fork() - added code to handle new -LF option,
  364.     to override built-in default for suck.killlog.
  365.  
  366. killfile.c - get_chunk_mem() - changed so that if send_command() aborts
  367.     due to TimeOut, we return the actual error (RETVAL_ERROR) vice
  368.     UNEXPECTEDANS which would cause us to keep going.
  369.  
  370.     regex_scan() - fixed bug if you had were using QUOTECHAR and had
  371.     regex() compiled in.  The regex code would strip the QUOTECHAR
  372.     off the string, so we'd always do case insensitive compare.
  373.  
  374.     parse_a_file(), regex_scan(), regex_check(), regex_block(), do_debug() - 
  375.     modified to handle new non-regex searching mechanism.  Switched to
  376.     Boyer-Moore algorithm vice straight brute force of strstr() or nstrstr().
  377.     Should make searching of body of messages lots quicker.  Added ability
  378.     to designate string in a killfile as a non-regex.  This is done by adding
  379.     a % to the front of a string, before the QUOTE char.  Added NON_REGEX=
  380.     param to killfiles.  Allows you to specify a character instead of % to
  381.     represent non-regex strings.  Revamped the handling of the QUOTE character,
  382.     it's all done now in regex_scan().  Fixed bug in printing if we were
  383.     using extended regex or not.  Added debugging statements.  
  384.  
  385.     chk_msg_kill() - added code to handle new -LF option, to override built-in
  386.     default for suck.killlog.
  387.  
  388. suck.c - do_one_group() - added error message print if timed out getting
  389.     MsgIds.
  390.  
  391.     do_connect(), send_command() - fixed to handle flushing of inbuf
  392.     and resetting which group number we are on, if reconnect option is 
  393.     given.
  394.  
  395.     restart_yn() - added -O, skip_on_restart.   Useful when suck is
  396.     having trouble with a particular article, and it keeps timing out
  397.     when you restart.  This option tells suck to skip the first article
  398.     on restart.
  399.  
  400. 29 Mar 98 - Suck-3.9.2 released
  401.  
  402. -- Changes from Suck-3.9.0 -> Suck-3.9.1
  403.  
  404. both.c - get_long() - created, copy of number() except it gets
  405.     longs instead of ints.
  406.     str_long() - created copy of str_int() except it gets
  407.     longs instead of ints.  
  408.  
  409. suck.h - changed so MsgNr is long vice int.  This necessitated a
  410.     bunch of changes in other routines, changing int vars
  411.     to long, and a couple of subroutine calls had to be changed.
  412.  
  413. 12 Feb 98 - Suck-3.9.1 released
  414.  
  415. -- Changes from Suck-3.8.0 -> Suck-3.9.0
  416.  
  417. Makefile.in - remove -ansi -pedantic, which caused Linux Glibc and
  418.     other systems problems.
  419.  
  420. active.c - nntp_active(), read_active() - created, read activelist
  421.     from NNTP host or local file, respectively.
  422.  
  423.     get_message_index_active() - changed to call nntp_active()
  424.     or read_active().
  425.  
  426.     get_msgids() - add nl to print of original line, so sucknewsrc
  427.     looks okay.
  428.  
  429. batch.c - do_rnewsbatch() - added code to test for existence of batch
  430.     file and fail if it already exists.  Added code to test for
  431.     write error.  Redo fclose()s so they are in right place.
  432.     
  433.     do_innbatch() - added code to test for write error.
  434.  
  435. both.c - do_debug_binary() - created, do a dump without filtering
  436.     thru a print.  Needed in case got NULL in string.
  437.  
  438.     findnl() - created, replaces strstr() call in sgetline()
  439.     so can handle NULLS in messages.
  440.  
  441.     sgetline() - added call to do_debug_binary() - so can see
  442.     if I get NULL in recv().
  443.  
  444. killfile.c - get_one_article_kill() - added code to test if failed to
  445.     write header to disk.  Modified to handle new calling sequence
  446.     for chk_msg_kill*().  Added code to get the body of the article,
  447.     if it wasn't already downloaded in check_a_group().  Added code
  448.     to handle UNEXPECTEDANS from get_chunk_mem.
  449.  
  450.     chk_msg_kill() - modified to handle new calling sequence, so can
  451.     pass master to check_a_group(), 
  452.  
  453.     get_chunk_mem() - renamed from get_a_chunk_mem().  Added size param
  454.     to track size of buffer. Changed strcpy() to memmove() in case of nulls
  455.     in string.  Added code to get both the header and body of articles into
  456.     separate buffers.  Added NULL to end of buf so that logging is correct.
  457.     Added code to handle retval and to pass back UNEXPECTANS if the article
  458.     is not available on server.
  459.  
  460.     check_a_group() - added code to test body and bodysize.  Moved some code
  461.     down to regex_block().  recoded to handle multiple body and header checks.
  462.  
  463.     parse_a_file, do_debug() - added code to handle body and bodysize> and
  464.     bodysize< parameters.  added code to handle multiple header and body checks.
  465.     added code to handle extended regex parameter.
  466.  
  467.     regex_block() - created.  This code will check an entire block
  468.     (header/body) for the string/regex desired.
  469.     
  470.     debug_one_kill() - created, print OneKill structrure, moved some
  471.     code from print_debug() here to make printouts more uniform and
  472.     code read a bit easier.
  473.  
  474.     regex_scan() - fixed bug in error message for bad regular expression.
  475.     Added code to free up structure if error in routine.  Added code to
  476.     handle use extended regex parameter.
  477.  
  478.     pass_one() - added code to handle use extended regex parameter.
  479.     
  480. killprg.c - chk_msg_kill_fork() - modified to handle new calling sequence,
  481.     needed cause chg_msg_kill needed master.
  482.  
  483. lmove.c - read_active(), rewrite_active() - swap lownr and highnr
  484.     params around to match real format of active.
  485.  
  486.     load_phrases() - added code to test for correct version nr,
  487.     fixed bug in not skipping ahead to lmove phrases.
  488.  
  489.     find_groups() - fix bug by changing linein[] to static.
  490.  
  491. makephrases.c - added code to write out version number to phrase file.
  492.  
  493. rpost.c - added tests to various sgetlines() in case it aborts due to timeout.
  494.  
  495.     load_phrases() - added code to test for version number.
  496.  
  497.     do_batch() - added code to write rest of articles to failed file
  498.     if we abort due to loss of connection.
  499.  
  500. suck_config.h - Move DEBUG1 from suck_config.h to Makefile debug_both
  501.  
  502. suck.c - main() - added TRUE_STR() and NULL_STR() macros to 
  503.     clean up the debugging printout a bit.  Fix bug in errormsg
  504.     if localhost isn't defined.  Moved printout of debug stuff
  505.     so it prints even if there's an error in the parsing of
  506.     the args.  Added code to handle chk_msgid option.  Added code
  507.     to handle -AL option, read activelist from file.  Added code
  508.     to handle -B option, check for any lingering messages and
  509.     batch em up before we start the main run.
  510.  
  511.     do_supplemental() - added -z option don't do dedupe.  This
  512.     is primarily for real slow machines where the dedupe process
  513.     is longer than the time to download the messages.  I don't
  514.     recommend this option.
  515.  
  516.     allocnode() - added code to handle -x option, chk_msgid.  If
  517.     this option is set suck doesn't check the end of the MsgId 
  518.     to verify that there is the > that is supposed to be there.
  519.     This is for some brain-dead NNTP servers that truncate
  520.     XHDR info at 72 characters.  Fixed bug introduced when added
  521.     code to get message number that cause the supplemental file
  522.     to not be processed.
  523.  
  524.     get_a_chunk() - change fputs to fwrite(), to handle NULLs.  Added
  525.     code to test retval of fwrite() in case disk is full.
  526.  
  527.     load_phrases() - added code to test for correct version nr,
  528.     fixed bug in not skipping lmove phrases.
  529.  
  530.     get_articles() - move test for mandatory down to killfile code,
  531.     due to pipelining in non-killfile code.  
  532.  
  533. testhost.c - main() - added -q option, suppress connect and announcement
  534.     displays, only show result of command
  535.  
  536.     load_phrases() - added code to test for correct version number.
  537.  
  538. 5 Feb 98 - suck-3.9.0 released
  539.  
  540. -- Changes from Suck-3.7.0 -> Suck-3.8.0
  541.  
  542. active.c - read_ignore() - move fclose() to prevent attempt to 
  543.     close file that's NULL.
  544.  
  545. batch.c - batch_lmove() - changed batchfile option to pass the
  546.     configuration file name vice the activefile name.  lmove
  547.     now uses the configuration file to get the activefile name.
  548.  
  549. killfile.c - parse_a_file() - added code to handle comment character.
  550.  
  551. lmove.c - main(), rewrite_active(), load_active(), scan_args() -
  552.     added -c option which allows you to specify configuration file
  553.     name.  Rewrote so that active file looks like standard news
  554.     active file, which group name, low, high, and status fields.
  555.     This means I had to move BASE= to another file, the config
  556.     file.  This also loads ACTIVE= to specify the location of
  557.     the active file.
  558.     load_config() - created, loads configuration file.
  559.  
  560. rpost.c - main(), send_command() - added code to handle the new -u
  561.     option, auto_authenticate.  This option automatically sends
  562.     the authinfo user command upon connect to the remote host.
  563.  
  564.     do_authenticate() - added, used by -u option.  send_command() and
  565.     do_authenticate() are carbon copies of what is in  suck.c, 
  566.     except for variable name changes.
  567.  
  568. suck.c - get_one_article() - move output of final '.' so that it
  569.     only happens if the article is successfully downloaded.
  570.  
  571.     main(), allocnode(), do_free(), do_one_group(), do_supplemental(),
  572.     get_one_article(), get_one_article_kill(), restart_yn(), parse_args() 
  573.     - (wow) Added code to handle -n option.  This option retrieves
  574.     articles by the Number, not by the MessageID.  This means I had to
  575.     track which group each article was in, and send the command to 
  576.     switch groups when needed.  This gets tricky because of the 
  577.     pipelining code, so I can't send ahead if I have to switch groups.
  578.     If your remote NNTP server doesn't send the article number with
  579.     the xhdr command, then this option is disabled in the code.    
  580.  
  581.     get_group_number() - created, adds group to list and assigns nr
  582.         for later retrieval in -n option.
  583.  
  584.     build_command() - created, builds head, article, or body command
  585.     with either msgid or msgnr, depending on -n option.
  586.  
  587.     do_connect, scan_args() - added code to handle the -u, auto_authenticate
  588.     option.  This option will automatically send the authinfo user command
  589.     upon connection.
  590.  
  591.  
  592. testhost.c - main() - added code to handle -d option, get group descriptions
  593.     (send command 'list newsgroups').
  594.  
  595. 24 Nov 97 - suck-3.8.0 released
  596.  
  597. -- Changes from Suck-3.6.0 -> Suck-3.7.0
  598.  
  599. Makefile.in - add configure section, change install so install_lpost
  600.     does both program and man page, fix bug in in installall
  601.  
  602. sample\* - various tweaks to use new -A and -bp options
  603.  
  604. active.c - created, handles the -A option, reading in the local
  605.     active file, and merging it with the existing sucknewsrc
  606.     to get the msgids.
  607.  
  608. both.c - sgetline() - added global variable TimeOut, to allow set
  609.     of timeout value from all the programs.
  610.  
  611. batch.c - created, moved all batch subroutines here.  
  612.     - do_localpost(), post_one_msg() - created, post articles
  613.     to local server using IHAVE (-bp option)
  614.  
  615. killfile.c - chk_msg_kill() - put NL between articles in killfile log
  616.     when in long log mode.
  617.     - get_one_article_kill() - added code for BATCH_LIHAVE
  618.     - added <limits.h> to fix compile bug on glibc systems.
  619.  
  620. rpost.c - scan_args() - added code to handle -T (timeout) option.
  621.  
  622. suck.c - get_message_index() - rewritten, much of this code moved to
  623.     do_one_group(), so that it can be called from active.c.
  624.     Correctly handle a maxread of 0 and not download any msgs.
  625.     - do_one_group() - created.
  626.     - get_articles() - redid code that prints BPS to use new
  627.     GET_BPS function from the timercode, so that I can correctly
  628.     format the output and don't get BPSS type stuff.  Added code
  629.     to handle BATCH_LIHAVE file open.
  630.     - get_one_article(), main(), added code for BATCH_LIHAVE
  631.     - do_rnewsbatch(), do_innbatch, do_lmovebatch() - moved to batch.c
  632.     - scan_args() - rewritten to handle long and short args
  633.         - parse_args() - created, contains much of old scan_args().
  634.     Added code to handle -A, -bp, -hl, and -T (Timeout) options. 
  635.     - main() - added some arg checking code.
  636.     - get_one_article(), do_authenticate() - fixed bug in not
  637.     handling authentication due to send-ahead code.
  638.  
  639. testhost.c - main() - added code to handle -T (timeout) option.
  640.  
  641. timer.c - TimerFunc() - added GET_BPS option to return the BPS vice
  642.     display it on the screen.
  643.  
  644. 19 Oct 97 - suck-3.7.0 released
  645.  
  646. -- Changes to Suck-3.5.2
  647. *.c - removed all ifdef TIMER this option is no longer needed,
  648.     now that the -q is present.
  649.  
  650. both.c - added test for NULL fpo to print_phrases().
  651.  
  652. killfile.c - changed all routines, got rid of non-regex stuff,
  653.     and rewrote to handle new killfile format and parameters.
  654.     Changed get_one_article_kill() to put tmp message into
  655.     TMPDIR not MSGDIR.  Added -k option to ignore postfix
  656.     for master killfile so can have one set of killfiles for multiple
  657.     feeds.  Changed so the killfile names in the GROUP lines
  658.     are absolute, and don't get prefix added on.
  659.     Changed so killfile log only opened once, and changed log 
  660.     format, added long and short version, and it also prints
  661.     out which string we matched on.  Added wildcard matching
  662.     to the group matching routine (so can match comp.os.linux*).
  663.     Handle space instead of comma for separator on newsgroup line.
  664.     Added code to handle batch infeed option.  Added test for
  665.     regex or non-regex, so can use faster strstr() if not regex.
  666.     Fixed bug so that if killfile don't exist, we just ignore it.
  667.  
  668. killprg.c - chk_msg_fork_kill() - added logging to killfile log.
  669.     Added various debugging statements, to help determine
  670.     problems with child programs.
  671.     - move #include <unistd.h> before the <dirent.h>, needs to
  672.     be this order for FreeBSD.
  673.     - chk_msg_kill_fork() - added new logging code in.
  674.  
  675. suck.c - get_announcements() - added code to handle authentication.
  676.     renamed to do_connect(), moved connect code down here, to allow
  677.     for disconnect and reconnect every X msgs (to combat the inn
  678.     LIKE_PULLERS=DONT option)
  679.          send_command() - moved code for authentication to separate
  680.     function.
  681.          do_authenticate() - created to handle all authentication
  682.     requests.
  683.      scan_args() - re-organized so options in alphabetic order,
  684.     so easier to figure out which letters are used.
  685.      get_msg_index() - added # of msgs to the print out of the
  686.     which articles are being downloaded.
  687.     main() 
  688.     get_articles() - moved parsing of killfiles to main(), made
  689.      killp part of master structure.  Added code to handle -C option
  690.     (reconnect every x msgs).  Added code to handle batch innfeed 
  691.     option.
  692.  
  693.     get_one_article() _ changed to create tmp msg file in
  694.     TMPDIR not MSGDIR, so rnews can feed directly off of MSGDIR.
  695.         do_rnewsbatch(), do_innbatch() - changed so gathers all articles
  696.     with the proper postfix.  This is needed in case a restart gets
  697.     more articles and the numbering changes.  This means if you are
  698.     NOT using a postfix, you'll need to make sure there is nothing
  699.     else in the MSGDIR but the msgs, since we'll match on all files.
  700.     Fixed bug in not printing ".\n" at end of message in stdout 
  701.     mode.  Added code to handle batch innfeed option.
  702.  
  703.     main() - moved code to set up master.msgs to stdout or stderr
  704.     to before lock_file() call, so that if in stdout mode, we 
  705.     print messages correctly.
  706.  
  707. suckutils.c - move_file() - change typo in write from fpi to fpo.
  708.     - tmp_path() - removed as was causing a bug in renaming the
  709.     tmp articles back to the real names.
  710.  
  711. timer.c - added ifdefs for HAVE_GETTIMEOFDAY in case the system
  712.     doesn't have it.
  713.  
  714. 7 Sep 97 - suck-3.6.0 released
  715.  
  716. -- Changes to Suck-3.5.1
  717.  
  718. both.c - MyPerror() - added code to handle NULL ptr possibility
  719.  
  720. killfile.c - regex_scan() - fixed bug in error_log report (forgot NULL)
  721.  
  722. rpost.c - do_article() - added code to handle M$ 446 (615) response for
  723.     duplicate article
  724.  
  725. suck.c - main() - added code to handle -q option.
  726.  
  727.     do_rnewsbatch(), do_innbatch() - fixed possible overflow condition
  728.     by changing size of tmp variable to MAX_PATH vice 20.
  729.  
  730.      get_articles() - added code to handle -q (quiet) option to not
  731.     display BPS and article count.
  732.  
  733.      scan_args() - added code for -q option.
  734.  
  735.      get_message_index() - added test in case low and high article 
  736.     numbers from GROUP command don't jive (low > high)
  737.  
  738.      get_one_article() - changed nesting on the last if() so that
  739.     if Multifile is FALSE we don't try to move files, since there
  740.     aren't any to move.
  741.  
  742.      do_supplemental() - removed an unneeded call to TimerFunc().
  743.          Added test for no messages, so don't do deduping and history
  744.      check.
  745.  
  746.  
  747. suck_config.h - added code for Solaris in case PATH_MAX wasn't defined to
  748.     define it to MAXNAMLEN
  749.  
  750. suck_utils.c - move_file() - added test in case either file is NULL ptr
  751.  
  752. 1 Aug 97 - suck-3.5.2 released
  753.  
  754. -- Changes to Suck-3.5.0
  755.  
  756. README - revamped a bit, to make col.announce posting a bit easier.
  757.  
  758. killfile.c - get_one_article_kill() - change rename() to move_file().
  759.  
  760. lmove.c - added limits.h to fix problem on SCO machines with no PATH_MAX.
  761.  
  762. rpost.c - main() -added code to set up default phrase file. 
  763.  
  764. suck.c - main() - added code to set up default phrase file "/usr/local/lib/suck.phrases"
  765.     This also involved changing the *.doc/Makefiles to copy the phrase file to this
  766.     location.  Added call to setvbuf() to set buffering to line vice block.
  767.     Added code to handle rescan arg, which says to skip rescan on a restart.
  768.  
  769.        - do_cleanup()  - change rename() to move_file().
  770.  
  771.        - do_innbatch(),
  772.        - do_rnews(), - added postfix to file name checked for addition to batch file.
  773.  
  774.        - alloc_node(), - added code to initialize struct item sentcmd, to be used
  775.     for pipelining to determine if we've sent command for this article
  776.     or not.
  777.  
  778.        - get_one_article() - added code to do pipelining, that is send the command
  779.     to get one article ahead, so that while we are reading one article,
  780.     the next one is being fetched by the server.  Changed rename() to 
  781.     move_file().
  782.  
  783.        - scan_args() - added code to handle rescan argument -R
  784.  
  785.        - restart_yn() - fixed bug in error msg when suck.restart exists, but suck.sorted don't,
  786.     changed it so this isn't a fatal error.
  787.  
  788. suckutils.c - move_file() - created, move a file to another location, either via
  789.     rename() or a manual copy.  We do this so that if the move spans file systems,
  790.     we can handle it gracefully.
  791.  
  792.       - full_path() - added FP_GET_POSTFIX option to get postfix
  793.  
  794. testhost.c - main() - added code to set up default phrase file.
  795.  
  796. 17 Jun 97 - suck-3.5.1 releaseed
  797.  
  798. --Changes to Suck-3.4.1
  799.  
  800. *.c *.h - Changed DEBUG2 and DEBUG3 (debug suck and rpost) a 
  801.     run time option from compile time option.  Now suck, lmove,
  802.     and rpost support -D for debug.  This necessitated
  803.     changing all ifdefs DEBUG[23] to if(debug==TRUE)....
  804.     and a few subroutines so debug info got passed.
  805.  
  806. lmove.c
  807. lmove_phrases.c - created.  This is the long-promised utility
  808.     to move articles into the news/group/nr format.  See
  809.     man pages for more details.
  810.     
  811. Makefile.in - changed VERSION from numbers to strings, rewrote
  812.     so most lines < 80 characters for those folks using
  813.     dumb terminals, added code so other language man pages
  814.     can be installed directly from main Makefile.
  815.  
  816. both.c - sgetline() - changed call to select() from FD_SETSIZE
  817.     to fd+1 so that we only scan our own FD not all 1024.
  818.     A few tweaks to debug statements to clean up a bit.
  819.  
  820. chkhistory.c - removed CHECK_HISTORY_OLD, no longer needed.
  821.  
  822. killfile.c - get_one_article_kill() - added call to tmp_path()
  823.     so that current article being downloaded has a .tmp
  824.     extension on it.
  825.  
  826. suck.c - removed all code that handled -k (MSnews kludge option).
  827.  
  828.      main() - changed algorithm a bit so on restart, in
  829.     addition to getting all old articles, check for any
  830.     new articles and download them as well.  Added code to
  831.     handle call to do_lmovebatch.
  832.  
  833.        - get_one_article() - rewrite to not use send_command().
  834.         This is the start of adding the ability to pipeline 
  835.         commands and receipt of articles.  Added call to tmp_path()
  836.     so that current article being downloaded has a .tmp 
  837.     extension on it.
  838.  
  839.        - do_supplemental() - fix bug in call to TimerFunc().
  840.  
  841.        - scan_args() - added code to handle call to do_lmovebatch().
  842.  
  843.        - do_lmovebatch() - created. does a fork and execl to lmove,
  844.     to put files in news/group/number format.
  845.  
  846. suckutils.c - do_lockfile() - changed fprintf() to print_phrases()
  847.         - add #include <sys/param.h> for BSDI systems and tweaked
  848.           suck_config.h part where it handles PATH_MAX
  849.         - tmp_path() - created, create a tmp file name with fullpath.
  850.  
  851. 20 May 97 - suck-3.5.0 released
  852.  
  853. --Changes to Suck-3.4.0
  854. both.c - vprint_phrases() - rewrote to handle a couple of bugs,
  855.     1, if len = PHRASES_BLOCK_SIZE then no null termination,
  856.     2, if string arg > PHRASES_BLOCK_SIZE, infinite looped.
  857.  
  858. suck.c - free_phrases() - fix typos of free_array() call for
  859.     dedupe_phrases which caused a SIGBUS error.
  860.        - get_message_index() - fix bugs in error_log() call for
  861.      error messages for group command
  862.        - main() - handle suck -V  to correctly display version
  863.      number without putting a hostname in.
  864.  
  865. 30 Mar 97 - suck-3.4.1 released
  866.  
  867. --Changes to Suck-3.3.2
  868.  
  869. *.* - Tweaks to various configs to make more portable.
  870.  
  871. *.c - got rid of all lingering \r\n in log and status messages.
  872.       Added #define <sys/types.h> before sys/stat.h in various .c
  873.       files, for more portability (Ultrix needs this).
  874.  
  875.  phrases.h
  876. *phrases.c - created.  This is the code that loads in the language
  877.     phrases, so you can rewrite the screen messages into
  878.     another language, or just rewrite them.  This necessitated
  879.     changing every print to a screen to call print_phrases().
  880.  
  881. both.c  - read_array(), do_a_phrases(), free_array(),
  882.     convert_nl() - added.
  883.     These are used by the load_phrases() routines to
  884.     read in one array and alloc the memory for each phrases.
  885.     - print_phrases() vprint_phrases(), str_int() - added.
  886.     These routines print the phrases out with vars included.
  887.     - signal_block() - added code to block PAUSESIGNAL.
  888.     - error_log() - modified to call vprint_phrases() so that
  889.     phrases print correctly.
  890.  
  891. killfile.c - parse_killfile(), chk_msg_kill() - changed killfile
  892.     logging from a command time to run time argument, added
  893.     logyn to Master killfile structure.
  894.     regex_scan() - fixed bug in handling quote character
  895.     check_a_group() -  changed \r to \n in checking nr of groups
  896.     check_a_group(), parse_a_file() - added code to handle
  897.     pathhost, subject, from, and nntp separators in group killfile.
  898.  
  899. rpost.c - main(), scan_args() - added stuff to process language 
  900.     file.
  901.     - free_phrases() - added, frees up memory from language file
  902.     load.
  903.     - load_phrases() - added, loads in the language file.
  904.  
  905. suck.c - main(), scan_args() - added code to pass killog_yn to
  906.     killfile routines.  Added coded to process language file.
  907.     Added coded to set up PAUSESIGNAL.
  908.  
  909.     - get_message_index() - fixed bugs in writing suck.newrc,
  910.     one where if invalid line, and one where maxread was
  911.     never getting written back out.  Also fixed bug in notting
  912.     writing out line if error from server.  Fixed bug in 
  913.     writing file where the cmd was written instead of line from
  914.     file.  Fixed bug where could write to a NULL fp at end of
  915.     routine.
  916.  
  917.     - get_articles() - rewrote way I calculate width of nritems
  918.     for screen display, got rid of the log10() call, making
  919.     the math lib (-lm) unnecessary.
  920.     
  921.     - load_phrases() - added, loads in the language file.
  922.     - free_phrases() - added, frees up memory from language file
  923.     load.
  924.  
  925.     - restart_yn() - fix bug in print of error message which
  926.       caused it not to show the path of the suck.restart file,
  927.       but rather show suck.sorted twice.
  928.  
  929.     - sighandler() - added code to handle PAUSESIGNAL
  930.  
  931.     - pause_signal() - created, swap pause_* with sig_* if we
  932.       are called by signal handler.  This allows the user to
  933.       slow down suck while we are running.
  934.  
  935. testhost.c - main() - added coded to process language file.
  936.  
  937.     - load_phrases() - added, loads in the language file.
  938.     - free_phrases() - added, frees up memory from language file
  939.     load.
  940.  
  941. timer.c - TimerFunc() - changed to write to file vice string, so can
  942.     call print_phrases()
  943.  
  944. 16 Mar 97 - suck-3.4.0 released
  945.  
  946. --Changes to Suck-3.3.1
  947.  
  948. killfile.c - regex_scan() - fixed bug which caused it to scan
  949.     the first pattern on line multiple times, instead of
  950.     scanning each pattern (added startline = tptr at end).
  951.  
  952. rpost.c - main() - added version nr printout to DEBUG3 stuff.
  953.  
  954. suck.c  - main() - added version nr printout to DEBUG2 stuff.
  955.  
  956.     - restart_yn() - added code to print error message if
  957.         suck.restart exists, but suck.sorted doesn.t    
  958.  
  959. 16 Nov 96 - Suck-3.3.2 released
  960.  
  961. --Changes to Suck-3.3.0
  962.  
  963. rpost.c - log_fail() - fix bug in sprintf(), remove /.
  964.  
  965. suck.c - get_message_index() - added code so that using
  966.     a neg nr in sucknewsrc will allow you to download
  967.     the last X nr of messages, handy for starting a 
  968.     new group.
  969.  
  970.        - main() - check for NULLs on debug printout and
  971.     handle gracefully
  972.  
  973.        - scan_args(), get_message_index() - added code
  974.     to handle msnews.microsoft.com using 224 vice
  975.     221 for the return value on the XHDR command,
  976.     hence the -k (kludge) option.
  977.  
  978. testhost.c - main(), do_a_command() - added code to handle
  979.     NNTP authorization.
  980.  
  981. sample/get.news* - added simple lock mechanism so two instances
  982.     of script can't run at same time.
  983.  
  984. 5 Nov 96 - suck-3.3.1 released
  985.  
  986. --Changes to Suck-3.2.2
  987.  
  988. suck.c - main() - changed call to do_cleanup so that
  989.     it would be called even if no articles, since
  990.     this is not an error.
  991.        - get_articles(), scan_args() - added code to
  992.     handle the -W wait/pause argument to pause x nr
  993.     of seconds between y nr of messages.
  994.        - do_cleanup() - don't generate error if the sorted
  995.     file doesn't exist.
  996.  
  997. suck_config.h - added ifdef REGEX_H for killfile regex use.
  998.  
  999. killfile.h
  1000. killfile.c  - check_line()
  1001.         - parse_a_file()
  1002.         - free_node()
  1003.         - check_a_group() - added code to do the regex checks
  1004.          on subject, from, path and nntphost.
  1005.         - regex_scan()
  1006.         - regex_check() - created for regex stuff.
  1007.  
  1008. rpost.c - do_batch() - added code to log failed uploads
  1009.     - log_fail() - created, create a file of failed uploads
  1010.     - do_article() - fixed a bug where if the last line
  1011.     of an article didn't end with a cr nl, then the . to
  1012.     signal eom wasn't recognized by remote server.
  1013.  
  1014. 7 Oct 96 - Suck-3.3.0 released
  1015.  
  1016. --Changes to Suck-3.2.1
  1017.  
  1018. both.c - changed connect_to_nntphost, so can pass a portnr
  1019.     down, instead of always using the default 119.
  1020.  
  1021. suck.c
  1022. rpost.c
  1023. testhost.c - main(), scan_args() - changed to handle the
  1024.     new option -N, for selecting nnrp port number.
  1025.  
  1026. killfile.c - free_killfile() - removed lines that were
  1027.     explicitly freeing master.path, that is already
  1028.     handled in free_node().
  1029.  
  1030. 21 Sep 96 - Suck-3.2.1 released
  1031.  
  1032. --Changes to Suck-3.2.0
  1033.  
  1034. both.c - build_args() - created, parses a file for args,
  1035.     and builds an argv type array from it.
  1036.        - free_args() - created, frees memory allocated
  1037.     in build_args()
  1038.  
  1039. chkhistory.c - cmp_msgid() - moved to suckutils.c, since
  1040.     it is also used in chkhistory_db.c.
  1041.  
  1042. dedupe.c - created, dedupes the linked list of msg-ids.
  1043.  
  1044. killfile.c - parse_a_file(), check_a_group() - added
  1045.     code to check for NNTP_Posting_Host in headers.
  1046.  
  1047. killprg.c - chk_msg_kill_fork() - fix bug in check of
  1048.     retval from read of result from child process
  1049.       - killprg_closeit() - add nl to the sprintf
  1050.     so kill command is formatted correctly.
  1051.  
  1052. rpost.c - made all retvals use ENUM values
  1053.     main() - removed ifdef RPOST_NNRP stuff added
  1054.       -M option processing (mode reader).  Rewrote
  1055.     argument handling stuff so can add arg file
  1056.     processing
  1057.     do_article(), do_batch() - fix so if problem with
  1058.       article, it doesn't abort, just goes on to the
  1059.       next article.
  1060.     do_batch() - changed to use new Pargs struct to 
  1061.     pass all the options down to it.
  1062.     scan_args() - created, moved argument handling
  1063.     to here.
  1064.  
  1065. suck.h - Removed #ifdef NNRP made this a run-time option
  1066.        - added more fields to Master (for arg stuff)
  1067.  
  1068. suck.c - main() - added -M option (mode reader) option.
  1069.     Moved all options to scan_args() so can do the
  1070.     read args from file stuff.  This meant adding some
  1071.     fields to master, so could pass back and forth,
  1072.     and re-writing the arg handling stuff.
  1073.        - scan_args() - created, handle args here.
  1074.        - get_announcements() - removed ifdef NNRP stuff
  1075.          added stuff to check do_modereader
  1076.        - do_cleanup() - change FP_DATADIR to FP_TMPDIR on
  1077.         N_NEWRC and N_SORTED so it looks in the
  1078.         right location.
  1079.        - build_list() - deleted, see below.
  1080.        - get_message_index(), allocnode(), do_supplemental()
  1081.         rewritten, now all they do is build a list
  1082.         of message-ids, then the linked list is passed
  1083.         to dedupe_list().  This gets rid of the old
  1084.         way of deduping as building the list, and
  1085.         hopefully will speed up large message downloads.
  1086.        - get_message_index() - Added code to handle maxread
  1087.         parameter in sucknewsrc.  Added check for count
  1088.                on group line, so if no messages available we
  1089.         don't even try.
  1090.  
  1091. suckutils.c - do_lockfile() - change so PMaster is passed so 
  1092.     can print to status log.  Change print of removing
  1093.     stale lock file from errlog to status log, since this
  1094.     is not technically an error.
  1095.  
  1096. 13 Sep 96 - Suck-3.2.0 released
  1097.  
  1098. --Changes to Suck-3.1.0
  1099.  
  1100. Makefile.in
  1101. config.h.in
  1102. configure.in - various changes so work on more systems
  1103.  
  1104. *.h - changed #define WORD to #define WORD 1
  1105.     - various changes so they work with configure
  1106.  
  1107. both.c killprg.c suck.c suckutils.c
  1108.     - added tests for limits.h
  1109.     - changed pid stuff to assume long vice int pids.  This
  1110.       involved changing a couple of switches to if/else, and
  1111.       re-doing printf/scanfs with casts to long.
  1112.     - get_message_index() - added loop at end to write
  1113.       out rest of suck.newrc if the process was aborted
  1114.        (due to loss of pipe or other reasons).
  1115.  
  1116. both.h  - added test for pre-defined TRUE and FALSE
  1117.         - added test for PATH_MAX
  1118.  
  1119. rpost.c - added -U - P options for NNTP authorization
  1120.  
  1121. 12 Jul 96 - suck-3.1.0 released.
  1122.  
  1123. --Changes to Suck-3.0.0
  1124.  
  1125. ALL - added const to lots of function calls, and other places.  Lots of
  1126.     - touch ups to make code compile without warning messages.
  1127. **  - changed default to use memmove() vice bcopy() and set up config.h
  1128.       so you would uncomment to use bcopy vice memmove (reverse of old method)
  1129. **  - changed _POSIX_PATH_MAX to PATH_MAX
  1130.  
  1131. *.h - all modified so not to get included multiple times, and to stand
  1132.       alone (#ifndef, #define, #endif stuff)
  1133.  
  1134. *.c - added #include <config.h> at top for autoconf stuff
  1135.  
  1136. config.h - moved to suck_config.h so don't conflict with autoconf stuff.
  1137.      - changed CHECK_HISTORY_EXP to CHECK_HISTORY_OLD to make
  1138.      - new version the default.
  1139.  
  1140. both.c - sgetline() - changed to use memmove vice bcopy
  1141.             - rewrote a bit to not use ENODATA and ETIMEDOUT
  1142.        - signal_block() - added handling for SIGPIPE for killprg 
  1143.  
  1144. suck.c - send_command() - created to handle requests for authorization
  1145.      when commands are sent. Replaces send_a_command().
  1146.        - main() - added -U, -P option processing, and rewrote to use
  1147.      send_command().
  1148.        - get_announcements() 
  1149.      get_message_index() 
  1150.      get_one_article() - rewritten to use send_command()
  1151.        - send_a_command() - removed, replaced by send_command()
  1152.        - main() - added do_cleanup stuff
  1153.        - do_cleanup() - created, cleans up after myself
  1154.        - get_articles() - removed ifp variable and close() not needed.
  1155.  
  1156. killfile.c - get_one_article_kill() - rewritten to use send_command()
  1157.        - parse_killfile()
  1158.        - get_one_article_kill() - modified to handle call to 
  1159.        either chk_msg_kill() or chk_msg_kill_fork()
  1160.        - chk_msg_kill() - fixed bug in counting of commas on group line.
  1161.        - changed functions for change from nrgrps to maxgrps or totgrps,
  1162.        see below.
  1163. killfile.h - added defines for killprg.c stuff
  1164.        - changed confusing defs of nrgrps in two different structs,
  1165.          now one is maxgrps, one is totgrps.
  1166.  
  1167. killprg.c - created, this handles forking and calling of separate program
  1168.       - to check messages for killing or keeping
  1169.  
  1170. rpost.c - do_article() - changed to use memmove vice bcopy
  1171.                - fixed bug in duping beginning of lines dots.
  1172.                    - added long line support.
  1173.     - main()
  1174.       dobatch() - add -d option.  This option will delete the batch
  1175.                   file on successful upload of all messages.
  1176.  
  1177. chkhistory.c - changed to make the new check_history() routine, made the
  1178.          - old routine optional
  1179.      - chkhistory() (new version) - removed extra fclose(fhist)
  1180.  
  1181. Makefile - Moved to Makefile.in, rewritten to work with autoconf
  1182.      - added more warnings to defines and to tighten up code, added
  1183.        -ansi and -pedantic, this necessitated bunch of little changes
  1184.        in all files.
  1185.      - added SOCKS support
  1186.  
  1187. Never released to public, beta testers only.
  1188.  
  1189. --Changes to Suck-2.6.3
  1190.  
  1191. killfile.c - pass_two() - fixed bug in malloc grpname (add +1 to
  1192.         strlen()).
  1193.        - malloc_line() - added +1 to malloc
  1194.  
  1195. Makefile - fixed problem with older gcc's and linking (move $(LIBS)
  1196.         to end of compile lines). 
  1197.  
  1198. 8 May 1996 - suck 2.6.3 released
  1199.  
  1200. --Changes to Suck-2.6.2
  1201.  
  1202. All files - changed wording so that everything refers to articles
  1203.         vice messages, hopefully to avoid confusion.
  1204.  
  1205. Makefile - added support for Profiling so can find time wasters.
  1206.        Added support for non standard locations of includes
  1207.        and libs for INN DB stuff.  Added support for the
  1208.        separate compiling of chkhistory or chkhistory_db.
  1209.  
  1210. chkhistory.c - Moved history database stuff to separate file, for
  1211.            easier maintenance.
  1212.  
  1213.          - chkhistory() - there is now an experimental version 
  1214.            of the flat file history checker.  If you define
  1215.            CHECK_HISTORY_EXP in config.h, you'll get the new version.
  1216.            If not, you'll get the old.
  1217.  
  1218. chkhistory_db.c - created.
  1219.         - check_history() - fixed bad ifdefs, all should have
  1220.         had USE_ in front of them.
  1221.             - chkhistory() - added missing master->nritems--
  1222.  
  1223. killfile.h 
  1224. killfile.c - add NRGRPS param to allow you to prevent SPAM articles
  1225.  
  1226. suck.h       
  1227. suck.c     - added -K option to bypass killfiles, and added -H option
  1228.          to bypass history file check.
  1229.        - build_list() - added prelim 1st test to the dedupe portion
  1230.          so that we don't always call strcmp() in hopes to speed things
  1231.          up.
  1232.  
  1233. 31 Mar 96 - suck-2.6.2 released
  1234.  
  1235. --Changes to Suck-2.6.1
  1236.  
  1237. killfile.c - corrected len params for hilines and lolines in Params structure.
  1238.  
  1239.     - cleaned up the docs and man pages in suck.1 had HIGHLINES which
  1240.       should have read HILINES
  1241.  
  1242.     - added JDOC/* Japanese docs (Thanks Motoharu )
  1243.  
  1244. Makefile - fixed type in DBLIB
  1245.  
  1246. suck.c   - Makefile
  1247.          - main() - fixed version print to handle patch versions (2.6.1)
  1248.  
  1249. 10 Mar 1996 - suck-2.6.1 released
  1250.  
  1251. --Changes to Suck-2.6
  1252.  
  1253.     - moved man pages and sample files to their own directories
  1254.       so that the base dir only contains source code
  1255.  
  1256. ALL prgs - changed all stderr stuff to go through newly created error_log()
  1257.      - function.  This is all part of the process to make these programs
  1258.      - have no messages go to screen, for use in crons, background etc.
  1259.      - Also added -e, -E, -s, and -S options to suck, rpost, and testhost.
  1260.      - This necessitated a change in the command line processing of testhost.
  1261.      - Now testhost requires hostname first.   
  1262.  
  1263. both.c   - number() - re wrote to handle leading spaces gracefully
  1264.      - error_log() - created
  1265.  
  1266. chkhistory.c - Added the stuff to handle DBM, NDBM, DBZ history database schemes.
  1267.          - I hope this stuff works as I have no way to test it.  I can't even
  1268.          - compile the NDBM and DBZ stuff, as I don't even have the libs/include
  1269.          - files stuff.
  1270.          - cmp_msgid() - created, used to compare two articles ids IAW rfc 822.
  1271.  
  1272. config.h - added minor comments re the history stuff and the Makefile.  Added stuff 
  1273.      - for group kill file processing.
  1274.  
  1275. killfile.c - parse_killfile(), free_killfile(), chk_msg_kill() - modified
  1276.        - pass_two(), free_node(), check_a_group(), parse_a_file(), strnstr() - created
  1277.        - Major re-write to handle group kill and delete files.
  1278.        - also added quote param, to allow you to specify case-sensitive or 
  1279.            - case insensitive matches.
  1280.        - Changed LINES param to HILINES and LOWLINES to match nr of lines above or
  1281.        - below the nr of lines in a article.
  1282.        - main() - commented out perror on no killfile, since this really isn't an error.
  1283.  
  1284. rpost.c  - get_article()
  1285.      - get_batch() 
  1286.      - main() - added command line options, see above.
  1287.           - added fptr stuff and passed to subroutines to handle status messages.
  1288.           - added #define RNEWS_NNRP to handle INN servers that need
  1289.           - mode reader to post.
  1290.  
  1291. suck.c   - redid includes, moved various functions to suckutils.c
  1292.      - main() - added -V option to print version number, also added
  1293.      - command line options, see above, and added opening of status
  1294.      - log for silent mode.  This changes the handling of the -s option.
  1295.      - get_articles() - removed reduntant killfile tests since that code
  1296.               - is now in killfile.c
  1297.      - main()
  1298.      - rnews_batch() - added -r option, and the ability to build multiple batch
  1299.              - files, with the max size specified on the command line.
  1300.      - get_message_index() - added check for group not found, if got re-write
  1301.                    - line to newrc
  1302.                    - added sanity check for a low high article nr,
  1303.                    - in case remote hosts resets its article nrs.
  1304.      - main(), do_innbatch(), do_rnewsbatch() - added stuff for multiple feeds
  1305.         (postfix)
  1306.                 
  1307. suckutils.c  - created, moved various functions not directly related
  1308.            to the getting of the articles from suck.c to here
  1309.          - full_path() - added postfix option so can have multiple feeds.
  1310.  
  1311. suckutils.h  - created
  1312.  
  1313. testhost.c   - added RETVAL enum used thru out program 
  1314.          - main() - rewrote command line processing, see above.
  1315.                   - added fptr stuff for status messages
  1316.               - added newgroups option.  
  1317.          - do_a_command () - added fptr stuff for status messags
  1318.                            - added option for args to command to be sent
  1319.          - check_date_format() - created, used to ensure date/time for
  1320.                         - newgroups is in the right format.
  1321.  
  1322. Makefile - tweaks to handle new directory structure and to handle 
  1323.        passing version number to compile.  Added code to handle
  1324.        DB lib linking and passing args to compile.  Added user
  1325.        defines for owner, group, and mode for the executables
  1326.        and the man pages.
  1327.  
  1328. 19 Feb 1996 - suck-2.6 released
  1329.  
  1330. --Changes to Suck-2.5.1
  1331.  
  1332. get.news.innxmit - added ${SITE} variable, fixed bug on ctlinnd call
  1333.  
  1334. chkhistory.c -  chkhistory() -  moved search list stuff inside the else{} routine so
  1335.                   - it doesn't get done on a bogus line.
  1336.  
  1337. suck.c       - main()         - fixed a couple of printfs still going to stdout vice
  1338.                  - where master.msgs points.
  1339.  
  1340.          - get_articles() - added test for master being NULL to free_killfile() call
  1341.  
  1342. both.c       - sgetline() - added eob==start test in case buffer empty,
  1343.                 no data for the strstr() test with a dirty buffer
  1344.               - THIS IS THE BUG THAT CAUSED MOST OF THE "No article found"
  1345.                 error messages
  1346.  
  1347. killfile.c   - free_killfile() - added test for master being NULL
  1348.  
  1349. 29 Dec 95    - suck-2.5.1 released
  1350.  
  1351. --Changes to Suck-2.5
  1352. suck.c
  1353. killfile.c  - ALL ROUTINES - Added Master structure, changed basic operation mode. 
  1354.         Previously, we read suck.sorted to get each article.  This was causing
  1355.         a lot of disk activity.  Changed to keep the article list in memory.
  1356.         This included changing the handling of the restart, since we have to
  1357.         read the list into memory on a restart.  Also fixed handling of 
  1358.         stdout/stderr for status & error messages if in multifile mode or not.
  1359.  
  1360. suck.c       - do_innbatch()
  1361.        - do_rnewsbatch() - changed to use readdir() to build article files
  1362.                  - rather than just assuming all articles were downloading
  1363.                  - and going one up.  This way if one article didn't download
  1364.                  - the rest can still be batched up.
  1365.        - full_path() - fixed a bug in the resolving of relative paths.
  1366.        - get_articles() - add check for end of string when parsing for article id.
  1367.                         - modified get_message loop to end on signal
  1368.        - send_a_command() - rewrote if to switch to handle UNEXPECTEDANS better
  1369.        - get_a_chunk() - rewrote a bit to speed it up (hopefully)
  1370.                - modified to handle double dots IAW RFC 977 2.4.1
  1371.        - sighandler()   - created
  1372.        - main() - added call to signal() and to signal_block()
  1373.             - added -a options, always_batch; if we download at least one
  1374.              - article batch em up, even if we end on an error
  1375.             - added lockfile stuff
  1376.        - do_lockfile()  - created, Hope this is portable     
  1377.        - get_message_index() - any nr < 0 will cause us to just update sucknewsrc
  1378.                   - with the new high article nr (to start a newgroup)
  1379.                     - any line beginning with a # will be skipped
  1380.        - get_messages() - added call to free_killfile()
  1381.        - do_supplemental() - redid status messages a bit, added call to chkhistory()
  1382.     
  1383. killfile.h - added free_killfile() definition, added to KillStruct 
  1384.  
  1385. killfile.c - get_a_chunk_mem()  - modified to handle double dots IAW RFC 977 2.4.1
  1386.        - parse_killfile()
  1387.        - malloc_line() - created
  1388.        - check_line() - created
  1389.        - chk_msg_kill()  - added stuff to search Path, Subject, and From line
  1390.                  - and kill em if match
  1391.        - free_killfile() - created
  1392.  
  1393. Makefile   - added mkdir -p to install option, cleaned up a bit
  1394.  
  1395. both.h       - added enum for signal_block routine
  1396.     
  1397. both.c     - sgetline() - #ifdef TIMEOUT around timeval struct in variable declaration area
  1398.                     - added calls to signal_block()
  1399.        - signal_block() - created, this is so the recv don't get interrupted by my abort signal    
  1400.        - connect_to_nntphost() - added msgs parameter.  This way suck can 
  1401.                                - point msgs to stderr if not in multifile mode
  1402.     
  1403. config.h   - added #define RNEWS for lpost
  1404.            - added #define bcopy() for portability sakes
  1405.        - added #define MYSIGNAL stuff
  1406.        - added #define CHECK_HISTORY stuff
  1407.     
  1408. lpost.c       - moved #define RNEWS to config.h to conform with other prgs
  1409.  
  1410. get.news   - eliminated
  1411. get.news.innxmit -  created, for use by INND
  1412.                  - changed to use flush vice reload for ctlinnd
  1413. get.news.rnews - created, for use by CNEWS
  1414. testhost.c - added #include "config.h"
  1415.  
  1416. timer.c    - changed message printout to include mins and seconds
  1417.        - added TIMER_TIMEONLY option to just disply time, not bytes
  1418.  
  1419. timer.h    - added to enum
  1420.     
  1421. chkhistory.h -
  1422. chkhistory.c - created, allows to check /usr/lib/news/history for any articles this
  1423.          - system already has, and not download them
  1424.  
  1425. suck.1
  1426. rpost.1
  1427. lpost.1
  1428. testhost.1   - created
  1429.  
  1430. README
  1431. README.NEWS  - merged, since much of the docs are now in the man pages.
  1432.  
  1433. 1 Dec 95 - suck-2.5 released
  1434.  
  1435. --Changes to Suck-2.4.1
  1436.  
  1437. config.h  - got rid of ##ifdef KILLFILE around #define N_KILLLOG to avoid
  1438.         make errors if KILLFILE is not defined
  1439.  
  1440. rpost.c      - do_batch() - changed do_article() to retval=do_article()
  1441.         so errors in upload got passed back.
  1442.  
  1443. suck.c    - main() 
  1444.         get_articles() - added -s option, to force display of the status
  1445.            message for each message to stderr vice stdout.  That way
  1446.         if someone is not using batch mode, they can still see those
  1447.         messages.
  1448.       - get_articles() - fixed bug where restart file was always deleted.
  1449. Oct 8, 1995 - released
  1450.  
  1451. --Changes to 2.4
  1452. Makefile  - various tweaks
  1453.       - moved DEBUG stuff to config.h
  1454.  
  1455. get.news  - added comments about where to change for rnews
  1456.           - changed the way I test to see if I am online to using a ping
  1457.       - vice just checking to see if PPP is up and running
  1458.  
  1459. suck.c      - get_announcement() - added #ifndef NNRP if NNTP server is called.
  1460.         NNTP servers don't need 'mode reader' command, so don't
  1461.         send it.
  1462.       - full_path() - modified to allow for command line setting of directory paths;
  1463.         changed variables passed to it.
  1464.       - main() - modified arg checking routine to allow for command line setting of
  1465.         directory paths
  1466.       - get_messages() - changed checkdir() to use full_path()
  1467.       - get_articles() - added #ifdef TIMER stuff
  1468.       - get_articles() - changed memcpy() to bcopy() for portability's sake
  1469.       - full_path()    - changed PATH_MAX to POSIX_PATH_MAX for portability's sake
  1470.       - do_innbatch()
  1471.       - do_rnewsbatch()
  1472.       - get_articles() - added logcount, changed printf to make article file names
  1473.                  00XX-1666, where leading zeros are applied
  1474.       - changed B_FALSE, B_INNXMIT, B_RNEWS to BATCH_ to avoid error on Sun compiler
  1475.       - changed informational msgs to print to stdout vice stderr
  1476.       - get_one_article() - created
  1477.       - get_a_chunk()  - created
  1478.       - send_a_message() - created
  1479.       - get_articles() - moved all the stuff for one article to get_one_article()
  1480.                - send_a_message() and get_a_chunk() and added killfile 
  1481.                - processing stuff and ifdef KILLFILE stuff
  1482.       - get_message_index() 
  1483.         main()       - moved handling of restart from get_articles() to main()
  1484.  
  1485.       - do_dedupe()    - modified
  1486.       - build_list()   - created
  1487.       - get_articles() - added supplemental list processing, so user can specify
  1488.                - additional article numbers to download, in addition
  1489.                - to those from sucknewsrc.  This is so a user can specify
  1490.                - articles that will NOT be checked against killfile stuff
  1491.                - Now suck.sorted has two fields per line, msgnr and a
  1492.                - one char field that states whether or not I must download
  1493.                - this article. If I must, I will bypass killfile routines.
  1494.     
  1495. killfile.c  -
  1496. killfile.h  - created, contains stuff related to killfile processing
  1497.  
  1498. suck.h    - created, contains functions in suck.c needed by killfile.c stuff
  1499.  
  1500. config.h  - created, moved user changeable #defines to here.  Renamed some
  1501.         so that they make more sense.  Renamed suck.tmp to suck.newrc
  1502.         to be more descriptive.
  1503.       - added TIMEOUT option
  1504.       - moved DEBUG stuff from Makefile to here
  1505.  
  1506. both.c      - full_path() - moved to suck.c
  1507.       - sgetline()  - #ifdef TIMEOUT stuff, to allow us to timeout if
  1508.                       no data received from socket in some defined time.
  1509.             - plus some tweaks to speed up the routine
  1510.       - changed informational msgs to print to stdout vice stderr
  1511.       
  1512. rpost.c   - do_batch() - changed behavior if infile doesn't exist.  Use to
  1513.         totally bomb the program, Now just displays error msg and
  1514.         goes on to next article
  1515.       - changed informational msgs to print to stdout vice stderr
  1516.       - do_batch() - some INNs put article number in outgoing file
  1517.                - in addition to the file name, so added check for this
  1518.  
  1519. lpost.c   - changed informational msgs to print to stdout vice stderr
  1520.  
  1521. timer.c   - created
  1522. timer.h   - created, contains the timer display and update routines
  1523.  
  1524. testhost.c- created, allows you to see if host is active and what commands it accepts
  1525.       - added LIST option to get active list
  1526.  
  1527. 1 Oct 95 - posted
  1528.  
  1529. --Changes to 2.3B
  1530. Rewrote code to my code styles, this basically means: no global variables,
  1531.     single exit(), #define anything liable to change, change indentation.
  1532.  
  1533. both.c  - added full_path() so can put files anywhere, just change #defines in both.h.
  1534.       added do_debug(), MyPerror() for easier debugging.
  1535.       sgetline(), total rewrite so less character moving around
  1536.       and handles partial lines, returns with the nl in buffer.
  1537. both.h  - clarifed debugging options.
  1538.       centralized all #defines here for global changes
  1539. lpost.c  - just cosmetic changes, as I hope to phase this out.
  1540. Makefile - added a couple of comments
  1541. rpost.c  - rewrote to handle batch option
  1542.        added do_article(), process one article
  1543.        added do_batch(), loop thru batch file, process args
  1544.        run filter as needed
  1545.        added do_filter(), basically just fork() and execl()
  1546. suck.c   - main() rewrite to handle args
  1547.        get_articles() rewritten to handle multifile output
  1548.        added get_announcements() to move this out of main()
  1549.        added do_dedupe() so no more system() calls.
  1550.        added allocnode() for use by do_dedupe()
  1551.        added checkdir() to check for and make directory
  1552.        added do_innbatch() to build batch file of article file
  1553.        names needed by innxmit
  1554.        added do_rnewsbatch() to build file formatted for rnews
  1555. 8 August 95 Suck2.3B released
  1556.  
  1557. --NEW MAINTAINER 3 July 1995 boby@pixi.com
  1558. Minor changes so no warning msgs from gcc2.7.0.
  1559. suck.c - if low=high, never got article, fixed 
  1560. suck.c - changed if lastread in sucknewsrc ==0 no get to == -1
  1561. 3 July 1995 suck-2.2 released
  1562.  
  1563. --Changes to 2.2: 
  1564. Sgetline now cares for maxlen which means lines > 1024 bytes will
  1565. be folded. Lpost got the option -v to print some debugging output.
  1566. The other changes are only cosmetical :).
  1567.  
  1568. --Changes to 2.1.1:
  1569. Despite of the above proclamation i forgot to increase the buffer ;).
  1570. This is now fixed (hopefully). You see there is definately a need
  1571. for a new maintainer.
  1572.  
  1573. --Changes to 2.1: 
  1574. Radically increased buffer (+1 byte) thanks to operator@melchior.frmug.fr.net
  1575. rpost now more RFC0977 conform.
  1576. Renamed rpost.sh to blow.
  1577. Added another local posting script by huber@iamexwi.unibe.ch for inn.
  1578.  
  1579. --Changes to 2.0: 
  1580. added inews-alike rpost thanks to inspiration from ecarp@netcom.com.
  1581.  
  1582. --Changes to 1.4: 
  1583. added restart ability thanks to inspiration from David.H.West@um.cc.umich.edu.
  1584.  
  1585. --Changes to 1.3: 
  1586. fixed numeric ip handling.
  1587.  
  1588. --Changes to 1.2: 
  1589. added a missing htons() thanks to laurent@brasil.frmug.fr.net
  1590. added numeric ip address handling.
  1591.