SUCK(1)

NAME

suck - Pull a small newsfeed from an NNTP server, avoiding the NEWNEWS command.

SYNOPSIS

suck [ hostname ] [ @filename ] [ -V ] [ -K ] [ -L[SL] ] [ filename ] [
-H ] [ -HC ] [ -HF filename ] [ -HI ] [ -HN ] [ -HO ] [ -d[tmd] dirname
] [ -s | -S filename ] [ -e | -E filename ] [ -a ] [ -m  ]  [  -b[irlf]
batchfile  ]  [ -r filesize ] [ -p extension ] [ -U userid ] [ -P pass-
word ] [ -Q ] [ -c ] [  -M  ]  [  -N  port_number  ]  [  -W  pause_time
pause_nr_msgs ] [ -w pause_time pause_nr_msgs ] [ -l phrase_file ] [ -D
] [ -R ] [ -q ] [ -C count ] [ -k ] [ -A ] [ -AL  activefile  ]  [  -hl
localhost ] [ -bp ] [ -T timeout ] [ -n ] [ -u ] [ -z ] [ -x ] [ -B ] [
-O ] [ -G ] [ -X ] [ -f ] [ -y post_filter ] [ -F ] [ -g ]  [  -i  num-
ber_to_read ] [ -Z ] [ -rc ] [ -lr ] [ -sg ] [ -ssl ] [ -SSL ]

Options valid in all modes tname

The  hostname  may  optionally  include  the  port  number, in the form
Host:Port.Ifthisoptionisused,anyportnumberspecified via the  -N  option
is ignored.

@filename

This option tells suck to read other options from a file in addition to
the commandline.

-a

This option forces suck to always batch  up  any  downloaded  articles,
even  if  suck  aborts  for any reason.  Without this option, suck will
only batch up articles if it finishes successfully or is cancelled by a
signal (see below).

-A

This  option  tells  suck to scan the localhost (specified with the -hl
option) and use its active file to build  and  update  the  sucknewsrc.
If you add a group to your local server, suck will add it to sucknewsrc
and download articles.  Or, if you  delete  a  group  from  your  local
server,  it will be deleted from sucknewsrc.  If posting is not allowed
to a particular group, then the line in sucknewsrc  is  just  commented
out.   With this option, you should never have to edit your sucknewsrc.
In case you have newsgroups (like control and junk) that you don't want
downloaded, you can put these newsgroups in a file "active-ignore", one
per line, and suck will ignore  these  newsgroups  when  it  scans  the
localhost.   If  your  system  supports  regex(),  you  may use regular
expressions in the active-ignore file  to  skip  multiple  groups,  eg:
fred.*.   If  you  use the -p (postfix) option, suck will check for the
existence of an active-ignore file with the postfix.  If  that  doesn't
exist,  then  suck will check for the existence of the file without the
postfix.

NOTE: If the localhost is on a non-standard port, the port  number  may
be specified as part of the hostname, in the form Host:Port.

NOTE:  If  you use regular expressions, suck will silently add a "^" to
the beginning of the group name, and a "$" to the end of the group name
if they aren't already present, so that if you have "comp.os.linux", it
won't match  "comp.os.linux.answers"  or  if  you  have  "alt.test"  it
doesn't match "comp.alt.test".

-AL activefile

This  option  is identical to the -A option, except it reads the active
file from the local file specified  instead  of  reading  it  from  the
localhost.   All the caveats from the -A option apply to this option as
well.  If both options are used on the command line, suck  first  tries
to use the -A option, then if that fails it uses this option.

-B

This  option  tells  suck  to  attempt  to batch up any articles in its
directory BEFORE starting to download messages.  This can be useful  if
you  have  a problem with the previous download.  This option will only
work if you specify a batch option (see below).   If there are no  mes-
sages  to  batch up, some of the batch options may produce warning mes-
sages.  They may be safely ignored.  Also, if the batch files exist  at
the  end  of  the run, in inn-batch mode, it will be overwritten, since
the new batch file will contain all messages.  In rnews  mode,  if  the
batch file exists, it will abort and not batch up any messages.

-c

If  this  option  is  specified, suck will clean up after itself.  This
includes:
       1. Moving sucknewsrc to sucknewsrc.old
       2. Moving suck.newrc to sucknewsrc
       3. rm suck.sorted and suckothermsgs.

