[syslog-ng] problem with matching IP address and \d regex operand

Balazs Scheidler bazsi at balabit.hu
Tue Nov 3 20:06:11 CET 2009


On Thu, 2009-10-29 at 16:40 -0400, Phil.Newlon at wendysarbys.com wrote:
> I am using this regular expression with Kiwi Syslog to distribute
> messages to several destinations based on the last number of the third
> octet (0-4 goes one place, 5-9 goes another). 
> 
>      "10\.\d+\.\d*[0-4]\." 
> 
> This doesn't work with syslog-ng, of course, but based on my research
> of the archives, this should do the same thing because I've escaped
> the "\d"
> 
> match("10\.\\d+\.\\d*[0-4]\.")
> 
> Nope, I get nothing. I've shortened it to just
> 
> match("10\.\\d+")
> 
> and still get no matching messages.

syslog-ng uses the system regexp lib (on Linux, the one in libc), are
you sure it supports \d ? syslog-ng uses extended regexp, e.g. the
equivalent your egrep command is using. And, for me egrep doesn't
understand \d:

$ echo '10' | egrep '\d+' || echo not found
not found

whereas:

$ echo '10' | egrep '[0-9]+' && echo found
10
found

In the documentation of egrep I've found these named character sets:

"""       Finally,  certain  named  classes  of  characters are predefined within
       bracket expressions, as follows.  Their names are self explanatory, and
       they   are   [:alnum:],  [:alpha:],  [:cntrl:],  [:digit:],  [:graph:],
       [:lower:], [:print:], [:punct:], [:space:], [:upper:], and  [:xdigit:].
       For  example,  [[:alnum:]]  means  [0-9A-Za-z],  except the latter form
       depends upon the C locale and the ASCII character encoding, whereas the
       former  is  independent  of  locale  and character set.  (Note that the
       brackets in these class names are part of the symbolic names, and  must
       be  included  in  addition  to  the  brackets  delimiting  the  bracket
       expression.)  Most meta-characters lose their  special  meaning  inside
       bracket  expressions.   To  include  a  literal ] place it first in the
       list.  Similarly, to include a literal ^ place it anywhere  but  first.
       Finally, to include a literal - place it last.
"""

E.g. you might have wanted to say, instead of \d

$ echo '10' | egrep '[[:digit:]]+' && echo found
10
found

Also, I can see that you tried to escape the dot, right after "10", but
you only used a single escape, which escapes for syslog-ng, but doesn't
embed a backslash for the regexp parser.

This reminds me to an unrelated note, that if you use single quotes in
syslog-ng, you don't need to escape the backslash, e.g.

match("\\.") is equivalent to match('\.')

Another unrelated note is that syslog-ng supports PCRE regular
expressions if you have that compiled in, PCRE supports \d, and you can
use it like this:

match('10\.\d+' type(pcre));

> 
> This sort of works, but gives some unexpected results:
> 
> match("10\.[0-9]+\.[0-9]*[0-4]\.")
> 
> The match("10\.[0-9]+\.[0-9]*[0-4]\.") statement resulted in 'true' on
> this log message. I didn't expect a match on 10.87.48.4 from it
> because of the '8' as the last number of the third octet not matching
> '0-4'
> 
> Oct 29 16:31:20 10.87.48.4 Kiwi_Syslog_Daemon Oct 29 16:31:20
> 10.87.48.4 MSWinEventLog 0 Security 71000 Thu Oct 29 16:31:17 2009 538
> Security pos User Success Audit POS0408748 Logon/Logoff User Logoff:
> User Name: pos Domain: POS0408748 Logon ID: (0x0,0x4ACB69) Logon Type:
> 3 42921033
> 
> 
> 
> So, I have two questions.....
> 
> What's wrong with this:
> 
> match("10\.\\d+\.\\d*[0-4]\.")
> 
> And why did this 
> match("10\.[0-9]+\.[0-9]*[0-4]\.")
> match this 
> Oct 29 16:31:20 10.87.48.4 Kiwi_Syslog_Daemon Oct 29 16:31:20
> 10.87.48.4 MSWinEventLog 0 Security 71000 Thu Oct 29 16:31:17 2009 538
> Security pos User Success Audit POS0408748 Logon/Logoff User Logoff:
> User Name: pos Domain: POS0408748 Logon ID: (0x0,0x4ACB69) Logon Type:
> 3 42921033
> 
> Thanks!
> 
> Phil 
> 
> Notice: This e-mail message and its attachments are the property of Wendy's/Arby's Group Inc. 
> or one of its subsidiaries and may contain confidential or legally privileged information intended
> solely for the use of the addressee(s). If you are not an intended recipient, then any use, copying or
> distribution of this message or its attachments is strictly prohibited. If you received this message in
> error, please notify the sender and delete this message entirely from your system.
> ______________________________________________________________________________
> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
> Documentation: http://www.balabit.com/support/documentation/?product=syslog-ng
> FAQ: http://www.campin.net/syslog-ng/faq.html
> 
-- 
Bazsi




More information about the syslog-ng mailing list