X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fliboconfig%2Fscanner.l;h=41d66438dd86e1176621034734d4666a29e0d773;hb=f14feb1eddfe5760a64640b98ab7bbc5c493f614;hp=b6d757eb39721fabf2c99752f8fba721fa16000a;hpb=2761756b5ad2c9a973b30540633218202860a4d7;p=collectd.git diff --git a/src/liboconfig/scanner.l b/src/liboconfig/scanner.l index b6d757eb..41d66438 100644 --- a/src/liboconfig/scanner.l +++ b/src/liboconfig/scanner.l @@ -28,6 +28,7 @@ %{ #include +#include #include "oconfig.h" #include "aux_types.h" #include "parser.h" @@ -50,6 +51,8 @@ static void ml_append (char *); %} %option yylineno %option noyywrap +%option noinput +%option nounput %x ML WHITE_SPACE [\ \t\b] NON_WHITE_SPACE [^\ \t\b] @@ -65,9 +68,20 @@ BOOL_TRUE (true|yes|on) BOOL_FALSE (false|no|off) COMMENT #.* PORT (6(5(5(3[0-5]|[0-2][0-9])|[0-4][0-9][0-9])|[0-4][0-9][0-9][0-9])|[1-5][0-9][0-9][0-9][0-9]|[1-9][0-9]?[0-9]?[0-9]?) + IP_BYTE (2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]) IPV4_ADDR {IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}(:{PORT})? +/* IPv6 address according to http://www.ietf.org/rfc/rfc2373.txt + * This supports embedded IPv4 addresses as well but does not strictly check + * for the right prefix (::0: or ::FFFF:) because there are too many + * ways to correctly represent the zero bytes. It's up to the user to check + * for valid addresses. */ +HEX16 ([0-9A-Fa-f]{1,4}) +V6_PART ({HEX16}:{HEX16}|{IPV4_ADDR}) +IPV6_BASE ({HEX16}:){6}{V6_PART}|::({HEX16}:){5}{V6_PART}|({HEX16})?::({HEX16}:){4}{V6_PART}|(({HEX16}:){0,1}{HEX16})?::({HEX16}:){3}{V6_PART}|(({HEX16}:){0,2}{HEX16})?::({HEX16}:){2}{V6_PART}|(({HEX16}:){0,3}{HEX16})?::{HEX16}:{V6_PART}|(({HEX16}:){0,4}{HEX16})?::{V6_PART}|(({HEX16}:){0,5}{HEX16})?::{HEX16}|(({HEX16}:){0,6}{HEX16})?:: +IPV6_ADDR ({IPV6_BASE})|(\[{IPV6_BASE}\](:{PORT})?) + %% {WHITE_SPACE} | {COMMENT} {/* ignore */} @@ -82,6 +96,7 @@ IPV4_ADDR {IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}(:{PORT})? {BOOL_FALSE} {yylval.boolean = 0; return (BFALSE);} {IPV4_ADDR} {yylval.string = yytext; return (UNQUOTED_STRING);} +{IPV6_ADDR} {yylval.string = yytext; return (UNQUOTED_STRING);} {NUMBER} {yylval.number = strtod (yytext, NULL); return (NUMBER);}