summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2008-01-31 18:05:34 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2008-01-31 18:05:34 +0000
commit46e86fe1d88d50e4731c98a87fe92fb5e8d73e62 (patch)
tree5ae0c54460264057b9370e385493f315f90c9448
parenteac5fe0e0ded8b85a63b239d7523d4297fc99a51 (diff)
downloadmailutils-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--ChangeLog8
-rw-r--r--auth/radius.c2
-rw-r--r--mailbox/cfg_lexer.c118
3 files changed, 78 insertions, 50 deletions
diff --git a/ChangeLog b/ChangeLog
index f28e670d7..717398ac4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);

Return to:

Send suggestions and report system problems to the System administrator.