
CHANGES
=======
--Changes in Suck-3.3.1

killfile.c - regex_scan() - fixed bug which caused it to scan
	the first pattern on line multiple times, instead of
	scanning each pattern (added startline = tptr at end).

rpost.c - main() - added version nr printout to DEBUG3 stuff.

suck.c  - main() - added version nr printout to DEBUG2 stuff.

	- restart_yn() - added code to print error message if
		suck.restart exists, but suck.sorted doesn.t	

16 Nov 96 - Suck-3.3.2 released

--Changes in Suck-3.3.0

rpost.c - log_fail() - fix bug in sprintf(), remove /.

suck.c - get_message_index() - added code so that using
	a neg nr in sucknewsrc will allow you to download
	the last X nr of messages, handy for starting a 
	new group.

       - main() - check for NULLs on debug printout and
	handle gracefully

       - scan_args(), get_message_index() - added code
	to handle msnews.microsoft.com using 224 vice
	221 for the return value on the XHDR command,
	hence the -k (kludge) option.

testhost.c - main(), do_a_command() - added code to handle
	NNTP authorization.

sample/get.news* - added simple lock mechanism so two instances
	of script can't run at same time.

5 Nov 96 - suck-3.3.1 released

--Changes in Suck-3.2.2

suck.c - main() - changed call to do_cleanup so that
	it would be called even if no articles, since
	this is not an error.
       - get_articles(), scan_args() - added code to
	handle the -W wait/pause argument to pause x nr
	of seconds between y nr of messages.
       - do_cleanup() - don't generate error if the sorted
	file doesn't exist.

suck_config.h - added ifdef REGEX_H for killfile regex use.

killfile.h
killfile.c  - check_line()
	    - parse_a_file()
	    - free_node()
	    - check_a_group() - added code to do the regex checks
	 	on subject, from, path and nntphost.
	    - regex_scan()
	    - regex_check() - created for regex stuff.

rpost.c - do_batch() - added code to log failed uploads
	- log_fail() - created, create a file of failed uploads
	- do_article() - fixed a bug where if the last line
	of an article didn't end with a cr nl, then the . to
	signal eom wasn't recognized by remote server.

7 Oct 96 - Suck-3.3.0 released

--Changes in Suck-3.2.1

both.c - changed connect_to_nntphost, so can pass a portnr
	down, instead of always using the default 119.

suck.c
rpost.c
testhost.c - main(), scan_args() - changed to handle the
	new option -N, for selecting nnrp port number.

killfile.c - free_killfile() - removed lines that were
	explicitly freeing master.path, that is already
	handled in free_node().

21 Sep 96 - Suck-3.2.1 released

--Changes in Suck-3.2.0

both.c - build_args() - created, parses a file for args,
	and builds an argv type array from it.
       - free_args() - created, frees memory allocated
	in build_args()

chkhistory.c - cmp_msgid() - moved to suckutils.c, since
	it is also used in chkhistory_db.c.

dedupe.c - created, dedupes the linked list of msg-ids.

killfile.c - parse_a_file(), check_a_group() - added
	code to check for NNTP_Posting_Host in headers.

killprg.c - chk_msg_kill_fork() - fix bug in check of
	retval from read of result from child process
	  - killprg_closeit() - add nl to the sprintf
	so kill command is formatted correctly.

rpost.c - made all retvals use ENUM values
	main() - removed ifdef RPOST_NNRP stuff added
	  -M option processing (mode reader).  Rewrote
	argument handling stuff so can add arg file
	processing
	do_article(), do_batch() - fix so if problem with
	  article, it doesn't abort, just goes on to the
	  next article.
	do_batch() - changed to use new Pargs struct to 
	pass all the options down to it.
	scan_args() - created, moved argument handling
	to here.

suck.h - Removed #ifdef NNRP made this a run-time option
       - added more fields to Master (for arg stuff)

