]> Pileus Git - ~andy/fetchmail/commitdiff
Changeover to `poll'.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 30 Oct 1996 01:03:30 +0000 (01:03 -0000)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 30 Oct 1996 01:03:30 +0000 (01:03 -0000)
svn path=/trunk/; revision=431

NEWS
fetchmail.man
rcfile_l.l
rcfile_y.y
sample.rcfile

diff --git a/NEWS b/NEWS
index 9c54fd6fb37feb7c100acc66203887e09b900ca8..a66249350ae961330df7aa178efe340ff50ea282 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ pl 1.9.5 ():
 * Added -N, --nodetach option for debugging purposes.
 * Use interval timers for poll-interval sleep and nonresponse timeout.
 * fetchmail -q no longer parses the configuration file.
+* Configuration file grammar is slightly cleaned up and improved.
 
 pl 1.9.4 (Mon Oct 28 20:58:48 EST 1994):
 * Correct status interpretation in closemailpipe() (thanks to Neil Harkins).
index 004857f867f30e2280e6be7e78721640b244bb3f..56f75f9c8b6a5bdcf259627b004365098f756275 100644 (file)
@@ -280,7 +280,7 @@ fetchmail -d 900
 .PP
 will, therefore, poll all the hosts described in your 
 .I ~/.fetchmailrc
-file (except those explicitly excluded with the `skip' option) once
+file (except those explicitly excluded with the `skip' verb) once
 every fifteen minutes.
 .PP
 Only one daemon process is permitted per user; in daemon mode,
@@ -372,6 +372,11 @@ permissions;
 .I fetchmail
 will complain and exit otherwise.
 .PP
+You may read the \fI.fetchmailrc\fR file as a list of commands to 
+be executed when 
+.I fetchmail
+is called with no arguments.
+.PP
 Comments begin with a '#' and extend through the end of the line.
 Otherwise the file consists of a series of free-format server entries.
 Any amount of whitespace separates keywords, tokens, or strings in
@@ -383,17 +388,21 @@ characters or string delimiters in strings.  When there is a conflict
 between the command-line arguments and the arguments in this file, the
 command-line arguments take precedence.
 .PP
-Each server entry consists of the keyword `server', followed by a
-server name, followed by server options, followed by any number of
-user descriptions.
+Each server entry consists of one of the keywords `poll' or `skip',
+followed by a server name, followed by server options, followed by any
+number of user descriptions.
+.PP
+The `poll' verb tells fetchmail to query this host when it is run with
+no arguments.  The `skip' verb tells
+.I fetchmail 
+not to poll this host unless it is explicitly named on the command
+line.  (The `skip' verb allows you to experiment with test entries
+safely, or easily disable entries for hosts that are temporarily down.)
 .PP
 Legal server options are:
 
-    server
     protocol (or proto)
     port
-    skip
-    noskip
     authenticate (or auth)
     timeout
 
@@ -416,7 +425,7 @@ Legal user options are
     norewrite
 .PP
 All options correspond to the obvious command-line arguments except
-five: `is', `to', `password', and `skip'.
+three: `is', `to', and `password'
 .PP
 The `is' or `to' keywords associate the following local (client)
 name(s) (or server-name to client-name mappings separated by =) with
@@ -442,15 +451,6 @@ The \fBaliases\fR option declares names that are recognized as OK for
 local delivery.  Your local name is automatically one of these; the
 aliases directive can be used to declare others.   
 .PP
-The `skip' option tells
-.I fetchmail 
-not to query this host unless it is explicitly named on the command
-line.  A host entry with this flag will be skipped when
-.I fetchmail
-called with no arguments steps through all hosts in the run control file.
-(This option allows you to experiment with test entries safely, or easily
-disable entries for hosts that are temporarily down.)
-.PP
 Legal protocol identifiers are
 
     auto (or AUTO)
@@ -483,40 +483,39 @@ mail for the remote user `eric' is to be delivered to `esr',
 but you can make this clearer by saying `user eric there is esr here',
 or reverse it by saying `user esr here is eric there'
 .PP
-Finally, instead of saying `server fubar.com skip ...' you can say
-\&`skip server fubar.com ...'
+For backward compatibility, the word `server' is a syninym for `poll'.
 .PP
 Basic format is:
 
 .nf
-  server SERVERNAME protocol PROTOCOL username NAME password PASSWORD 
+  poll SERVERNAME protocol PROTOCOL username NAME password PASSWORD 
 .fi
 .PP
 Example:
 
 .nf
-  server pop.provider.net protocol pop3 username jsmith password secret1
+  poll pop.provider.net protocol pop3 username jsmith password secret1
 .fi
 .PP
 Or, using some abbreviations:
 
 .nf
-  server pop.provider.net proto pop3 user jsmith password secret1
+  poll pop.provider.net proto pop3 user jsmith password secret1
 .fi
 .PP
 Multiple servers may be listed:
 
 .nf
-  server pop.provider.net proto pop3 user jsmith pass secret1
-  server other.provider.net proto pop2 user John.Smith pass My^Hat
+  poll pop.provider.net proto pop3 user jsmith pass secret1
+  poll other.provider.net proto pop2 user John.Smith pass My^Hat
 .fi
 
 Here's a version of those two with more whitespace and some noise words: 
 
 .nf
-  server pop.provider.net proto pop3
+  poll pop.provider.net proto pop3
       user jsmith, with password secret1, is jsmith here;
-  server other.provider.net proto pop2:
+  poll other.provider.net proto pop2:
       user John.Smith with password My^Hat, is John.Smith here;
 .fi
 
@@ -528,22 +527,22 @@ If you need to include whitespace in a parameter string, enclose the
 string in double quotes.  Thus:
 
 .nf
-  server mail.provider.net with proto pop3:
+  poll mail.provider.net with proto pop3:
         user jsmith there has password "u can't krak this"
                     is jws here and wants mda "/bin/mail"
 .fi
 
 You may have an initial server description headed by the keyword
-`defaults' instead of `server' followed by a name.  Such a record
+`defaults' instead of `poll' followed by a name.  Such a record
 is interpreted as defaults for all queries to use. It may be overwritten
 by individual server descriptions.  So, you could write:
 
 .nf
   defaults proto pop3
         user jsmith
-  server pop.provider.net
+  poll pop.provider.net
         pass secret1
-  server mail.provider.net
+  poll mail.provider.net
         user jjsmith there has password secret2
 .fi
 
@@ -555,7 +554,7 @@ first description lacks the `user' keyword, the name of the
 invoking user is used.) Here's a contrived example:
 
 .nf
-  server pop.provider.net proto pop3 port 3111
+  poll pop.provider.net proto pop3 port 3111
         pass gumshoe
         user jsmith with pass secret1 is smith here
         user jones with pass secret2 is jjones here
@@ -578,7 +577,7 @@ Here's what a simple retrieval configuration for a multi-drop mailbox
 looks like:
 
 .nf
-  server pop.provider.net:
+  poll pop.provider.net:
         user maildrop with pass secret1 to golux hurkle=happy snark here
 .fi
 
@@ -701,12 +700,6 @@ server, forwarding will not get done correctly.
 The multi-drop mailbox code was hard to test thoroughly and may have obscure
 failure modes, especially in the presence of DNS flakiness.
 .PP
-The configuration file grammar is ugly and tricky.  This is an
-unfortunate result of trying to stay compatible with the old popclient
-syntax.  The way it is most likely to bite is if you try to declare
-a `defaults' entry with no user options.  This should work, but does
-not.  To work around this problem, add a redundant `user' declaration.
-.PP
 Under Linux, if fetchmail is run in daemon mode with the network
 inaccessible, each poll leaves a socket allocated but in CLOSE state
 (this is visible in netstat(1)'s output).  For some reason, these
index 1653826f05a58c802733534b464091af2152dcf1..29e097cc75d5ed88ea5b0b227f53443e29dc5dd3 100644 (file)
@@ -18,7 +18,8 @@ int prc_lineno = 1;
 %%
 
 defaults       { return DEFAULTS; }
-server                 { return SERVER; }
+server                 { return POLL; }
+poll           { return POLL; }
 proto(col)?    { return PROTOCOL; }
 port           { return PORT; }
 auth(enticate)?        { return AUTHENTICATE; }
index 2b3b7cd71a275b77a6a4519ae03d0dada4d76b67..d41cecc3b81bb367be54d1634912fdf48597da80 100644 (file)
@@ -41,7 +41,7 @@ static void prc_reset();
   char *sval;
 }
 
-%token DEFAULTS SERVER PROTOCOL AUTHENTICATE TIMEOUT KPOP KERBEROS
+%token DEFAULTS POLL PROTOCOL AUTHENTICATE TIMEOUT KPOP KERBEROS
 %token USERNAME PASSWORD FOLDER SMTPHOST MDA IS HERE THERE TO MAP LIMIT
 %token <proto> PROTO
 %token <sval>  STRING
@@ -65,8 +65,8 @@ statement_list        : statement
 statement      : define_server serverspecs userspecs      
                ;
 
-define_server  : SERVER STRING         {strcpy(current.servername, $2);}
-               | SKIP SERVER STRING    {strcpy(current.servername, $3);
+define_server  : POLL STRING   {strcpy(current.servername, $2);}
+               | SKIP STRING   {strcpy(current.servername, $2);
                                                current.skip=($1==FLAG_TRUE);}
                | DEFAULTS      {strcpy(current.servername,"defaults");}
                ;
@@ -82,14 +82,14 @@ serv_option : PROTOCOL PROTO        {current.protocol = $2;}
                                            current.port = KPOP_PORT;
                                        }
                | PORT NUMBER           {current.port = $2;}
-               | SKIP                  {current.skip = ($1==FLAG_TRUE);}
                | AUTHENTICATE PASSWORD {current.authenticate = A_PASSWORD;}
                | AUTHENTICATE KERBEROS {current.authenticate = A_KERBEROS;}
                | TIMEOUT NUMBER        {current.timeout = $2;}
                ;
 
 /* the first and only the first user spec may omit the USERNAME part */
-userspecs      : user1opts             {prc_register(); prc_reset();}
+userspecs      : /* EMPTY */
+               | user1opts             {prc_register(); prc_reset();}
                | user1opts explicits   {prc_register(); prc_reset();}
                | explicits
                ;
@@ -232,24 +232,26 @@ static void prc_reset()
 /* clear the global current record (server parameters) used by the parser */
 {
     char       savename[HOSTLEN+1];
-    int                saveport, saveproto, saveauth;
+    int                saveport, saveproto, saveauth, saveskip;
 
     /*
-     * Purpose of this code is to initialize the new server block with
-     * the command-line data, but preserve whatever server name was
-     * previously set.  Also preserve server options unless the
-     * command-line explicitly overrides them.
+     * Purpose of this code is to initialize the new server block, but
+     * preserve whatever server name was previously set.  Also
+     * preserve server options unless the command-line explicitly
+     * overrides them.
      */
     (void) strcpy(savename, current.servername);
     saveport = current.port;
     saveproto = current.protocol;
     saveauth = current.authenticate;
+    saveskip = current.skip;
 
     memset(&current, '\0', sizeof(current));
 
     (void) strcpy(current.servername, savename);
     current.protocol = saveproto;
     current.authenticate = saveauth;
+    current.skip = saveskip;
 }
 
 struct query *hostalloc(init)
index 8cb7aa874382c6b723641adbe6a9047e07545bb2..f1e72a4401bf1a145d01a8763410c6b6d9a98915 100644 (file)
 #   flush
 #   fetchall
 #   rewrite
-#   skip
 #   nokeep
 #   noflush
 #   nofetchall
 #   norewrite
-#   noskip
 #
 # Legal protocol identifiers are
 #   pop2 (or POP2)
 #   kerberos
 #
 # Basic format is
-# server SERVERNAME protocol PROTOCOL username NAME password PASSWORD 
+# poll SERVERNAME protocol PROTOCOL username NAME password PASSWORD 
 # Example:
 #
-server pop.provider.net protocol pop3 username jsmith password secret1
+poll pop.provider.net protocol pop3 username jsmith password secret1
 
 # Or, using some abbreviations:
 #
-server pop.provider.net proto pop3 user jsmith password secret1
+poll pop.provider.net proto pop3 user jsmith password secret1
 
 # Multiple servers may be listed
 #
-server pop.provider.net proto pop3 user jsmith password secret1
-server other.provider.net proto pop2 user John.Smith password My^Hat
+poll pop.provider.net proto pop3 user jsmith password secret1
+poll other.provider.net proto pop2 user John.Smith password My^Hat
 
-# Other possibilities (note optional use of \ to escape newline -- this is all 
-# one server definition.
-server pop.provider.net        \
-       proto pop3              \
-       user jsmith             \
+# Other possibilities
+poll pop.provider.net
+       proto pop3
+       user jsmith
        pass secret1