diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2008-01-31 18:05:34 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2008-01-31 18:05:34 +0000 |
commit | 46e86fe1d88d50e4731c98a87fe92fb5e8d73e62 (patch) | |
tree | 5ae0c54460264057b9370e385493f315f90c9448 | |
parent | eac5fe0e0ded8b85a63b239d7523d4297fc99a51 (diff) | |
download | mailutils-46e86fe1d88d50e4731c98a87fe92fb5e8d73e62.tar.gz mailutils-46e86fe1d88d50e4731c98a87fe92fb5e8d73e62.tar.bz2 |
* auth/radius.c (_expand_query): Fix typo.
* mailbox/cfg_lexer.c (copy_string0): New function.
(copy_string): Rewrite using copy_string0.
(copy_to): Parse strings correctly.
(default_lexer): Bugfix. Return string if tag is quoted.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | auth/radius.c | 2 | ||||
-rw-r--r-- | mailbox/cfg_lexer.c | 118 |
3 files changed, 78 insertions, 50 deletions
@@ -1,3 +1,11 @@ +2008-01-31 Sergey Poznyakoff <gray@gnu.org.ua> + + * auth/radius.c (_expand_query): Fix typo. + * mailbox/cfg_lexer.c (copy_string0): New function. + (copy_string): Rewrite using copy_string0. + (copy_to): Parse strings correctly. + (default_lexer): Bugfix. Return string if tag is quoted. + 2008-01-28 Sergey Poznyakoff <gray@gnu.org.ua> * pop3d/bulletin.c (open_bulletin_mailbox): Bugfix. diff --git a/auth/radius.c b/auth/radius.c index 58ffc9695..5dca25b05 100644 --- a/auth/radius.c +++ b/auth/radius.c @@ -220,7 +220,7 @@ _expand_query (const char *query, const char *ustr, const char *passwd) if (passwd) { mu_vartab_define (vtab, "passwd", passwd, 1); - mu_vartab_define (vtab, "p", ustr, 1); + mu_vartab_define (vtab, "p", passwd, 1); } rc = mu_vartab_expand (vtab, query, &str); diff --git a/mailbox/cfg_lexer.c b/mailbox/cfg_lexer.c index e92dc0073..351a234a9 100644 --- a/mailbox/cfg_lexer.c +++ b/mailbox/cfg_lexer.c @@ -115,53 +115,14 @@ skipline (struct lexer_data *p) } static int -isword (int c) -{ - if (mu_cfg_tie_in) - return c && c != ';' && c != '{'; - - return isalnum (c) || c == '_' || c == '-' || c == '.'; -} - -static char * -copy_alpha (struct lexer_data *p) -{ - do - { - if (*p->curp == '\n') - mu_cfg_locus.line++; - cbuf_1grow (p, *p->curp); - p->curp++; - } while (*p->curp && isword (*p->curp)); - cbuf_1grow (p, 0); - return cbuf_finish (p); -} - -static char * -copy_to (struct lexer_data *p, const char *delim) -{ - while (*p->curp) - { - if (strchr (delim, *p->curp)) - break; - if (*p->curp == '\n') - mu_cfg_locus.line++; - cbuf_1grow (p, *p->curp); - p->curp++; - } - cbuf_1grow (p, 0); - return cbuf_finish (p); -} - -static int continuation_line_p (struct lexer_data *p, int quote) { skipws (p); return *p->curp == quote; } -static char * -copy_string (struct lexer_data *p) +static void +copy_string0 (struct lexer_data *p, int unquote) { int quote; do @@ -183,14 +144,11 @@ copy_string (struct lexer_data *p) p->curp++; continue; } - c = mu_argcv_unquote_char (*p->curp); - if (c == *p->curp) - { - cbuf_1grow (p, '\\'); - cbuf_1grow (p, *p->curp); - } + if (!unquote) + c = *p->curp; else - cbuf_1grow (p, c); + c = mu_argcv_unquote_char (*p->curp); + cbuf_1grow (p, c); p->curp++; } else if (*p->curp == quote) @@ -206,7 +164,69 @@ copy_string (struct lexer_data *p) } } while (continuation_line_p (p, quote)); +} +static char * +copy_string (struct lexer_data *p) +{ + copy_string0 (p, 1); + cbuf_1grow (p, 0); + return cbuf_finish (p); +} + +static char * +copy_to (struct lexer_data *p, const char *delim) +{ + while (*p->curp) + { + if (*p->curp == '"' || *p->curp == '\'') + { + int quote = *p->curp; + cbuf_1grow (p, quote); + copy_string0 (p, 0); + cbuf_1grow (p, quote); + continue; + } + + if (strchr (delim, *p->curp)) + break; + if (*p->curp == '\n') + mu_cfg_locus.line++; + cbuf_1grow (p, *p->curp); + p->curp++; + } + cbuf_1grow (p, 0); + return cbuf_finish (p); +} + +static int +isword (int c) +{ + if (mu_cfg_tie_in) + return c && c != ';' && c != '{'; + + return isalnum (c) || c == '_' || c == '-' || c == '.'; +} + +static char * +copy_alpha (struct lexer_data *p) +{ + do + { + if (mu_cfg_tie_in && (*p->curp == '"' || *p->curp == '\'')) + { + int quote = *p->curp; + cbuf_1grow (p, quote); + copy_string0 (p, 0); + cbuf_1grow (p, quote); + continue; + } + + if (*p->curp == '\n') + mu_cfg_locus.line++; + cbuf_1grow (p, *p->curp); + p->curp++; + } while (*p->curp && isword (*p->curp)); cbuf_1grow (p, 0); return cbuf_finish (p); } @@ -337,7 +357,7 @@ again: tag = copy_alpha (p); skipws (p); - if (*p->curp == '"') + if (*tag == '"') { mu_cfg_yylval.string = tag; LEX_DEBUG ("STRING", mu_cfg_yylval.string, NULL); |