suck.c - main() - added -M option (mode reader) option.
	Moved all options to scan_args() so can do the
	read args from file stuff.  This meant adding some
	fields to master, so could pass back and forth,
	and re-writing the arg handling stuff.
       - scan_args() - created, handle args here.
       - get_announcements() - removed ifdef NNRP stuff
	 	added stuff to check do_modereader
       - do_cleanup() - change FP_DATADIR to FP_TMPDIR on
		N_NEWRC and N_SORTED so it looks in the
		right location.
       - build_list() - deleted, see below.
       - get_message_index(), allocnode(), do_supplemental()
		rewritten, now all they do is build a list
		of message-ids, then the linked list is passed
		to dedupe_list().  This gets rid of the old
		way of deduping as building the list, and
		hopefully will speed up large message downloads.
       - get_message_index() - Added code to handle maxread
		parameter in sucknewsrc.  Added check for count
       		on group line, so if no messages available we
		don't even try.

suckutils.c - do_lockfile() - change so PMaster is passed so 
	can print to status log.  Change print of removing
	stale lock file from errlog to status log, since this
	is not technically an error.

13 Sep 96 - Suck-3.2.0 released

--Changes in Suck-3.1.0

Makefile.in
config.h.in
configure.in - various changes so work on more systems

*.h - changed #define WORD to #define WORD 1
    - various changes so they work with configure

both.c killprg.c suck.c suckutils.c
	- added tests for limits.h
	- changed pid stuff to assume long vice int pids.  This
	  involved changing a couple of switches to if/else, and
	  re-doing printf/scanfs with casts to long.
	- get_message_index() - added loop at end to write
	  out rest of suck.newrc if the process was aborted
 	  (due to loss of pipe or other reasons).

both.h  - added test for pre-defined TRUE and FALSE
        - added test for PATH_MAX

rpost.c - added -U - P options for NNTP authorization

12 Jul 96 - suck-3.1.0 released.
 
--Changes in Suck-3.0.0

ALL - added const to lots of function calls, and other places.  Lots of
    - touch ups to make code compile without warning messages.
**  - changed default to use memmove() vice bcopy() and set up config.h
      so you would uncomment to use bcopy vice memmove (reverse of old method)
**  - changed _POSIX_PATH_MAX to PATH_MAX

*.h - all modified so not to get included multiple times, and to stand
      alone (#ifndef, #define, #endif stuff)

*.c - added #include <config.h> at top for autoconf stuff

config.h - moved to suck_config.h so don't conflict with autoconf stuff.
	 - changed CHECK_HISTORY_EXP to CHECK_HISTORY_OLD to make
	 - new version the default.

both.c - sgetline() - changed to use memmove vice bcopy
		    - rewrote a bit to not use ENODATA and ETIMEDOUT
       - signal_block() - added handling for SIGPIPE for killprg 

suck.c - send_command() - created to handle requests for authorization
	 when commands are sent. Replaces send_a_command().
       - main() - added -U, -P option processing, and rewrote to use
	 send_command().
       - get_announcements() 
	 get_message_index() 
	 get_one_article() - rewritten to use send_command()
       - send_a_command() - removed, replaced by send_command()
       - main() - added do_cleanup stuff
       - do_cleanup() - created, cleans up after myself
       - get_articles() - removed ifp variable and close() not needed.

killfile.c - get_one_article_kill() - rewritten to use send_command()
	   - parse_killfile()
	   - get_one_article_kill() - modified to handle call to 
	   either chk_msg_kill() or chk_msg_kill_fork()
	   - chk_msg_kill() - fixed bug in counting of commas on group line.
	   - changed functions for change from nrgrps to maxgrps or totgrps,
	   see below.
killfile.h - added defines for killprg.c stuff
	   - changed confusing defs of nrgrps in two different structs,
	     now one is maxgrps, one is totgrps.

killprg.c - created, this handles forking and calling of separate program
	  - to check messages for killing or keeping

rpost.c - do_article() - changed to use memmove vice bcopy
		       - fixed bug in duping beginning of lines dots.
	               - added long line support.
	- main()
	  dobatch() - add -d option.  This option will delete the batch
	              file on successful upload of all messages.

chkhistory.c - changed to make the new check_history() routine, made the
	     - old routine optional
	 - chkhistory() (new version) - removed extra fclose(fhist)

Makefile - Moved to Makefile.in, rewritten to work with autoconf
	 - added more warnings to defines and to tighten up code, added
	   -ansi and -pedantic, this necessitated bunch of little changes
	   in all files.
	 - added SOCKS support

Never released to public, beta testers only.

--Changes in Suck-2.6.3

killfile.c - pass_two() - fixed bug in malloc grpname (add +1 to
		strlen()).
	   - malloc_line() - added +1 to malloc

Makefile - fixed problem with older gcc's and linking (move $(LIBS)
		to end of compile lines). 