-C count

This option tells suck to drop the connection and reopen it every count
number of articles.  This is designed to battle INN's LIKE_PULLERS=DONT
option, that some folks compile in. With LIKE_PULLERS=DONT,  after  100
messages  INN  will  pause between every message, dramatically reducing
your download speed. I don't recommend the use of this, but if you have
no other choice....

-dd dirname

-dm dirname

-dt dirname

Specify the location of the various files used by suck.

-dd  dirname  =  directory of data files used by suck (sucknewsrc suck-
killfile suckothermsgs active-ignore sucknodownload)

-dm dirname = directory for storage of articles  created  in  Multifile
mode  or batch mode.  DO NOT make this the same as the directories used
for the -dt or -d options, or you  will  lose  all  your  configuration
files.

-dt  dirname  =  directory  of  temp files created by suck (suck.newrc,
suck.sort, suck.restart, suck.killlog, suck.post).

-D

This  option  tells  suck  to  log  various   debugging   messages   to
"debug.suck", primarily for use by the maintainer.

-e | -E filename

These  options  will  send  all  error  messages (normally displayed on
stderr), to an alternate file.  The lower case version, -e,  will  send
the error messages to the compiled-in default defined in suck_config.h.
The default is suck.errlog.  The upper case version, -E,  requires  the
filename parameter.  All error messages will then be sent to this file.

-f

This  option  tells  suck to reconnect after deduping, and before down-
loading the articles.  This is in case long dedupe times cause timeouts
on the remote end.

-F

This  option  tells  suck  to  reconnect after reading the local active
file, and before downloading the Msg-IDs.  This is in case of  a  large
active file, which causes timeouts on the remote end.

-g

This  option  causes  suck to only download the headers of any selected
articles.  As a result of this, any batching of  articles  is  skipped.
This option does work with killfiles, however, killfile options such as
BODYSIZE> will be ignored, since the body of the article will never  be
downloaded.

-G

This  option  causes  suck  to display the message count and BPS status
lines in a slightly different format, more suitable for use by a filter
program (such as a GUI).

-H

This option will cause suck to bypass the history check.

-HC

Use DBZ for history file index, cnews or inn 1.

-HF history_file_name

This  option  tells suck the location of the history file.  The default
is at /var/lib/news/history.

-HI

Use inn 2.4 history file index.

-hl localhost

This option specifies the localhost name.  This option is required with
both the -A and the -bp option.

-HN

No history file.  (Same as -H)

-HO

Use history file with no index.

-i number_to_read

This  option  tells  suck the number of articles to download if you are
using the -A or -AL option, and a new group is added.   The default  is
defined  in  suck_config.h  (ACTIVE_DEFAULT_LASTREAD,  currently -100).
NOTE:  This must be a negative number (eg -100, -50), or 0, to download
all articles currently available in the group.

-k

This  option tells suck to NOT attach the postfix from the -p option to
the names of the killfiles, both the  master  killfile  and  any  group
files.   This  allows you to maintain one set of killfiles for multiple
servers.

-K

This option will cause suck to bypass checking the killfile(s).

-l phrase_file

This option tells suck to load in an alternate phrase file, instead  of
using  the  built-in  messages.   This  allows  you  to have suck print
phrases in another language, or to allow you to customize the  messages
without re-building suck.  See below.

-lr

This  option, is used in conjunction with the highest article option in
the sucknewsrc, to download the oldest articles, vice the newest  arti-
cles. See that section for more details.

-L

This option tells suck to NOT log killed articles to suck.killlog.

-LF filename

This  option allows you to override the built-in default of "suck.kill-
log" for the file which contains the log entries for killed articles.

-LL

This option tells suck to create long log entries for each killed arti-
cle.   The  long  entry contains the short log entry and the header for
the killed message.

-LS

This option tells suck to create short  log  entries  for  each  killed
article.   The  short  entry contains which group and which pattern was
matched, as well as the MsgID of the killed article.

-M

This option tells suck to send the "mode reader" command to the  remote
server.   If  you  get an invalid command message immediately after the
welcome announcement, then try this option.

-n

