On 7/7/2011 10:14 AM, /dev/rob0 wrote: > On Thu, Jul 07, 2011 at 08:24:42AM -0500, Noel Jones wrote: >> On 7/7/2011 7:48 AM, /dev/rob0 wrote: >>> On Thu, Jul 07, 2011 at 06:44:49AM -0500, Stan Hoeppner wrote: >>>> On 7/7/2011 5:58 AM, /dev/rob0 wrote: >>>>> The anchors at both ends mean you are safe. You start with ^ >>>>> and end with $, so nothing else can sneak in between those. >>>>> >>>>> A simpler expression to accomplish the same thing: >>>>> /^[0-9\.]$/ DUNNO >>>>> In English, that says: match a string which contains nothing >>>>> but numerals and dots. It matches nonsense strings such as >>>>> "...", but would be safe as per your intent to only match >>>>> bare IP addresses. >>>> >>>> With that being right anchored, the last character it attempts >>>> to match is a dot, no? See a problem there? >>> >>> The last character before $ is in fact "]" which closes the >>> bracket expression defined by the opening "[". Read up on >>> character classes and bracket expressions. >> >> what rob0 meant was >> /^[0-9.]+$/ DUNNO > > Oh yes, thank you Noel, and I'm sorry for that. Posting too early, > before coffee. :) At least my mistake was harmless, as it matched > only single-character strings: ".", "4", et c. While such strings > might be possible in PTR values, they are not possible in forward- > confirmed reverse DNS hostnames. Unless using some alternate root, or > other crazy DNS kludge. > >> For those following at home, the + means "one or more >> occurrences of the proceeding", and "special character" rules >> are different inside character class brackets, so don't escape >> the period with a backslash. As originally presented, the >> expression will match a single character string consisting of >> any number, a backslash, or a period. >> Rob knows all this as well as anyone, but the syntax is arcane >> and easy to mess up in quick postings. > > Don't give me too much credit! :) I actually thought the backslash > was still a metacharacter in the bracket expression. Um, > http://www.pcre.org/pcre.txt says it is, but I am not sure how it > would be interpreted when a non-metacharacter such as "." follows. > > A quick test with postmap indicates that the lone backslash is > ignored. > >> This (corrected) expression would also match an all-numeric >> string, or a phone number in the fairly common 123.456.1212 >> format. I don't know if such strings ever show up in reverse >> hostnames (certainly never with check_client_access, but maybe >> with check_reverse_client_hostname_access). Probably better > > Right, I'd be inclined to want to block a PTR of "123.456.1212" if > using check_reverse_client_hostname_access. > >> to stick with the well-tested >> /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ DUNNO > > Probably so, and thanks again.
You guys know regex/pcre far better than me, and I'm glad I asked before implementing the IPv4 bypass. I decided to implement the expression that I originally posted, which Noel repeats above, but the discussion of alternatives was both educational and valuable nonetheless. Thanks to everyone who participated. -- Stan