# PRE: if # # Non matching on attribute ref if (User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) { update reply { Filter-Id += 'Fail 0' } } # Matching on xlat expanded value if ("%{User-Name}" !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) { update reply { Filter-Id += 'Fail 1' } } # Matching on attribute ref with capture groups if (User-Name =~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) { # Test all the capture groups update { reply:User-Name := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}" } } else { update reply { Filter-Id += 'Fail 2' } } # Checking capture groups are cleared out correctly if (User-Name =~ /^([0-9])_/) { if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1_1') { update reply { Filter-Id += 'Fail 3' } } } else { update reply { Filter-Id += 'Fail 3.5' } } # Checking capture groups are cleared out correctly when there are no matches if (User-Name =~ /^./) { if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1') { update reply { Filter-Id += 'Fail 4' } } } else { update reply { Filter-Id += 'Fail 4.5' } } # compiled - ref - insensitive if (Calling-Station-Id !~ /:roamyroam$/i) { update reply { Filter-Id += 'Fail 5' } } # compiled - expansion - insensitive if ("%{Calling-Station-Id}" !~ /:roamyroam$/i) { update reply { Filter-Id += 'Fail 6' } } # compiled - enum - ref - insensitive if (Service-Type !~ /^framed-user$/i) { update reply { Filter-Id += 'Fail 7' } } # compiled - enum - expansion - insensitive if ("%{Service-Type}" !~ /^framed-user$/i) { update reply { Filter-Id += 'Fail 8' } } # compiled - enum - ref if (Service-Type =~ /^framed-user$/) { update reply { Filter-Id += 'Fail 9' } } update request { Tmp-String-0 := "foo\nbar" } # compiled - ref - multiline if (&Tmp-String-0 !~ /^foo$/m) { update reply { Filter-Id += 'Fail 14' } } # compiled - ref - non-multiline if (&Tmp-String-0 =~ /^foo$/) { update reply { Filter-Id += 'Fail 15' } } # compiled - ref - non-multiline # Not all POSIX implementations support the \n character classes # so only run this test if the server was built with libpcre. if (("${feature.regex-pcre}" == 'yes') && (&Tmp-String-0 !~ /^foo\nbar$/)) { update reply { Filter-Id += 'Fail 16' } } # compiled - ref - multiline if (&Tmp-String-0 !~ /^bar$/m) { update reply { Filter-Id += 'Fail 17' } } # compiled - ref - multiline - sensitive if (&Tmp-String-0 =~ /^BAR$/m) { update reply { Filter-Id += 'Fail 17' } } # compiled - ref - multiline - insensitive if (&Tmp-String-0 !~ /^BAR$/mi) { update reply { Filter-Id += 'Fail 17' } } # compiled - ref - multiline - insensitive (flag order reversed) if (&Tmp-String-0 !~ /^BAR$/im) { update reply { Filter-Id += 'Fail 18' } }