This option tells suck to use the article  number  vice  the  MsgId  to
retrieve  the  articles.   This  option is supposedly less harsh on the
remote server.  It can also eliminate problems if  your  ISP  ages  off
articles  quickly  and  you  frequently get "article not found" errors.
Also, if your ISP uses DNEWS, you might need this  option  so  that  it
knows you're reading articles in a group.

-N port_number

This  option  tells suck to use an alternate NNRP port number when con-
necting to the host, instead of the default, 119.

-O

This option tells suck to skip the first article upon restart.  This is
used  whenever there is a problem with an article on the remote server.
For some reasons, some NNTP servers, when they have a  problem  with  a
particular  article, they time out.  Yet, when you restart, you're back
on the same article, and you time out again.  This option tells suck to
skip  the  first  article upon restart, so that you can get the rest of
the articles.

-p extension

This extension is added to all files so that you can have multiple site
feeds.   For  example,  if  you  specify -p .dummy, then suck looks for
sucknewsrc.dummy, suckkillfile.dummy, etc, and creates its  temp  files
with  the  same  extension.  This will allow you to keep multiple suck-
newsrc files, one for each site.

-q

This option tells suck to not display the BPS and  article  count  mes-
sages  during  download.   Handy  when running suck unattended, such as
from a crontab.

-R

This option tells suck to skip a rescan of the remote newserver upon  a
restart.   The  default is to rescan the newserver for any new articles
whenever suck runs, including restarts.

-rc

This option tells suck to change its behavior when  the  remote  server
resets  its  article  counters.    The default behavior is to reset the
lastread in sucknewsrc to the current high article counter.  With  this
option, suck resets the lastread in sucknewsrc to the current low arti-
cle counter, causing it to suck all articles in the  group,  and  using
the historydb routines to dedupe existing articles.

-s | -S filename

These options will send all status messages (normally displayed on std-
out), to an alternate file.  The lower case version, -s, will send  the
status  messages  to  the compiled-in default defined in suck_config.h.
The default is /dev/null, so no status messages will be displayed.  The
upper  case  version,  -S, requires the filename parameter.  All status
messages will then be sent to this file.

-sg

This option tells suck to add the name of the current group being down-
loaded,  if  known,  to the BPS display.   Typically the only time suck
doesn't know the group name is if an  article  is  downloaded  via  the
suckothermsgs file.

-ssl

This option tells suck to use SSL to talk to the remote server, if suck
was compiled with SSL support.

-SSL

This option tells suck to use SSL to talk to the local server, if  suck
was compiled with SSL support.

-T timeout

This  option  overrides the compiled-in TIMEOUT value. This is how long
suck waits for data from the remote host before timing out  and  abort-
ing.  The timeout value is in seconds.

-u

This  option  tells  suck to send the AUTHINFO USER command immediately
upon connect to the remote server, rather than wait for a  request  for
authorization.  You must supply the -U and -P options when you use this
option.

-U userid

-P password

These two options let you specify a userid and password, if  your  NNTP
server requires them.

-Q

This  option tells suck to get the userid and password for NNTP authen-
tication from the environment  variables  "NNTP_USER"  and  "NNTP_PASS"
vice the -U or -P password.  This prevents a potential security problem
where someone doing a ps command can see your userid and password.

-V

This option will cause suck to print out the version  number  and  then
exit.

-w pause_timer pause_nr_msgs

This  option  allows  you to slow down suck while pulling articles.  If
you send suck a predefined signal (default SIGUSR1, see suck_config.h),
suck  will  swap  the  default  pause  options  (if specified by the -W
option), with the values from this option.  For example, you  run  suck
with  -w  2 2, and you send suck a SIGUSR1 (using kill), suck will then
pause 2 seconds between every other message,  allowing  the  server  to
"catch  its  breath."  If you send suck another SIGUSR1, then suck will
put back the default pause options.  If no pause options were specified
on  the  command  line  (you  omitted -W), then suck will return to the
default full speed pull.

-W pause_time pause_nr_msgs

This option tells suck to pause between the download of articles.   You
need  to specify how long to pause (in seconds), and how often to pause
(every X nr of articles). Ex: -W 10 100 would cause suck to  pause  for
10  seconds  every  100 articles.  Why would you want to do this?  Suck
can cause heavy loads on a remote server, and  this  pause  allows  the
server to "catch its breath."

