It never goes back up because if any other rule was going to match the current line, it would be a subtree of the current node (this is an invariant).
It does try all sub-trees from any node before giving up. It first tries all field-nodes, then appropriate literal-node. In this case anything at the end will be matched by rest, the only thing that rest will not match is string with 0 length, which the next rule won't match anyway. About 0-length suffix, I want to think a bit about how to support it with descent. As of now it expects a remaining-text field. Im unsure if this answers your question though. On Thu, Mar 12, 2015 at 1:05 PM, David Lang <[email protected]> wrote: > On Thu, 12 Mar 2015, singh.janmejay wrote: > >> On Thu, Mar 12, 2015 at 9:19 AM, David Lang <[email protected]> wrote: >>> >>> On Thu, 12 Mar 2015, singh.janmejay wrote: >>> >>>> Tried re-ordering it? Put the one with /port first? >>> >>> >>> >>> no, lognorm rules are not supposed to be order dependent, so I didn't try >>> that (especially after finding things failing to parse with rsyslog that >>> worked manually) >> >> >> In case of input strings being matching-rule-wise disjoint, you are >> right, order won't matter. But when they are not disjoint, order does >> matter, because the first one to match the string wins. >> >> Consider this rulebase: >> rule=:%ip:ipv4%%last:rest% >> rule=:%ip:ipv4%%junk:char-sep:/%/%port:number% >> >> If you write it the way I have above, you'll end up matching first >> rule for input 10.20.30.40/5 > > > but when it can't find a match for / and has to undo the match and go back > up the tree, why doesn't it try the next possible match? (repeating as > needed until it has tried all possible branches of the tree) > > David Lang > > >> But if you write it this way: >> rule=:%ip:ipv4%%junk:char-sep:/%/%port:number% >> rule=:%ip:ipv4%%last:rest% >> >> You'll end up matching the first one. >> >> I know it appears order independent for your original rulebase, but >> that is because fields are always tried first(in preference to >> subtrees hanging off literals), and rest is a field, while '/' creates >> a litteral-subtree. >> >>> >>>> Yes, rest must get atleast one char to succeed. I'll create some new >>>> tests without rest-capture (and see what fails). >>> >>> >>> >>> Ok, this can be worked around (but it's a bit ugly), any reason why rest >>> has >>> to get at least one character? >> >> >> Yep, its annoying, it happens only for last token. >> >> The reason is, parsed-fragment length >= input-string is used as a >> termination condition for ln_normalize recursion (see ln_normalizeRec) >> and the last token identified when recursion terminates is not the >> terminal-node, so its not considered a complete match(one that goes >> till leaf of ptree). >> >>> >>> David Lang >>> >>> >>>> On Thu, Mar 12, 2015 at 1:09 AM, David Lang <[email protected]> wrote: >>>>> >>>>> >>>>> I just upgraded to liblognorm 1.1.1 (unfortunantly I didn't get a >>>>> chance >>>>> to >>>>> compile it myself and test it earlier) >>>>> >>>>> I ran into two problems >>>>> >>>>> first, %last:rest% does not match if there is nothing left on the line >>>>> >>>>> i.e. a line that ends with an IP address will not match >>>>> rule=:%ip:ipv4%%last:rest% >>>>> >>>>> secondly, liblognorm is selecting the rule that matches the least >>>>> amount >>>>> of >>>>> the message. >>>>> >>>>> so with these two rules >>>>> >>>>> rule=:%ip:ipv4%%last:rest% >>>>> rule=:%ip:ipv4%/%port:number%%last:rest% >> >> >> I guess the hack I proposed above (using char-sep) can unblock you for >> now, unless you hate its aesthetics too much :-). >> >>>>> >>>>> 192.168.1.1/5 will get matched by the first rule, with '/5' in last, >>>>> even >>>>> though the second rule would match it. If I remove the first rule, the >>>>> second rule does match and the parse succeeds. >>>>> >>>>> David Lang >>>>> >>>>> >>>>> On Fri, 6 Feb 2015, David Lang wrote: >>>>> >>>>>> While I'm working to build packages of this to test with, what happens >>>>>> if >>>>>> you descend into a ruleset like the following >>>>>> >>>>>> rule=:%ip:ipv4%%last:rest% >>>>>> rule=:%ip:ipv4%/%port:number%%last:rest% >>>>>> >>>>>> will it work to find the match that has the least left in last? >>>>>> >>>>>> David Lang >>>>>> >>>>>> >>>>>> On Fri, 6 Feb 2015, singh.janmejay wrote: >>>>>> >>>>>>> It's going to be in the coming release, just master build for now. >>>>>>> >>>>>>> -- >>>>>>> Regards, >>>>>>> Janmejay >>>>>>> >>>>>>> PS: Please blame the typos in this mail on my phone's uncivilized >>>>>>> soft >>>>>>> keyboard sporting it's not-so-smart-assist technology. >>>>>>> >>>>>>> On Feb 6, 2015 6:37 AM, "David Lang" <[email protected]> wrote: >>>>>>> >>>>>>>> On Wed, 4 Feb 2015, singh.janmejay wrote: >>>>>>>> >>>>>>>> On Wed, Feb 4, 2015 at 6:22 PM, David Lang <[email protected]> wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, 4 Feb 2015, singh.janmejay wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Wed, Feb 4, 2015 at 7:17 AM, David Lang <[email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Field type 'descent' does this, but not exactly in the same >>>>>>>>>>>> way. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> does it? I understood it to just be calling another ruleset on the >>>>>>>>>> whole >>>>>>>>>> line (doc problem again) >>>>>>>>>> >>>>>>>>>> >>>>>>>>> It allows field to identify how remaining-text should be returned, >>>>>>>>> which >>>>>>>>> allows it to be parsed by remaining part of the rule which the >>>>>>>>> field >>>>>>>>> belongs to. >>>>>>>>> >>>>>>>>> Here is a test which uses something similar to what you are trying >>>>>>>>> to >>>>>>>>> do: >>>>>>>>> https://github.com/rsyslog/liblognorm/blob/master/tests/ >>>>>>>>> field_tokenized_recursive.sh#L41 >>>>>>>>> >>>>>>>>> (check 41 to EOF) >>>>>>>>> >>>>>>>> >>>>>>>> This looks like it may do this, but it looks like it's not in the >>>>>>>> release >>>>>>>> yet. I'll have to compile from scratch. >>>>>>>> >>>>>>>> David Lang >>>>>>>> _______________________________________________ >>>>>>>> rsyslog mailing list >>>>>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >>>>>>>> http://www.rsyslog.com/professional-services/ >>>>>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >>>>>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >>>>>>>> myriad >>>>>>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if >>>>>>>> you >>>>>>>> DON'T LIKE THAT. >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> rsyslog mailing list >>>>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >>>>>>> http://www.rsyslog.com/professional-services/ >>>>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >>>>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >>>>>>> myriad >>>>>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if >>>>>>> you >>>>>>> DON'T >>>>>>> LIKE THAT. >>>>>>> >>>>>> _______________________________________________ >>>>>> rsyslog mailing list >>>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >>>>>> http://www.rsyslog.com/professional-services/ >>>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >>>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >>>>>> myriad >>>>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you >>>>>> DON'T >>>>>> LIKE THAT. >>>>>> >>>>> _______________________________________________ >>>>> rsyslog mailing list >>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >>>>> http://www.rsyslog.com/professional-services/ >>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >>>>> myriad >>>>> of >>>>> sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you >>>>> DON'T >>>>> LIKE THAT. >>>> >>>> >>>> >>>> >>>> >>>> >>> _______________________________________________ >>> rsyslog mailing list >>> http://lists.adiscon.net/mailman/listinfo/rsyslog >>> http://www.rsyslog.com/professional-services/ >>> What's up with rsyslog? Follow https://twitter.com/rgerhards >>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad >>> of >>> sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T >>> LIKE THAT. >> >> >> >> >> > _______________________________________________ > rsyslog mailing list > http://lists.adiscon.net/mailman/listinfo/rsyslog > http://www.rsyslog.com/professional-services/ > What's up with rsyslog? Follow https://twitter.com/rgerhards > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of > sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T > LIKE THAT. -- Regards, Janmejay http://codehunk.wordpress.com _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com/professional-services/ What's up with rsyslog? Follow https://twitter.com/rgerhards NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE THAT.

