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