-x

This  option  tells  suck to not check the Message-IDs for the ending >
character.  This option is for brain dead NNTP  servers  that  truncate
the XHDR information at 72 characters.

-X

This option tells suck to bypass the XOVER killfiles.

-y post_filter

This option is only valid when using any of batch modes.  It allows you
to edit any or all of the articles downloaded  before  posting  to  the
local host.   See below for more details.

-z

This  option tells suck to bypass the normal deduping process.  This is
primarily for slow machines where the deduping takes  longer  than  the
download of messages would.  Not recommended.

-Z

This  option  tells suck to use the XOVER command vice the XHDR command
to retrieve the information needed to download articles.  Use  this  if
your remote news server doesn't support the XHDR command.

LONG OPTION EQUIVALENTS

-a --always_batch
-bi --batch-inn
-br --batch_rnews
-bl --batch_lmove
-bf --batch_innfeed
-bp --batch_post
-c --cleanup
-dt --dir_temp
-dd --dir_data
-dm --dir_msgs
-e --def_error_log
-f --reconnect_dedupe
-g --header_only
-h --host
-hl --localhost
-k --kill_no_postfix
-l --language_file
-lr --low_read
-m --multifile
-n --number_mode
-p --postfix
-q --quiet
-r --rnews_size
-rc --resetcounter
-s --def_status_log
-sg --show_group
-ssl --use_ssl
-w --wait_signal
-x --no_chk_msgid
-y --post_filter
-z --no_dedupe
-A --active
-AL --read_active
-B --pre-batch
-C --reconnect
-D --debug
-E --error_log
-G --use_gui
-H --no_history
-HF --history_file
-K --killfile
-L --kill_log_none
-LS --kill_log_short
-LL --kill_log_long
-M --mode_reader
-N --portnr
-O --skip_on_restart
-P --password
-Q --password_env
-R --no_rescan
-S --status_log
-SSL --local_use_ssl
-T --timeout
-U --userid
-V --version
-W --wait
-X --no_xover
-Z --use_xover

DESCRIPTION

MODE 1 - stdout mode

%suck
%suck myhost.com
Suck grabs news from an NNTP server and sends the articles to stdout. Suck accepts as argument the name of an NNTP server or if you don't give an argument it will take the environment variable NNTPSERVER. You can redirect the articles to a file or compress them on the fly like "suck server.domain | gzip -9 > output.gz". Now it's up to you what you do with the articles. Maybe you have the output already on your local machine because you used a slip line or you still have to transfer the output to your local machine.

MODE 2 - Multifile mode

%suck -m
%suck myhost.com -m
Suck grabs news from an NNTP server and stores each article in a separate file. They are stored in the directory specified in suck_config.h or by the -dm command line option.

MODE 3 - Batch mode

%suck myhost.com -b[irlf] batchfile
or %suck myhost.com -bp -hl localhost
or %suck myhost.com -bP NR -hl localhost
%suck myhost.com -b[irlf] batchfile
Suck will grab news articles from an NNTP server and store them into files, one for each article (Multifile mode). The location of the files is based on the defines in suck_config.h and the command line -dm. Once suck is done downloading the articles, it will build a batch file which can be processed by either innxmit or rnews, or it will call lmove to put the files directly into the news/group/number format.
-bi - build batch file for innxmit. The articles are left intact, and a batchfile is built with a one-up listing of the full path of each article. Then innxmit can be called:

%innxmit localhost batchfile
-bl - suck will call lmove to put the articles into news/group/number format. You must provide the name of the configuration file on the command line. The following arguments from suck are passed to lmove:

The configuration file name (the batchfile name provided with this option)
The directory specified for articles (-dm or built-in default). The errorlog to log errors to (-e or -E), if provided on the command line.
The phrases file (-l), if provided on the command line.
The Debug option, if provided on the command line.
-br - build batch file for rnews. The articles are concatenated together, with the #!rnews size article separator. This can the be fed to rnews:

