Provided by: suck_4.3.2-15_amd64 bug

NAME

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

SYNOPSIS

       suck  [  hostname  ]  [ @filename ] [ -V ] [ -K ] [ -L[SL] ] [ -LF filename ] [ -H ] [ -HF
       filename ] [ -d[tmd] dirname ] [ -s | -S filename ] [ -e | -E filename ] [ -a ] [ -m  ]  [
       -b[irlf] batchfile ] [ -r filesize ] [ -p extension ] [ -U userid ] [ -P password ] [ -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 number_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 messages to batch up, some of the batch options may produce warning messages.
       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 suckkillfile 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 downloading 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.

       -HF history_file_name

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

       -hl localhost

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

       -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 articles. 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.killlog"  for  the  file
       which contains the log entries for killed articles.

       -LL

       This option tells suck to create long log entries for each killed article.  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 connecting 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 sucknewsrc files, one for each site.

       -q

       This option tells suck to not display the BPS and article count messages 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 article 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 stdout), 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 downloaded, 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 aborting.  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 authentication 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 tie-breaker 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  Message-ID,  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).

                                                                                          SUCK(1)