On Thu, Nov 11, 2021 at 08:53:01PM +0100, Togan Muftuoglu wrote:

> Matus> /(\d+)[.-](\d+)[.-](\d+)[.-](\d+)./ REJECT "generic DNS refused"
> 
> Matus> (trailing . should avoid matching IP Addresses)

That "." would need to be a "[.]" (or "\."), otherwise it'll match the
last digit, of a 2 or 3 decimal digit IP octet.  But I think that Matus
intended to also allow other non-digit charaters, therefore the correct
regular expression is:

   /(\d+)[.-](\d+)[.-](\d+)[.-](\d+)\D/ REJECT "generic DNS refused"

  Broken:
    $ postmap -q "172.31.12.175" pcre:<(
        printf '%s\n/^/ DUNNO\n' '/(\d+)[.-](\d+)[.-](\d+)[.-](\d+)./ REJECT 
"generic DNS refused"'
        )
    REJECT "generic DNS refused"

  Working:
    $ postmap -q "172.31.12.175" pcre:<(
        printf '%s\n/^/ DUNNO\n' '/(\d+)[.-](\d+)[.-](\d+)[.-](\d+)\D/ REJECT 
"generic DNS refused"'
        )
    DUNNO

I must some day stop being surprised about all the sloppy regular
expressions I run into.  Regular expressions are programs for a suitable
automaton, pay attention to detail!

-- 
    Viktor.

Reply via email to