%rnews -S localhost batchfile
-r filesize specify maximum batch file size for rnews. This option allows you to specify the maximum size of a batch file to be fed to rnews. When this limit is reached, a new batch file is created AFTER I finish writing the current article to the old batch file. The second and successive batch files get a 1 up sequence number attached to the file name specified with the -br. Note that since I have to finish writing out the current article after reaching the limit, the max file size is only approximate.
-bf - build a batch file for innfeed. This batchfile contains the MsgID and full path of each article. The main difference between this and the innxmit option is that the innfeed file is built as the articles are downloaded, so that innfeed can be posting the articles, even while more articles are downloaded.
-bp - This option tells suck to build a batch file, and post the articles in that batchfile to the localhost (specified with the -hl option). This option uses the IHAVE command to post all downloaded articles to the local host. The batch file is called suck.post, and is put in the temporary directory (-dt). It is deleted upon completion, as are the successfully posted articles. If the article is not wanted by the server (usually because it already exists on the server, or it is too old), the article is also deleted. If other errors occur, the article is NOT deleted. With the following command line, you can download and post articles without worrying if you are using INND or CNEWS.

%suck news.server.com -bp -hl localhost -A -c
-bP NR - This option works identically to -bp above, except instead of waiting until all articles are downloaded, it will post them to the local server after downloading NR of articles.

%suck news.server.com -bP 100 -hl localhost -A -c

SUCK ARGUMENT FILE

If you specify @filename on the command line, suck will read from filename and parse it for any arguments that you wish to pass to suck. You specify the same arguments in this file as you do on the command line. The arguments can be on one line, or spread out among more than one line. You may also use comments. Comments begin with '#' and go to the end of a line. All command line arguments override arguments in the file.
# Sample Argument file
-bi batch # batch file option
-M # use mode reader option

SUCKNEWSRC

Suck looks for a file sucknewsrc to see what articles you want and which you already received. The format of sucknewsrc is very simple. It consists of one line for each newsgroup. The line contains two or three fields.

The first field is the name of the group.

The second field is the highest article number that was in the group when that group was last downloaded.

The third field, which is optional, limits the number of articles which can be downloaded at any given time. If there are more articles than this number, only the newest are downloaded. If the third field is 0, then no new messages are downloaded. If the command line option -lr is specified, instead of downloading the newest articles, suck will download the oldest articles instead.

The fields are separated by a space.
comp.os.linux.announce 1 [ 100 ]
When suck is finished, it creates the file suck.newrc which contains the new sucknewsrc with the updated article numbers.
To add a new newsgroup, just stick it in sucknewsrc, with a highest article number of -1 (or any number less than 0). Suck will then get the newest X number of messages for that newsgroup. For example, a -100 would cause suck to download the newest 100 articles for that newsgroup.
To tell suck to skip a newsgroup, put a # as the first character of a line.

SUCKKILLFILE and SUCKXOVER

There are two types of killfiles supported in suck. The first, via the file suckkillfile, kills articles based on information in the actual article header or body. The second, via the file suckxover, kills articles based on the information retreived via the NNTP command XOVER. They are implemented in two fundamentally different ways. The suckkillfile killing is done as the articles are downloaded, one at a time. The XOVER killing is done while suck is getting the list of articles to download, and before a single article is downloaded. You may use either, none or both type of killfiles.

SUCKKILLFILE and GROUP KEEP/KILLFILES

If suckkillfile exists, the headers of all articles will be scanned and the article downloaded or not, based on the parameters in the files. If no logging option is specified (see the -L options above), then the long logging option is used.

Comments lines are allowed in the killfiles. A comment line has a "#" in the first position. Everything on a comment line is ignored.

Here's how the whole keep/delete package works. All articles are checked against the master kill file (suckkillfile). If an article is not killed by the master kill file, then its group line is parsed. If a group file exists for one of the groups then the article is checked against that group file. If it matches a keep file, then it is kept, otherwise it is flagged for deletion. If it matches a delete file, then it is flagged for deletion, otherwise it is kept. This is done for every group on the group line.

NOTES: With the exception of the USE_EXTENDED_REGEX parameter, none of these parameters are passed from the master killfile to the individual group file. Each killfile is separate and independant. Also, each search is case-insensitive unless specifically specified by starting the search string with the QUOTE character (see below). However, the parameter part of the search expression (the LOWLINE=, HILINE= part) is case sensitive.

PARAMETERS

