starter: Add support for multi-line strings in ipsec.conf
This commit is contained in:
@@ -123,16 +123,11 @@ static void include_files(parser_helper_t *ctx);
|
|||||||
<str>{
|
<str>{
|
||||||
"\"" |
|
"\"" |
|
||||||
<<EOF>> |
|
<<EOF>> |
|
||||||
\n |
|
|
||||||
\\ {
|
\\ {
|
||||||
if (!streq(yytext, "\""))
|
if (!streq(yytext, "\""))
|
||||||
{
|
{
|
||||||
if (streq(yytext, "\n"))
|
|
||||||
{ /* put the newline back to fix the line numbers */
|
|
||||||
unput('\n');
|
|
||||||
yy_set_bol(0);
|
|
||||||
}
|
|
||||||
PARSER_DBG1(yyextra, "unterminated string detected");
|
PARSER_DBG1(yyextra, "unterminated string detected");
|
||||||
|
return STRING_ERROR;
|
||||||
}
|
}
|
||||||
if (yy_top_state(yyscanner) == inc)
|
if (yy_top_state(yyscanner) == inc)
|
||||||
{ /* string include */
|
{ /* string include */
|
||||||
@@ -152,7 +147,7 @@ static void include_files(parser_helper_t *ctx);
|
|||||||
\\t yyextra->string_add(yyextra, "\t");
|
\\t yyextra->string_add(yyextra, "\t");
|
||||||
\\\r?\n /* merge lines that end with EOL characters */
|
\\\r?\n /* merge lines that end with EOL characters */
|
||||||
\\. yyextra->string_add(yyextra, yytext+1);
|
\\. yyextra->string_add(yyextra, yytext+1);
|
||||||
[^\\\n"]+ {
|
[^\\"]+ {
|
||||||
yyextra->string_add(yyextra, yytext);
|
yyextra->string_add(yyextra, yytext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ static int yylex(YYSTYPE *lvalp, parser_helper_t *ctx)
|
|||||||
conf_parser_section_t t;
|
conf_parser_section_t t;
|
||||||
}
|
}
|
||||||
%token <s> STRING
|
%token <s> STRING
|
||||||
%token EQ SPACES NEWLINE CONFIG_SETUP CONN CA
|
%token EQ SPACES NEWLINE CONFIG_SETUP CONN CA STRING_ERROR
|
||||||
|
|
||||||
/* ...and other symbols */
|
/* ...and other symbols */
|
||||||
%type <t> section_type
|
%type <t> section_type
|
||||||
|
|||||||
@@ -328,6 +328,9 @@ static struct {
|
|||||||
{ TRUE, "conn foo\n\tkey=val ue", "foo", "val ue" },
|
{ TRUE, "conn foo\n\tkey=val ue", "foo", "val ue" },
|
||||||
{ TRUE, "conn foo\n\tkey=\"val ue\"", "foo", "val ue" },
|
{ TRUE, "conn foo\n\tkey=\"val ue\"", "foo", "val ue" },
|
||||||
{ TRUE, "conn foo\n\tkey=\"val\\nue\"", "foo", "val\nue" },
|
{ TRUE, "conn foo\n\tkey=\"val\\nue\"", "foo", "val\nue" },
|
||||||
|
{ TRUE, "conn foo\n\tkey=\"val\nue\"", "foo", "val\nue" },
|
||||||
|
{ TRUE, "conn foo\n\tkey=\"val\\\nue\"", "foo", "value" },
|
||||||
|
{ FALSE, "conn foo\n\tkey=\"unterminated", "foo", NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
START_TEST(test_strings)
|
START_TEST(test_strings)
|
||||||
|
|||||||
Reference in New Issue
Block a user