8 May 1996 - suck 2.6.3 released

--Changes in Suck-2.6.2

All files - changed wording so that everything refers to articles
	    vice messages, hopefully to avoid confusion.

Makefile - added support for Profiling so can find time wasters.
	   Added support for non standard locations of includes
	   and libs for INN DB stuff.  Added support for the
	   separate compiling of chkhistory or chkhistory_db.

chkhistory.c - Moved history database stuff to separate file, for
	       easier maintenance.

	     - chkhistory() - there is now an experimental version 
	       of the flat file history checker.  If you define
	       CHECK_HISTORY_EXP in config.h, you'll get the new version.
	       If not, you'll get the old.

chkhistory_db.c - created.
		- check_history() - fixed bad ifdefs, all should have
		had USE_ in front of them.
	        - chkhistory() - added missing master->nritems--

killfile.h 
killfile.c - add NRGRPS param to allow you to prevent SPAM articles

suck.h	   
suck.c     - added -K option to bypass killfiles, and added -H option
	     to bypass history file check.
	   - build_list() - added prelim 1st test to the dedupe portion
	     so that we don't always call strcmp() in hopes to speed things
	     up.

31 Mar 96 - suck-2.6.2 released

--Changes in Suck-2.6.1

killfile.c - corrected len params for hilines and lolines in Params structure.

	- cleaned up the docs and man pages in suck.1 had HIGHLINES which
	  should have read HILINES

	- added JDOC/* Japanese docs (Thanks Motoharu )

Makefile - fixed type in DBLIB

suck.c   - Makefile
         - main() - fixed version print to handle patch versions (2.6.1)

10 Mar 1996 - suck-2.6.1 released

--Changes in Suck-2.6

	- moved man pages and sample files to their own directories
	  so that the base dir only contains source code

ALL prgs - changed all stderr stuff to go through newly created error_log()
	 - function.  This is all part of the process to make these programs
	 - have no messages go to screen, for use in crons, background etc.
	 - Also added -e, -E, -s, and -S options to suck, rpost, and testhost.
	 - This necessitated a change in the command line processing of testhost.
	 - Now testhost requires hostname first.   

both.c   - number() - re wrote to handle leading spaces gracefully
	 - error_log() - created

chkhistory.c - Added the stuff to handle DBM, NDBM, DBZ history database schemes.
	     - I hope this stuff works as I have no way to test it.  I can't even
	     - compile the NDBM and DBZ stuff, as I don't even have the libs/include
	     - files stuff.
	     - cmp_msgid() - created, used to compare two articles ids IAW rfc 822.

config.h - added minor comments re the history stuff and the Makefile.  Added stuff 
	 - for group kill file processing.

killfile.c - parse_killfile(), free_killfile(), chk_msg_kill() - modified
	   - pass_two(), free_node(), check_a_group(), parse_a_file(), strnstr() - created
	   - Major re-write to handle group kill and delete files.
	   - also added quote param, to allow you to specify case-sensitive or 
           - case insensitive matches.
	   - Changed LINES param to HILINES and LOWLINES to match nr of lines above or
	   - below the nr of lines in a article.
	   - main() - commented out perror on no killfile, since this really isn't an error.

rpost.c  - get_article()
	 - get_batch() 
	 - main() - added command line options, see above.
		  - added fptr stuff and passed to subroutines to handle status messages.
		  - added #define RNEWS_NNRP to handle INN servers that need
		  - mode reader to post.

suck.c   - redid includes, moved various functions to suckutils.c
	 - main() - added -V option to print version number, also added
	 - command line options, see above, and added opening of status
	 - log for silent mode.  This changes the handling of the -s option.
	 - get_articles() - removed reduntant killfile tests since that code
			  - is now in killfile.c
	 - main()
	 - rnews_batch() - added -r option, and the ability to build multiple batch
			 - files, with the max size specified on the command line.
	 - get_message_index() - added check for group not found, if got re-write
			       - line to newrc
			       - added sanity check for a low high article nr,
			       - in case remote hosts resets its article nrs.
	 - main(), do_innbatch(), do_rnewsbatch() - added stuff for multiple feeds
		(postfix)
				
suckutils.c  - created, moved various functions not directly related
	       to the getting of the articles from suck.c to here
	     - full_path() - added postfix option so can have multiple feeds.

suckutils.h  - created

testhost.c   - added RETVAL enum used thru out program 
	     - main() - rewrote command line processing, see above.
	              - added fptr stuff for status messages
		      - added newgroups option.  
	     - do_a_command () - added fptr stuff for status messags
	                       - added option for args to command to be sent
	     - check_date_format() - created, used to ensure date/time for
	     			   - newgroups is in the right format.

Makefile - tweaks to handle new directory structure and to handle 
	   passing version number to compile.  Added code to handle
	   DB lib linking and passing args to compile.  Added user
	   defines for owner, group, and mode for the executables
	   and the man pages.

19 Feb 1996 - suck-2.6 released

--Changes in Suck-2.5.1

get.news.innxmit - added ${SITE} variable, fixed bug on ctlinnd call

chkhistory.c -  chkhistory() -  moved search list stuff inside the else{} routine so
 			     - it doesn't get done on a bogus line.

suck.c       - main()	     - fixed a couple of printfs still going to stdout vice
			     - where master.msgs points.

	     - get_articles() - added test for master being NULL to free_killfile() call

both.c       - sgetline() - added eob==start test in case buffer empty,
			    no data for the strstr() test with a dirty buffer
			  - THIS IS THE BUG THAT CAUSED MOST OF THE "No article found"
			    error messages

killfile.c   - free_killfile() - added test for master being NULL

29 Dec 95    - suck-2.5.1 released

--Changes in Suck-2.5
suck.c
killfile.c  - ALL ROUTINES - Added Master structure, changed basic operation mode. 
		Previously, we read suck.sorted to get each article.  This was causing
		a lot of disk activity.  Changed to keep the article list in memory.
		This included changing the handling of the restart, since we have to
		read the list into memory on a restart.  Also fixed handling of 
		stdout/stderr for status & error messages if in multifile mode or not.

suck.c	   - do_innbatch()
	   - do_rnewsbatch() - changed to use readdir() to build article files
			     - rather than just assuming all articles were downloading
			     - and going one up.  This way if one article didn't download
			     - the rest can still be batched up.
	   - full_path() - fixed a bug in the resolving of relative paths.
	   - get_articles() - add check for end of string when parsing for article id.
	                    - modified get_message loop to end on signal
	   - send_a_command() - rewrote if to switch to handle UNEXPECTEDANS better
	   - get_a_chunk() - rewrote a bit to speed it up (hopefully)
			   - modified to handle double dots IAW RFC 977 2.4.1
	   - sighandler()   - created
	   - main() - added call to signal() and to signal_block()
		    - added -a options, always_batch; if we download at least one
	 	    - article batch em up, even if we end on an error
		    - added lockfile stuff
	   - do_lockfile()  - created, Hope this is portable 	
	   - get_message_index() - any nr < 0 will cause us to just update sucknewsrc
			 	 - with the new high article nr (to start a newgroup)
	   			 - any line beginning with a # will be skipped
	   - get_messages() - added call to free_killfile()
	   - do_supplemental() - redid status messages a bit, added call to chkhistory()
	
killfile.h - added free_killfile() definition, added to KillStruct 

killfile.c - get_a_chunk_mem()  - modified to handle double dots IAW RFC 977 2.4.1
	   - parse_killfile()
	   - malloc_line() - created
	   - check_line() - created
	   - chk_msg_kill()  - added stuff to search Path, Subject, and From line
			     - and kill em if match
	   - free_killfile() - created

Makefile   - added mkdir -p to install option, cleaned up a bit

both.h	   - added enum for signal_block routine
	
both.c     - sgetline() - #ifdef TIMEOUT around timeval struct in variable declaration area
	                - added calls to signal_block()
	   - signal_block() - created, this is so the recv don't get interrupted by my abort signal	
	   - connect_to_nntphost() - added msgs parameter.  This way suck can 
	                           - point msgs to stderr if not in multifile mode
	
config.h   - added #define RNEWS for lpost
           - added #define bcopy() for portability sakes
	   - added #define MYSIGNAL stuff
	   - added #define CHECK_HISTORY stuff
	
lpost.c	   - moved #define RNEWS to config.h to conform with other prgs

get.news   - eliminated
get.news.innxmit -  created, for use by INND
                 - changed to use flush vice reload for ctlinnd
get.news.rnews - created, for use by CNEWS
testhost.c - added #include "config.h"

timer.c    - changed message printout to include mins and seconds
	   - added TIMER_TIMEONLY option to just disply time, not bytes

timer.h    - added to enum
	
chkhistory.h -
chkhistory.c - created, allows to check /usr/lib/news/history for any articles this
	     - system already has, and not download them

suck.1
rpost.1
lpost.1
testhost.1   - created

README
README.NEWS  - merged, since much of the docs are now in the man pages.

1 Dec 95 - suck-2.5 released

--Changes in Suck-2.4.1

config.h  - got rid of ##ifdef KILLFILE around #define N_KILLLOG to avoid
		make errors if KILLFILE is not defined

rpost.c	  - do_batch() - changed do_article() to retval=do_article()
		so errors in upload got passed back.

suck.c    - main() 
	    get_articles() - added -s option, to force display of the status
	   	message for each message to stderr vice stdout.  That way
		if someone is not using batch mode, they can still see those
		messages.
	  - get_articles() - fixed bug where restart file was always deleted.
Oct 8, 1995 - released

--Changes in 2.4
Makefile  - various tweaks
	  - moved DEBUG stuff to config.h

get.news  - added comments about where to change for rnews
          - changed the way I test to see if I am online to using a ping
	  - vice just checking to see if PPP is up and running

suck.c	  - get_announcement() - added #ifndef NNRP if NNTP server is called.
		NNTP servers don't need 'mode reader' command, so don't
		send it.
	  - full_path() - modified to allow for command line setting of directory paths;
		changed variables passed to it.
	  - main() - modified arg checking routine to allow for command line setting of
		directory paths
	  - get_messages() - changed checkdir() to use full_path()
	  - get_articles() - added #ifdef TIMER stuff
	  - get_articles() - changed memcpy() to bcopy() for portability's sake
	  - full_path()    - changed PATH_MAX to POSIX_PATH_MAX for portability's sake
	  - do_innbatch()
	  - do_rnewsbatch()
	  - get_articles() - added logcount, changed printf to make article file names
			     00XX-1666, where leading zeros are applied
	  - changed B_FALSE, B_INNXMIT, B_RNEWS to BATCH_ to avoid error on Sun compiler
	  - changed informational msgs to print to stdout vice stderr
	  - get_one_article() - created
	  - get_a_chunk()  - created
	  - send_a_message() - created
	  - get_articles() - moved all the stuff for one article to get_one_article()
			   - send_a_message() and get_a_chunk() and added killfile 
			   - processing stuff and ifdef KILLFILE stuff
	  - get_message_index() 
	    main()	   - moved handling of restart from get_articles() to main()

	  - do_dedupe()    - modified
	  - build_list()   - created
	  - get_articles() - added supplemental list processing, so user can specify
			   - additional article numbers to download, in addition
			   - to those from sucknewsrc.  This is so a user can specify
			   - articles that will NOT be checked against killfile stuff
			   - Now suck.sorted has two fields per line, msgnr and a
			   - one char field that states whether or not I must download
			   - this article. If I must, I will bypass killfile routines.
	
killfile.c  -
killfile.h  - created, contains stuff related to killfile processing

suck.h    - created, contains functions in suck.c needed by killfile.c stuff

config.h  - created, moved user changeable #defines to here.  Renamed some
		so that they make more sense.  Renamed suck.tmp to suck.newrc
		to be more descriptive.
	  - added TIMEOUT option
	  - moved DEBUG stuff from Makefile to here

both.c	  - full_path() - moved to suck.c
	  - sgetline()  - #ifdef TIMEOUT stuff, to allow us to timeout if
	                  no data received from socket in some defined time.
			- plus some tweaks to speed up the routine
	  - changed informational msgs to print to stdout vice stderr
	  
rpost.c   - do_batch() - changed behavior if infile doesn't exist.  Use to
		totally bomb the program, Now just displays error msg and
		goes on to next article
	  - changed informational msgs to print to stdout vice stderr
	  - do_batch() - some INNs put article number in outgoing file
		       - in addition to the file name, so added check for this

lpost.c   - changed informational msgs to print to stdout vice stderr

timer.c   - created
timer.h   - created, contains the timer display and update routines

testhost.c- created, allows you to see if host is active and what commands it accepts
	  - added LIST option to get active list

1 Oct 95 - posted

--Changes in 2.3B
Rewrote code to my code styles, this basically means: no global variables,
	single exit(), #define anything liable to change, change indentation.

both.c  - added full_path() so can put files anywhere, just change #defines in both.h.
	  added do_debug(), MyPerror() for easier debugging.
	  sgetline(), total rewrite so less character moving around
	  and handles partial lines, returns with the nl in buffer.
both.h  - clarifed debugging options.
	  centralized all #defines here for global changes
lpost.c  - just cosmetic changes, as I hope to phase this out.
Makefile - added a couple of comments
rpost.c  - rewrote to handle batch option
	   added do_article(), process one article
	   added do_batch(), loop thru batch file, process args
	   run filter as needed
	   added do_filter(), basically just fork() and execl()
suck.c   - main() rewrite to handle args
	   get_articles() rewritten to handle multifile output
	   added get_announcements() to move this out of main()
	   added do_dedupe() so no more system() calls.
	   added allocnode() for use by do_dedupe()
	   added checkdir() to check for and make directory
	   added do_innbatch() to build batch file of article file
	   names needed by innxmit
	   added do_rnewsbatch() to build file formatted for rnews
8 August 95 Suck2.3B released

--NEW MAINTAINER 3 July 1995 boby@pixi.com
Minor changes so no warning msgs from gcc2.7.0.
suck.c - if low=high, never got article, fixed 
suck.c - changed if lastread in sucknewsrc ==0 no get to == -1
3 July 1995 suck-2.2 released

--Changes in 2.2: 
Sgetline now cares for maxlen which means lines > 1024 bytes will
be folded. Lpost got the option -v to print some debugging output.
The other changes are only cosmetical :).

--Changes in 2.1.1:
Despite of the above proclamation i forgot to increase the buffer ;).
This is now fixed (hopefully). You see there is definately a need
for a new maintainer.

--Changes in 2.1: 
Radically increased buffer (+1 byte) thanks to operator@melchior.frmug.fr.net
rpost now more RFC0977 conform.
Renamed rpost.sh to blow.
Added another local posting script by huber@iamexwi.unibe.ch for inn.

--Changes in 2.0: 
added inews-alike rpost thanks to inspiration from ecarp@netcom.com.

--Changes in 1.4: 
added restart ability thanks to inspiration from David.H.West@um.cc.umich.edu.

--Changes in 1.3: 
fixed numeric ip handling.

--Changes in 1.2: 
added a missing htons() thanks to laurent@brasil.frmug.fr.net
added numeric ip address handling.


	  