LOWLINES=#######
HILINES=#######
NRGRPS=####
NRXREF=####
QUOTE=c
NON_REGEX=c
GROUP=keep groupname filename OR GROUP=delete groupname filename
PROGRAM=pathname
PERL=pathname
TIEBREAKER_DELETE
GROUP_OVERRIDE_MASTER
USE_EXTENDED_REGEX
XOVER_LOG_LONG
HEADER:
Any Valid Header Line:
BODY:
BODYSIZE>
BODYSIZE<
All parameters are valid in both the master kill file and the group files, with the exception of GROUP, PROGRAM, PERL, TIEBREAKER_DELETE, and GROUP_OVERRIDE_MASTER. These are only valid in the master kill file.

KILL/KEEP Files Parameters

HILINES= Match any article longer than the number of lines specified.

LOWLINES= Match any article shorter than the number of lines specified.

NRGRPS= This line will match any article which has more groups than the number specified on the Newsgroups: line. Typically this is used in a killfile to prevent spammed articles. (A spammed article is one that is posted to many many groups, such as those get-rich quick schemes, etc.)

NRXREF= This line will match any article that has more groups than than the number specified on the Xref: line. This is another spamm stopper. WARNING: the Xref: line is not as accurate as the Newsgroups: line, as it only contains groups known to the news server. This option is most useful in an xover killfile, as in Xoverviews don't typically provide the Newsgroups: line, but do provide the Xref: line.

HEADER: Any Valid Header Line: Suck allows you to scan any single header line for a particular pattern/string, or you may scan the entire article header. To scan an individual line, just specify it, for example to scan the From line for boby@pixi.com, you would put
From:boby@pixi.com
Note that the header line EXACTLY matches what is contained in the article. To scan the Followup-To: line, simply put To search the same header line for multiple search items, then each search item must be on a separate line, eg:
From:boby@xxx
From:nerd@yyy
Subject:suck
Subject:help
The parameter HEADER: is a special case of the above. If you use the HEADER: parameter, then the entire header is searched for the item. You are allowed multiple HEADER: lines in each killfile.
When suck searches for the pattern, it only searches for what follows the :, and spaces following the : are significant. With the above example "Subject:suck", we will search the Subject header line for the string "suck". If the example had read "Subject: suck", suck would have searched for the string " suck". Note the extra space.
If your system has regex() routines on it, then the items searched for can be POSIX regular expressions, instead of just strings. Note that the QUOTE= option is still applied, even to regular expressions.
BODY: This parameter allows you to search the body of an article for text. Again, if your system has regex(), you can use regular expressions, and the QUOTE= option is also applied. You are allowed multiple BODY: lines in each killfile. WARNING: Certain regex combinations, especially with .* at the beginning, (eg BODY:.*jpg), in combination with large articles, can cause the regex code to eat massive amounts of CPU, and suck will seem like it is doing nothing.
BODYSIZE> This parameter will match an article if the size of its body (not including the header) is greater than this parameter. The size is specified in bytes.
BODYSIZE< This parameter will match an article if the size of its body, is less than this parameter. The size is specified in bytes.
QUOTE= This item specifies the character that defines a quoted string. The default for this is a ". If an item starts with the QUOTE character, then the item is checked as-is (case significant). If an item does not start with the QUOTE character, then the item is checked with out regard to case.
NON_REGEX= This items specifies the character that defines a non-regex string. The default for this is a %. If an item starts with the NON_REGEX character, then the item is never checked for regular expressions. If the item doesn't start with the QUOTE character, then suck tries to determine if it is a regular expression, and if it is, use regex() on it. This item is so that you can tell suck to treat strings like "$$$$ MONEY $$$$" as non-regex items. IF YOU USE BOTH QUOTE and NON_REGEX characters on a string, the NON_REGEX character MUST appear first.
GROUP= This line allows you to specify either keep or delete parameters on a group by group basis. There are three parts to this line. Each part of this line must be separated by exactly one space. The first part is either "keep" or "delete". If it is keep, then only articles in that group which match the parameters in the group file are downloaded. If it is delete, articles in that group which match the parameters are not downloaded. The second part, the group name is the full group name for articles to check against the group file. The group name may contain an * as the last character, to match multiple groups, eg: "comp.os.linux.*" would match comp.os.linux.announce, comp.os.linux.answers, etc.. The third part specifies the group file which contains the parameters to check the articles against. Note, that if you specified a postfix with the -p option, then this postfix is attached to the name of the file when suck looks for it, UNLESS you use the -k option above.
GROUP_OVERRIDE_MASTER This allows you to override the default behavior of the master kill file. If this option is in the master kill file, then even if an article is flagged for deletion by the master kill file, it is checked against the group files. If the group files says to not delete it, then the article is kept.
TIEBREAKER_DELETE This option allows you to override the built-in tiebreaker default. The potential exists for a message to be flagged by one group file as kept, and another group file as killed. The built-in default is to then keep the message. The TIEBREAKER_DELETE option will override that, and caused the article to be deleted.
USE_EXTENDED_REGEX This option tells suck to use extended regular expressions vice standard regular expressions. It may used in the master killfile, in which case it applies to all killfiles, or in an individual killfile, where it only applies to the parameters that follow it in the killfile.
XOVER_LOG_LONG This option tells suck to format the killfile generated by from an Xover killfile so that it looks like an article header. The normal output is to just print the Xover line from theserver.
PROGRAM= This line allows suck to call an external program to check each article. You may specify any arguments in addition to the program name on this line. If this line is in your suckkillfile, all other lines are ignored. Instead, the headers are passed to the external program, and the external program determines whether or not to download the article. Here's how it works. Suck will fork your program, with stdin and stdout redirected. Suck will feed the headers to your program thru stdin, and expect a reply back thru stdout. Here's the data flow for each article:

