From patchwork Thu Feb 13 14:17:09 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick McHardy X-Patchwork-Id: 320066 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 233FB2C0081 for ; Fri, 14 Feb 2014 01:17:16 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751511AbaBMORO (ORCPT ); Thu, 13 Feb 2014 09:17:14 -0500 Received: from stinky.trash.net ([213.144.137.162]:40071 "EHLO stinky.trash.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751089AbaBMORO (ORCPT ); Thu, 13 Feb 2014 09:17:14 -0500 Received: from macbook.localnet (unknown [127.0.0.1]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by stinky.trash.net (Postfix) with ESMTPS id D09B99D2DE; Thu, 13 Feb 2014 15:17:11 +0100 (MET) Date: Thu, 13 Feb 2014 14:17:09 +0000 From: Patrick McHardy To: Pablo Neira Ayuso Cc: netfilter-devel@vger.kernel.org Subject: Re: [PATCH 2/2 nft] scanner: fix parsing of tc handle Message-ID: <20140213141709.GA6456@macbook.localnet> References: <1392291672-7885-1-git-send-email-pablo@netfilter.org> <1392291672-7885-2-git-send-email-pablo@netfilter.org> <20140213115112.GA30397@macbook.localnet> <20140213130102.GB4223@macbook.localnet> <20140213133137.GA9181@localhost> <20140213133638.GB5467@macbook.localnet> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20140213133638.GB5467@macbook.localnet> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org On Thu, Feb 13, 2014 at 01:36:38PM +0000, Patrick McHardy wrote: > On Thu, Feb 13, 2014 at 02:31:37PM +0100, Pablo Neira Ayuso wrote: > > On Thu, Feb 13, 2014 at 01:01:03PM +0000, Patrick McHardy wrote: > > > On Thu, Feb 13, 2014 at 11:51:12AM +0000, Patrick McHardy wrote: > > > > > > I think we might be able to do something with flex "trailing contexts", > > > though I didn't manage to figure it out yet. > > > > > > Generally it seems like using a ':' in maps might not be the best idea > > > after all, its used for too many other things already. This might be > > > the reason why I initially used =>, not sure anymore. > > > > > > Is there a reasonable alternative to ':' with a single character? > > > > Everything seems pretty overloaded, and I still like that python uses > > this for dictionaries. > > I also thing this would be the nicest way to express this. > > > I think even bash and gcc provide bad error reporting if one space is > > missing in a for/while statement or a missing bracket is left out. > > > > Let's check if that trailing context can help us to fix it, if not, > > just document it. > > I think I almost got it using: > > {priostring}/[ \t\n:] { > > Only thing missing is EOF handling, IOW when the priostring is the last > expression on the command line (not in files) it fails. > > I also changed priostring to: > > priostring ({hexdigit}{1,4}:{hexdigit}{0,4})|({hexdigit}{0,4}:{hexdigit}{1,4}) > > since it otherwise also matches a single ':'. I'll try again later, have > to take care of other things first. This is what I'm currently testing. Seems to work alright, it even recognizes filter output meta priority { ffff:ffff:accept } correctly. --- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/src/erec.c b/src/erec.c index 4930085..5bb8141 100644 --- a/src/erec.c +++ b/src/erec.c @@ -84,6 +84,7 @@ void erec_print(FILE *f, const struct error_record *erec) case INDESC_BUFFER: case INDESC_CLI: line = indesc->data; + *strchrnul(line, '\n') = '\0'; break; case INDESC_FILE: memset(buf, 0, sizeof(buf)); diff --git a/src/main.c b/src/main.c index 9d50577..56e2ecd 100644 --- a/src/main.c +++ b/src/main.c @@ -307,12 +307,13 @@ int main(int argc, char * const *argv) for (len = 0, i = optind; i < argc; i++) len += strlen(argv[i]) + strlen(" "); - buf = xzalloc(len + 1); + buf = xzalloc(len + 2); for (i = optind; i < argc; i++) { strcat(buf, argv[i]); if (i + 1 < argc) strcat(buf, " "); } + strcat(buf, "\n"); parser_init(&state, &msgs); scanner = scanner_init(&state); scanner_push_buffer(scanner, &indesc_cmdline, buf); diff --git a/src/scanner.l b/src/scanner.l index cd68534..07f0810 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -109,7 +109,7 @@ digit [0-9] hexdigit [0-9a-fA-F] decstring {digit}+ hexstring 0[xX]{hexdigit}+ -range ({decstring}?:{decstring}?) +priostring ({hexdigit}{1,4}:{hexdigit}{0,4})|({hexdigit}{0,4}:{hexdigit}{1,4}) letter [a-zA-Z] string ({letter})({letter}|{digit}|[/\-_\.])* quotedstring \"[^"]*\" @@ -449,6 +449,13 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) return STRING; } +{priostring}/[ \t\n:] { + printf("priostring %s\n", yytext); + yylval->string = xstrdup(yytext); + return STRING; + } + + \\{newline} { reset_pos(yyget_extra(yyscanner), yylloc); }