%{
-/* Copyright 1993-95 by Carl Harris, Jr.
- * All rights reserved
- *
- * Distribute freely, except: don't remove my name from the source or
- * documentation (don't take credit for my work), mark your changes (don't
- * get me blamed for your possible bugs), don't alter or remove this
- * notice. May be sold if buildable source is provided to buyer. No
- * warrantee of any kind, express or implied, is included with this
- * software; use at your own risk, responsibility for damages (if any) to
- * anyone resulting from the use of this software rests entirely with the
- * user.
- *
- * Send bug reports, bug fixes, enhancements, requests, flames, etc., and
- * I'll try to keep a version up to date. I can be reached as follows:
- * Carl Harris <ceharris@mal.com>
+/* Copyright 1993-95 by Carl Harris, Jr. Copyright 1996 by Eric S. Raymond
+ * All rights reserved.
+ * For license terms, see the file COPYING in this directory.
*/
-
/***********************************************************************
- module: poprc_y.y
- project: popclient
+ module: rcfile_y.y
+ project: fetchmail
programmer: Carl Harris, ceharris@mal.com
- description: .poprc parser
-
- $Log: rcfile_y.y,v $
- Revision 1.1 1996/06/24 18:17:24 esr
- Initial revision
-
- Revision 1.4 1995/08/10 00:32:45 ceharris
- Preparation for 3.0b3 beta release:
- - added code for --kill/--keep, --limit, --protocol, --flush
- options; --pop2 and --pop3 options now obsoleted by --protocol.
- - added support for APOP authentication, including --with-APOP
- argument for configure.
- - provisional and broken support for RPOP
- - added buffering to SockGets and SockRead functions.
- - fixed problem of command-line options not being correctly
- carried into the merged options record.
-
- Revision 1.3 1995/08/09 01:33:02 ceharris
- Version 3.0 beta 2 release.
- Added
- - .poprc functionality
- - GNU long options
- - multiple servers on the command line.
- Fixed
- - Passwords showing up in ps output.
-
- Revision 1.2 1995/08/08 01:01:36 ceharris
- Added GNU-style long options processing.
- Fixed password in 'ps' output problem.
- Fixed various RCS tag blunders.
- Integrated .poprc parser, lexer, etc into Makefile processing.
+ Extensively hacked and fixed by esr.
+ description: configuration file parser
***********************************************************************/
#include <config.h>
#include <stdio.h>
-extern char *prc_pathname;
+extern char *rcfile;
extern int prc_lineno;
extern int prc_errflag;
-extern char yytext[];
+extern char *yytext;
+
+int yydebug; /* in case we didn't generate with -- debug */
%}
%union {
int proto;
+ int flag;
char *sval;
}
-%token KW_SERVER KW_PROTOCOL KW_USERNAME KW_PASSWORD
-%token KW_REMOTEFOLDER KW_LOCALFOLDER KW_EOL
-%token <proto> PROTO_POP2 PROTO_POP3 PROTO_IMAP PROTO_APOP PROTO_RPOP
-%token <sval> PARAM_STRING
-%type <proto> proto;
+%token KW_SERVER KW_PROTOCOL KW_LOCALNAME KW_REMOTENAME KW_PASSWORD
+%token KW_MAILBOX KW_SMTPHOST KW_MDA KW_DEFAULTS
+%token <proto> KW_PROTO
+%token <sval> PARAM_STRING
+%token <flag> KW_KEEP KW_FLUSH KW_FETCHALL KW_REWRITE KW_PORT KW_SKIP
+
+/* these are actually used by the lexer */
+%token FLAG_TRUE 2
+%token FLAG_FALSE 1
%%
| rcfile rcline
;
-rcline: statement KW_EOL
+rcline: statement
;
statement:
| define_server {prc_register(); prc_reset();}
;
-define_server: KW_SERVER PARAM_STRING server_options {prc_setserver($2);}
+define_server: KW_SERVER PARAM_STRING server_options {prc_setserver($2);}
| KW_SERVER PARAM_STRING {prc_setserver($2);}
+ | KW_DEFAULTS server_options {prc_setserver("defaults");}
;
server_options: serv_option_clause
;
serv_option_clause:
- KW_PROTOCOL proto {prc_setproto($2);}
- | KW_USERNAME PARAM_STRING {prc_setusername($2);}
- | KW_PASSWORD PARAM_STRING {prc_setpassword($2);}
- | KW_REMOTEFOLDER PARAM_STRING {prc_setremote($2);}
- | KW_LOCALFOLDER PARAM_STRING {prc_setlocal($2);}
- ;
-
-proto: PROTO_POP2
- | PROTO_POP3
- | PROTO_IMAP
- | PROTO_APOP
- | PROTO_RPOP
+ KW_PROTOCOL KW_PROTO {prc_setproto($2);}
+ | KW_LOCALNAME PARAM_STRING {prc_localname($2);}
+ | KW_REMOTENAME PARAM_STRING {prc_remotename($2);}
+ | KW_PASSWORD PARAM_STRING {prc_setpassword($2);}
+ | KW_MAILBOX PARAM_STRING {prc_setmailbox($2);}
+ | KW_SMTPHOST PARAM_STRING {prc_setsmtphost($2);}
+ | KW_MDA PARAM_STRING {prc_setmda($2);}
+ | KW_KEEP {prc_setkeep($1==FLAG_TRUE);}
+ | KW_FLUSH {prc_setflush($1==FLAG_TRUE);}
+ | KW_FETCHALL {prc_setfetchall($1==FLAG_TRUE);}
+ | KW_REWRITE {prc_setrewrite($1==FLAG_TRUE);}
+ | KW_SKIP {prc_setskip($1==FLAG_TRUE);}
+ | KW_PORT PARAM_STRING {prc_setport($2);}
;
%%
-
yyerror (s)
char *s;
{
- fprintf(stderr,"%s line %d: %s at %s\n", prc_pathname, prc_lineno, s, yytext);
+ fprintf(stderr,"%s line %d: %s at %s\n", rcfile, prc_lineno, s, yytext);
prc_errflag++;
}