1. suck will write a 8 byte long string, which represents the length of the header record on stdin of the external program. Then length is in ascii, is left-aligned, and ends in a newline (example: "1234 \n").
2. suck will then write the header on stdin of the external program.
3. suck will wait for a 2 character response code on stdout. This response code is either "0\n" or "1\n" (NOT BINARY ZERO OR ONE, ASCII ZERO OR ONE). If the return code is zero, suck will download the article, if it is one, suck won't.
4. When there are no more articles, the length written down (for step 1) will be zero (again in ascii "0 \n"). Suck will then wait for the external program to exit before continuing on. The external program can do any clean up it needs, then exit. Note: suck will not continue processing until the external program exits.
PERL= This line allows suck to call a perl subroutine to check each article. In order to use this option, you must edit the Makefile, specifically the PERL* options. If the PERL= line is in your suckkillfile, all other lines are ignored. Instead, the header is sent to your perl subroutine, and your subroutine determines if the article is downloaded or not. The parameter on the PERL= line specifies the file name of the perl routine eg:

PERL=perl_kill.pl
See the sample/perl_kill.pl for a sample perl subroutine. There are a couple of key points in this sample. The "package Embed::Persistant;" must be in the perl file. This is so that any variable names you create will not conflict with variable names in suck. In addition, the subroutine you define must be "perl_kill", unless you change the PERL_PACKAGE_SUB define in suck_config.h. Also, your subroutine must return exactly one value, an integer, either 0 or 1. If the subroutine returns 0, then the article is downloaded, otherwise, the article is not downloaded.
NOTES: The perl file is only compiled once, before any articles are downloaded. This is to prevent lengthy delays between articles while the perl routine is re-compiled. Also, you must use Perl 5.003 or newer. In addition, you are advised to run 'perl -wc filter' BEFORE using your filter, in order to check for syntax errors and avoid problems.

SUCKXOVER

If the file suckxover exists, then suck uses the XOVER command to get information on the articles and decide whether or not to download the article. Xover files use the same syntax as suckkillfiles, but supports a subset of the commands.

The following killfile commands are not supported in suckxover files:
NRGROUPS:
HEADER:
BODY:
TIEBREAKER_DELETE:
Only the following header lines will be checked:
Subject:
From:
Message-ID:
References:
The behaviour of the size commands ( BODYSIZE>, BODYSIZE<, HILINES, and LOWLINES ) specify the total size of the article (not just the body) in bytes or lines, respectively.
All other parameters are allowed. However, if you use an invalid parameter, it is silently ignored.

SUCKXOVER and PROGRAM= or PERL= parameters

These parameters are supported in a suckxover file, however they work slightly differently than described above. The key difference is that prior to sending each individual xoverview line to your program, suck will send you the overview.fmt listing that it retrieves from the server. This overview.fmt is a tab-separated line, describing the fields in each overview.fmt line.

For the PROGRAM= parameter, suck will first send your program an 8 byte long string, which is the length of the overview.fmt. This length is formatted as the lengths above (see nr1 under PROGRAM=). Suck will then send the overview.fmt. After that, the flow is as described above. See sample/killxover_child.c for an example.

For the PERL= parameter, Your program must have two subroutines. The first is perl_overview, which will recieve the overview.fmt, and not return anything. The second subroutine is perl_xover, which will recieve the xoverview line, and return 0 or 1, as described in the PERL= above. See sample/perl_xover.pl for an example.

SUCKOTHERMSGS

If suckothermsgs exists, it must contain lines formatted in one of three ways. The first way is a line containing a Message-ID, with the <> included, eg:
<12345@somehost.com>
This will cause the article with that Message-ID to be retrieved.
The second way is to put a group name and article number on a line starting with an !, eg:
!comp.os.linux.announce 1
This will cause that specific article to be downloaded.
You can also get a group of articles from a group by using the following syntax:
!comp.os.linux.announce 1-10
Whichever method you use, if the article specified exists, it will be downloaded, in addition to any articles retreived via the sucknewsrc. These ways can be used to get a specific article in other groups, or to download an article that was killed. These articles ARE NOT processed through the kill articles routines.

SUCKNODOWNLOAD

If sucknodownload exists, it must consist of lines contaning a MessageID, with the <> included, eg:
<12345@somehost.com>
This will cause the article with that Message-ID to NEVER be downloaded. The Message-ID must begin in the first column of the line (no leading spaces). This file overrides suckothermsgs so if an article is in both, it will not be downloaded.

POST FILTER

if the -y post_filter option is specified on the command line in conjunction with any of the batch modes, then suck will call the post filter specified, after downloading the articles, and before batching/posting the articles. The filter is passed the directory where the articles are stored (the -dm option). The filter program is responsible for parsing the contents of the directory. See sample/post_filter.pl for a sample post filter. This option was designed to allow you to add your own host name to the Path: header, but if you need to do anything else to the messages, you can.

FOREIGN LANGUAGE PHRASES

If the -l phrases option is specified or the file /usr/local/lib/suck.phrases (defined in suck_config.h) exists, then suck will load an alternate language phrase file, and use it for all status & error messages, instead of the built-in defaults. The command line overrides the build in default, if both are present. The phrase file contains all messages used by suck, rpost, testhost, and lmove, each on a separate line and enclosed in quotes. To generate a sample phrase file, run make phrases from the command line. This will create "phrases.engl", which is a list of the default phrases. Simply edit this file, changing the english phrases to the language of your choosing, being sure to keep the phrases within the quotes. These phrases may contain variables to print items provided by the program, such as hostname. Variables are designated by %vN% where N is a one-up sequence per phrase. These variables may exist in any order on the phrase line, for example,
"Hello, %v1%, welcome to %v2%" or
"Welcome to %v2%, %v1%"
are both valid phrases. Phrases may contain, \n, \r, or \t to print a newline, carriage return, or tab, respectively. Note that the first line of the phrase file is the current version number. This is checked against the version of suck running, to be sure that the phrases file is the correct version.
If you modify any of the source code, and add in new phrases, you will need to regenerate phrases.h, so that everything works correctly. To recreate, just run make phrases.h from the command line.

SIGNAL HANDLING

Suck accepts two signals, defined in suck_config.h. The first signal (default SIGTERM) will cause Suck to finish downloading the current article, batch up whatever articles were downloaded, and exit, without an error.

The second signal (default SIGUSR1) will cause suck to use the pause values defined with the -w option (see above).

EXIT CODES

Suck will exit with the following return codes:
0 = success
1 = no articles available for download.
2 = suck got an unexpected answer to a command it issued to the remote server.
3 = the -V option was used.
4 = suck was unable to perform NNTP authorization with the remote server.
-1 = general error.

HISTORY

Original Author - Tim Smith (unknown address)
Maintainers March 1995 - Sven Goldt (goldt@math.tu-berlin.de)
July 1995 - Robert A. Yetman (boby@pixi.com)

SEE ALSO

testhost(1), rpost(1), lpost(1).
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout