# We DON'T want to see this one.
#
update request {
- Filter-Id += "broken"
+ &Filter-Id += "broken"
}
-foreach Filter-Id {
+foreach &Filter-Id {
#
# If we see this one, "break" out of the
# foreach loop.
}
update reply {
- Called-Station-Id += "%{Foreach-Variable-0}"
+ &Called-Station-Id += "%{Foreach-Variable-0}"
}
}
# Adding attribute during request and immediately breaking
#
update {
- request:Filter-Id += "1"
- request:Filter-Id += "2"
+ &request:Filter-Id += "1"
+ &request:Filter-Id += "2"
}
foreach &request:Reply-Message {
if("%{Foreach-Variable-0}" == "1") {
update {
- request:Filter-Id += "3"
+ &request:Filter-Id += "3"
}
break
}
update {
- request:Filter-Id !* ANY
+ &request:Filter-Id !* ANY
}
#
# Adding attribute during request and continuing
#
update {
- request:Filter-Id += "1"
- request:Filter-Id += "2"
+ &request:Filter-Id += "1"
+ &request:Filter-Id += "2"
}
foreach &request:Reply-Message {
if("%{Foreach-Variable-0}" == "1") {
update {
- request:Filter-Id += "3"
+ &request:Filter-Id += "3"
}
}
#
update request {
- Calling-Station-Id := "ABCDEF_8"
+ &Calling-Station-Id := "ABCDEF_8"
}
update control {
&Tmp-String-0 += "g"
}
-foreach control:Tmp-String-0 {
+foreach &control:Tmp-String-0 {
if ("%{Calling-Station-Id[*]}" =~ /([A-Z0-9\-]*)_%{Foreach-Variable-0}/) {
update request {
- Called-Station-Id := "%{1}"
+ &Called-Station-Id := "%{1}"
}
success
break
#
update request {
- Calling-Station-Id := "8"
+ &Calling-Station-Id := "8"
}
update control {
#
update request {
- Calling-Station-Id := "8"
+ &Calling-Station-Id := "8"
}
update control {
&control:Tmp-String-0 += '3'
}
-foreach control:Tmp-String-0 {
+foreach &control:Tmp-String-0 {
update control {
- Tmp-String-0 -= "%{expr:%{Foreach-Variable-0} + 1}"
+ &Tmp-String-0 -= "%{expr:%{Foreach-Variable-0} + 1}"
}
update request {
- Tmp-String-0 += "%{Foreach-Variable-0}"
+ &Tmp-String-0 += "%{Foreach-Variable-0}"
}
}
foreach &request: {
update reply {
- Called-Station-Id += "%{Foreach-Variable-0}"
+ &Called-Station-Id += "%{Foreach-Variable-0}"
}
}
# PRE: foreach
#
-foreach Filter-Id {
- foreach Calling-Station-Id {
+foreach &Filter-Id {
+ foreach &Calling-Station-Id {
update reply {
- Called-Station-Id += "%{Foreach-Variable-0} %{Foreach-Variable-1}"
+ &Called-Station-Id += "%{Foreach-Variable-0} %{Foreach-Variable-1}"
}
}
}
# This is what most people end up using foreach for,
# so we should probably test it works.
update request {
- Tmp-String-0 := "cisco"
+ &Tmp-String-0 := "cisco"
}
# Expanded regex
-foreach Cisco-AVPair {
+foreach &Cisco-AVPair {
if ("%{Foreach-Variable-0}" =~ /^%{Tmp-String-0}=(.*)$/i) {
update reply {
- Called-Station-Id += "%{1}"
+ &Called-Station-Id += "%{1}"
}
}
}
# Compiled regex
-foreach Cisco-AVPair {
+foreach &Cisco-AVPair {
if ("%{Foreach-Variable-0}" =~ /^stupid=(.*)$/i) {
update reply {
- Called-Station-Id += "%{1}"
+ &Called-Station-Id += "%{1}"
}
}
}
#
update control {
- Cleartext-Password := 'hello'
+ &Cleartext-Password := 'hello'
}
#
# Adding attribute during request and immediately returning should still work
#
update request {
- Filter-Id := "1"
- Filter-Id += "2"
- Filter-Id += "3"
- Filter-Id += "4"
- Filter-Id += "5"
+ &Filter-Id := "1"
+ &Filter-Id += "2"
+ &Filter-Id += "3"
+ &Filter-Id += "4"
+ &Filter-Id += "5"
}
foreach &Filter-Id {
# in the "authorize" section.
#
update control {
- Auth-Type := PAP
+ &Auth-Type := PAP
}
-
+
#
# Stop processing "authorize", and go to the next section.
#
return
-
+
#
# Shouldn't reach this
#
update {
- control:Tmp-String-0 := "ssid=ABCDEF"
- control:Tmp-String-0 += "ssid=GHIJKL"
+ &control:Tmp-String-0 := "ssid=ABCDEF"
+ &control:Tmp-String-0 += "ssid=GHIJKL"
}
-if (User-Name) {
+if (&User-Name) {
foreach &control:Tmp-String-0 {
if ("%{Foreach-Variable-0}" =~ /(.*)/) {
update control {
- Tmp-String-1 := "%{1}"
+ &Tmp-String-1 := "%{1}"
}
}
}
}
update control {
- Tmp-String-1 !* ANY
+ &Tmp-String-1 !* ANY
}
foreach &control:Tmp-String-0 {
if ("%{Foreach-Variable-0}" =~ /(.*)/) {
update control {
- Tmp-String-1 := "%{1}"
+ &Tmp-String-1 := "%{1}"
}
}
}
}
update control {
- Tmp-String-1 !* ANY
+ &Tmp-String-1 !* ANY
}
success
#
# Matching "if" conditions
#
-if (User-Name == "bob") {
+if (&User-Name == "bob") {
success
}
-if (User-Name != "bob") {
+if (&User-Name != "bob") {
update reply {
- Filter-Id := "not bob"
+ &Filter-Id := "not bob"
}
}
#
# Matching "if" conditions
#
-if (User-Name != "bob") {
+if (&User-Name != "bob") {
update reply {
- Filter-Id := "not bob"
+ &Filter-Id := "not bob"
}
}
else {
#
# Matching "if" conditions
#
-if (User-Name != "bob") {
+if (&User-Name != "bob") {
update reply {
- Filter-Id := "not bob"
+ &Filter-Id := "not bob"
}
}
-elsif (User-Name == "bob") {
+elsif (&User-Name == "bob") {
success
}
else {
update reply {
- Filter-Id := "last else"
+ &Filter-Id := "last else"
}
}
# PRE: update if
#
update {
- control:Cleartext-Password := 'hello'
+ &control:Cleartext-Password := 'hello'
}
update request {
- Tmp-String-0 := 'foo'
- Tmp-String-0 += 'bar'
- Tmp-String-0 += 'baz'
+ &Tmp-String-0 := 'foo'
+ &Tmp-String-0 += 'bar'
+ &Tmp-String-0 += 'baz'
- Tmp-String-1 := 'GROUP ADMINISTRATORS'
- Tmp-String-1 += 'GROUP STUDENTS'
- Tmp-String-1 += 'GROUP PEONS'
+ &Tmp-String-1 := 'GROUP ADMINISTRATORS'
+ &Tmp-String-1 += 'GROUP STUDENTS'
+ &Tmp-String-1 += 'GROUP PEONS'
- Tmp-String-2 := 'PEONS'
- Tmp-String-2 += 'STUDENTS'
- Tmp-String-2 += 'ADMINISTRATORS'
+ &Tmp-String-2 := 'PEONS'
+ &Tmp-String-2 += 'STUDENTS'
+ &Tmp-String-2 += 'ADMINISTRATORS'
- Tmp-String-3 := 'no'
- Tmp-String-3 += 'no'
- Tmp-String-3 += 'yes'
+ &Tmp-String-3 := 'no'
+ &Tmp-String-3 += 'no'
+ &Tmp-String-3 += 'yes'
- Tmp-Integer-0 := 1
- Tmp-Integer-0 += 2
- Tmp-Integer-0 += 5
+ &Tmp-Integer-0 := 1
+ &Tmp-Integer-0 += 2
+ &Tmp-Integer-0 += 5
}
update control {
- Tmp-String-0 := 'foo'
- Tmp-String-0 += 'bar'
- Tmp-String-0 += 'baz'
-
- Tmp-String-1 := 'boink'
- Tmp-String-1 += 'tard'
- Tmp-String-1 += 'dink'
- Tmp-String-1 += 'slink'
-
- Tmp-Integer-0 := 01
- Tmp-Integer-0 += 02
- Tmp-Integer-0 += 05
- Tmp-Integer-0 += 04
-
- Tmp-Integer-1 := 10
- Tmp-Integer-1 += 20
- Tmp-Integer-1 += 30
+ &Tmp-String-0 := 'foo'
+ &Tmp-String-0 += 'bar'
+ &Tmp-String-0 += 'baz'
+
+ &Tmp-String-1 := 'boink'
+ &Tmp-String-1 += 'tard'
+ &Tmp-String-1 += 'dink'
+ &Tmp-String-1 += 'slink'
+
+ &Tmp-Integer-0 := 01
+ &Tmp-Integer-0 += 02
+ &Tmp-Integer-0 += 05
+ &Tmp-Integer-0 += 04
+
+ &Tmp-Integer-1 := 10
+ &Tmp-Integer-1 += 20
+ &Tmp-Integer-1 += 30
}
#
# PRE: update if
#
update {
- control:Cleartext-Password := 'hello'
+ &control:Cleartext-Password := 'hello'
}
#
#
# return code in an "if" section.
#
-if (User-Name == "bob") {
+if (&User-Name == "bob") {
update request {
- Proxy-State := 0x01020304
+ &Proxy-State := 0x01020304
}
ok = reject # ERROR
# PRE: update if if-regex-match
#
update {
- control:Cleartext-Password := 'hello'
+ &control:Cleartext-Password := 'hello'
}
-if (control:Cleartext-Password !~ /hell(o)(.*)/) {
+if (&control:Cleartext-Password !~ /hell(o)(.*)/) {
test_fail
}
test_fail
}
-if (control:Cleartext-Password !~ /hello(.*)/) {
+if (&control:Cleartext-Password !~ /hello(.*)/) {
test_fail
}
#
# Check assignment of regex null-match
#
-if (control:Cleartext-Password =~ /hell(o)(.*)/) {
+if (&control:Cleartext-Password =~ /hell(o)(.*)/) {
update {
- control:Tmp-String-1 := "%{2}"
+ &control:Tmp-String-1 := "%{2}"
}
}
# PRE: if
#
update request {
- Tmp-Integer-0 := '123456789'
+ &Tmp-Integer-0 := '123456789'
}
# Non matching on attribute ref
-if (User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])%{Tmp-String-0}/) {
+if (&User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])%{Tmp-String-0}/) {
test_fail
}
}
# Matching on attribute ref with capture groups
-if (User-Name =~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])%{Tmp-String-0}/) {
+if (&User-Name =~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])%{Tmp-String-0}/) {
# Test all the capture groups
update {
- reply:User-Name := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
+ &reply:User-Name := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
}
}
else {
}
# Checking capture groups are cleared out correctly
-if (User-Name =~ /^([0-9])_%{Tmp-String-0}/) {
+if (&User-Name =~ /^([0-9])_%{Tmp-String-0}/) {
if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1_1') {
test_fail
}
}
# Checking capture groups are cleared out correctly when there are no matches
-if (User-Name =~ /^.%{Tmp-String-0}/) {
+if (&User-Name =~ /^.%{Tmp-String-0}/) {
if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1') {
test_fail
}
}
# uncompiled - ref - insensitive
-if (Calling-Station-Id !~ /:roamyroam%{Tmp-String-0}$/i) {
+if (&Calling-Station-Id !~ /:roamyroam%{Tmp-String-0}$/i) {
test_fail
}
}
# uncompiled - enum - ref - insensitive
-if (Service-Type !~ /^framed-user%{Tmp-String-0}$/i) {
+if (&Service-Type !~ /^framed-user%{Tmp-String-0}$/i) {
test_fail
}
}
# uncompiled - enum - ref
-if (Service-Type =~ /^framed-user%{Tmp-String-0}$/) {
+if (&Service-Type =~ /^framed-user%{Tmp-String-0}$/) {
test_fail
}
# uncompiled - integer - ref
-if (Tmp-Integer-0 !~ /%{Tmp-Integer-0}/) {
+if (&Tmp-Integer-0 !~ /%{Tmp-Integer-0}/) {
test_fail
}
update request {
- Tmp-String-0 := "foo\nbar"
+ &Tmp-String-0 := "foo\nbar"
}
# uncompiled - ref - multiline
#
# Non matching on attribute ref
-if (User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
+if (&User-Name !~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
test_fail
}
}
# Matching on attribute ref with capture groups
-if (User-Name =~ /^([0-9])_([0-9])?_([0-9]*)_([0-9]+)_([^_])_(6)_([7-8])/) {
+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}"
+ &reply:User-Name := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
}
}
else {
}
# Checking capture groups are cleared out correctly
-if (User-Name =~ /^([0-9])_/) {
+if (&User-Name =~ /^([0-9])_/) {
if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1_1') {
test_fail
}
}
# Checking capture groups are cleared out correctly when there are no matches
-if (User-Name =~ /^./) {
+if (&User-Name =~ /^./) {
if ("%{0}%{1}%{2}%{3}%{4}%{5}%{6}%{7}" != '1') {
test_fail
}
}
# compiled - ref - insensitive
-if (Calling-Station-Id !~ /:roamyroam$/i) {
+if (&Calling-Station-Id !~ /:roamyroam$/i) {
test_fail
}
}
# compiled - enum - ref - insensitive
-if (Service-Type !~ /^framed-user$/i) {
+if (&Service-Type !~ /^framed-user$/i) {
test_fail
}
}
# compiled - enum - ref
-if (Service-Type =~ /^framed-user$/) {
+if (&Service-Type =~ /^framed-user$/) {
test_fail
}
update request {
- Tmp-String-0 := "foo\nbar"
+ &Tmp-String-0 := "foo\nbar"
}
# compiled - ref - multiline
#
if ('${feature.regex-pcre}' == 'yes') {
update request {
- Tmp-Integer-0 := '123456789'
+ &Tmp-Integer-0 := '123456789'
}
# uncompiled - ref - named capture groups
-if (User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])%{Tmp-String-1}/) {
+if (&User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])%{Tmp-String-1}/) {
update request {
- Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
+ &Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
}
if (&Tmp-String-0 != '7_6_5_4_3_2_1_1_2_3_4_5_6_7') {
test_fail
}
# Checking capture groups are cleared out correctly
-if (User-Name =~ /^(?<one>[0-9])_%{Tmp-String-1}/) {
+if (&User-Name =~ /^(?<one>[0-9])_%{Tmp-String-1}/) {
update request {
- Tmp-String-0 := "%{0}%{regex:one}%{regex:two}%{regex:three}%{regex:four}%{regex:five}%{regex:six}%{regex:seven}"
+ &Tmp-String-0 := "%{0}%{regex:one}%{regex:two}%{regex:three}%{regex:four}%{regex:five}%{regex:six}%{regex:seven}"
}
if (&Tmp-String-0 != '1_1') {
test_fail
}
# Checking capture groups are cleared out correctly when there are no matches
-if (User-Name =~ /^.%{Tmp-String-1}/) {
+if (&User-Name =~ /^.%{Tmp-String-1}/) {
update request {
- Tmp-String-0 := "%{0}%{regex:one}%{regex:two}%{regex:three}%{regex:four}%{regex:five}%{regex:six}%{regex:seven}"
+ &Tmp-String-0 := "%{0}%{regex:one}%{regex:two}%{regex:three}%{regex:four}%{regex:five}%{regex:six}%{regex:seven}"
}
if (&Tmp-String-0 != '1') {
test_fail
}
# compiled - ref - named capture groups
-if (User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
+if (&User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
update request {
- Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
+ &Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
}
if (&Tmp-String-0 != '7_6_5_4_3_2_1_1_2_3_4_5_6_7') {
test_fail
# compiled - xlat - named capture groups
if ('1_2_3_4_5_6_7' =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
update request {
- Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
+ &Tmp-String-0 := "%{regex:seven}_%{regex:six}_%{regex:five}_%{regex:four}_%{regex:three}_%{regex:two}_%{regex:one}_%{0}"
}
if (&Tmp-String-0 != '7_6_5_4_3_2_1_1_2_3_4_5_6_7') {
test_fail
}
# compiled - ref - named capture groups (numeric indexes)
-if (User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
+if (&User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
update request {
- Tmp-String-0 := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
+ &Tmp-String-0 := "%{7}_%{6}_%{5}_%{4}_%{3}_%{2}_%{1}_%{0}"
}
if (&Tmp-String-0 != '7_6_5_4_3_2_1_1_2_3_4_5_6_7') {
test_fail
}
# compiled - ref - named capture groups (numeric indexes using expansion)
-if (User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
+if (&User-Name =~ /^(?<one>[0-9])_(?<two>[0-9])?_(?<three>[0-9]*)_(?<four>[0-9]+)_(?<five>[^_])_(?<six>6)_(?<seven>[7-8])/) {
update request {
- Tmp-Integer-0 := 0
- Tmp-Integer-1 := 1
- Tmp-Integer-2 := 2
- Tmp-Integer-3 := 3
- Tmp-Integer-4 := 4
- Tmp-Integer-5 := 5
- Tmp-Integer-6 := 6
- Tmp-Integer-7 := 7
+ &Tmp-Integer-0 := 0
+ &Tmp-Integer-1 := 1
+ &Tmp-Integer-2 := 2
+ &Tmp-Integer-3 := 3
+ &Tmp-Integer-4 := 4
+ &Tmp-Integer-5 := 5
+ &Tmp-Integer-6 := 6
+ &Tmp-Integer-7 := 7
}
update request {
- Tmp-String-0 := "%{regex:%{Tmp-Integer-7}}_%{regex:%{Tmp-Integer-6}}_%{regex:%{Tmp-Integer-5}}_%{regex:%{Tmp-Integer-4}}_%{regex:%{Tmp-Integer-3}}_%{regex:%{Tmp-Integer-2}}_%{regex:%{Tmp-Integer-1}}_%{regex:%{Tmp-Integer-0}}"
+ &Tmp-String-0 := "%{regex:%{Tmp-Integer-7}}_%{regex:%{Tmp-Integer-6}}_%{regex:%{Tmp-Integer-5}}_%{regex:%{Tmp-Integer-4}}_%{regex:%{Tmp-Integer-3}}_%{regex:%{Tmp-Integer-2}}_%{regex:%{Tmp-Integer-1}}_%{regex:%{Tmp-Integer-0}}"
}
if (&Tmp-String-0 != '7_6_5_4_3_2_1_1_2_3_4_5_6_7') {
test_fail
# PRE: update if
#
update {
- control:Cleartext-Password := 'hello'
+ &control:Cleartext-Password := 'hello'
}
update request {
- Cisco-AVPair := 'foo=bar'
- Cisco-AVPair += 'bar=baz'
- Cisco-AVPair += 'baz=foo'
+ &Cisco-AVPair := 'foo=bar'
+ &Cisco-AVPair += 'bar=baz'
+ &Cisco-AVPair += 'baz=foo'
}
if (&Cisco-AVPair[*] =~ /bar=(.*)/) {
# PRE: xlat-integer
#
-if (NAS-Port == 4294967298) { # ERROR
+if (&NAS-Port == 4294967298) { # ERROR
}
# PRE: update if
#
update control {
- Cleartext-Password := 'hello'
+ &Cleartext-Password := 'hello'
}
update request {
# Dotted Quad
- Tmp-IP-Address-0 := 127.0.0.1
+ &Tmp-IP-Address-0 := 127.0.0.1
# Dotted Quad with prefix
- Tmp-IP-Address-1 := 127.0.0.2/32
+ &Tmp-IP-Address-1 := 127.0.0.2/32
# Hex (0x)
- Tmp-IP-Address-2 := 0x7f000003
+ &Tmp-IP-Address-2 := 0x7f000003
# Decimal
- Tmp-IP-Address-3 := 2130706436
+ &Tmp-IP-Address-3 := 2130706436
}
-if (NAS-IP-Address != 127.0.0.1) {
+if (&NAS-IP-Address != 127.0.0.1) {
test_fail
}
-if (Tmp-IP-Address-0 != 127.0.0.1) {
+if (&Tmp-IP-Address-0 != 127.0.0.1) {
test_fail
}
-if (Tmp-IP-Address-1 != 127.0.0.2) {
+if (&Tmp-IP-Address-1 != 127.0.0.2) {
test_fail
}
-if (Tmp-IP-Address-2 != 127.0.0.3) {
+if (&Tmp-IP-Address-2 != 127.0.0.3) {
test_fail
}
-if (Tmp-IP-Address-3 != 127.0.0.4) {
+if (&Tmp-IP-Address-3 != 127.0.0.4) {
test_fail
}
# PRE: update if
#
update control {
- Cleartext-Password := 'hello'
+ &Cleartext-Password := 'hello'
}
#
# Malformed NAS-IP-Address
#
update request {
- Attr-4 = 0x010203
+ &Attr-4 = 0x010203
}
if (!&Attr-4) {
update reply {
- Filter-Id := "Cannot find newly added raw attribute"
+ &Filter-Id := "Cannot find newly added raw attribute"
}
}
else {
if (&Attr-4 != 0x010203) {
update reply {
- Filter-Id := "Attr-4 is not 0x0120203"
+ &Filter-Id := "Attr-4 is not 0x0120203"
}
}
}
# PRE: update if
#
update control {
- Cleartext-Password := 'hello'
+ &Cleartext-Password := 'hello'
}
update control {
- Tmp-Cast-IPv4Prefix := 198.51.100.255/16
- Tmp-Cast-IPv6Prefix := ::198.51.100.255/112
- Framed-IP-Address := 198.51.0.1
+ &Tmp-Cast-IPv4Prefix := 198.51.100.255/16
+ &Tmp-Cast-IPv6Prefix := ::198.51.100.255/112
+ &Framed-IP-Address := 198.51.0.1
}
if ("%{control:Tmp-Cast-IPv6Prefix}" != '::198.51.0.0/112') {
test_fail
}
-if (control:Tmp-Cast-IPv6Prefix != ::198.51.0.0/112) {
+if (&control:Tmp-Cast-IPv6Prefix != ::198.51.0.0/112) {
test_fail
}
-if (control:Tmp-Cast-IPv4Prefix != 198.51.0.0/16) {
+if (&control:Tmp-Cast-IPv4Prefix != 198.51.0.0/16) {
test_fail
}
# PRE: hex
#
update request {
- Tmp-String-0 := '\
+ &Tmp-String-0 := '\
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
- Tmp-String-2 := '9870'
- Tmp-Octets-0 := 0x39383731
- Tmp-IP-Address-0 := 57.56.55.50
- Tmp-Date-0 := 959985459
- Tmp-Integer-0 := 959985460
- Tmp-Cast-Abinary := 'ip out forward srcip 57.56.55.53/32 udp dstport = 1812'
- Tmp-Cast-IfId := '0000:0000:3938:3737'
- Tmp-Cast-IPv6Addr := '::3938:3738'
- Tmp-Cast-IPv6Prefix := '::3938:3739/128'
- Tmp-Cast-Byte := 58
- Tmp-Cast-Short := 14139
- Tmp-Cast-Ether := 00:00:39:38:37:3c
- Tmp-Cast-Integer64 := 1152921505566832445
- Tmp-Cast-IPv4Prefix := 57.56.55.62/32
+ &Tmp-String-2 := '9870'
+ &Tmp-Octets-0 := 0x39383731
+ &Tmp-IP-Address-0 := 57.56.55.50
+ &Tmp-Date-0 := 959985459
+ &Tmp-Integer-0 := 959985460
+ &Tmp-Cast-Abinary := 'ip out forward srcip 57.56.55.53/32 udp dstport = 1812'
+ &Tmp-Cast-IfId := '0000:0000:3938:3737'
+ &Tmp-Cast-IPv6Addr := '::3938:3738'
+ &Tmp-Cast-IPv6Prefix := '::3938:3739/128'
+ &Tmp-Cast-Byte := 58
+ &Tmp-Cast-Short := 14139
+ &Tmp-Cast-Ether := 00:00:39:38:37:3c
+ &Tmp-Cast-Integer64 := 1152921505566832445
+ &Tmp-Cast-IPv4Prefix := 57.56.55.62/32
}
update request {
- Tmp-Integer-0 := "%{length:Tmp-String-0}"
+ &Tmp-Integer-0 := "%{length:&Tmp-String-0}"
}
-if (Tmp-Integer-0 != 260) {
+if (&Tmp-Integer-0 != 260) {
test_fail
}
update request {
- Tmp-Integer-0 := "%{length:Tmp-String-2}"
- Tmp-Integer-1 := "%{length:Tmp-Octets-0}"
- Tmp-Integer-2 := "%{length:Tmp-IP-Address-0}"
- Tmp-Integer-3 := "%{length:Tmp-Date-0}"
- Tmp-Integer-4 := "%{length:Tmp-Integer-0}"
- Tmp-Integer-5 := "%{length:Tmp-Cast-Abinary}"
- Tmp-Integer-6 := "%{length:Tmp-Cast-Ifid}"
- Tmp-Integer-7 := "%{length:Tmp-Cast-IPv6Addr}"
- Tmp-Integer-8 := "%{length:Tmp-Cast-IPv6Prefix}"
- Tmp-Integer-9 := "%{length:Tmp-Cast-Byte}"
+ &Tmp-Integer-0 := "%{length:&Tmp-String-2}"
+ &Tmp-Integer-1 := "%{length:&Tmp-Octets-0}"
+ &Tmp-Integer-2 := "%{length:&Tmp-IP-Address-0}"
+ &Tmp-Integer-3 := "%{length:&Tmp-Date-0}"
+ &Tmp-Integer-4 := "%{length:&Tmp-Integer-0}"
+ &Tmp-Integer-5 := "%{length:&Tmp-Cast-Abinary}"
+ &Tmp-Integer-6 := "%{length:&Tmp-Cast-Ifid}"
+ &Tmp-Integer-7 := "%{length:&Tmp-Cast-IPv6Addr}"
+ &Tmp-Integer-8 := "%{length:&Tmp-Cast-IPv6Prefix}"
+ &Tmp-Integer-9 := "%{length:&Tmp-Cast-Byte}"
}
# String - bin 0x39383730
-if (Tmp-Integer-0 != 4) {
+if (&Tmp-Integer-0 != 4) {
test_fail
}
# Octets - bin 0x39383731
-if (Tmp-Integer-1 != 4) {
+if (&Tmp-Integer-1 != 4) {
test_fail
}
# IP Address - bin 0x39383732
-if (Tmp-Integer-2 != 4) {
+if (&Tmp-Integer-2 != 4) {
test_fail
}
# Date - bin 0x39383733
-if (Tmp-Integer-3 != 4) {
+if (&Tmp-Integer-3 != 4) {
test_fail
}
# Integer - bin 0x39383734
-if (Tmp-Integer-4 != 4) {
+if (&Tmp-Integer-4 != 4) {
test_fail
}
# Abinary - bin 0x0101000039383735000000002000110000000714000200000000000000000000
-if (Tmp-Integer-5 != 32) {
+if (&Tmp-Integer-5 != 32) {
test_fail
}
# ifid - bin 0x0000000039383737
-if (Tmp-Integer-6 != 8) {
+if (&Tmp-Integer-6 != 8) {
test_fail
}
# ipv6addr - bin 0x00000000000000000000000039383738
-if (Tmp-Integer-7 != 16) {
+if (&Tmp-Integer-7 != 16) {
test_fail
}
# ipv6addrprefix - bin 0x8000000000000000000000000039383739
-if (Tmp-Integer-8 != 17) {
+if (&Tmp-Integer-8 != 17) {
test_fail
}
# byte - bin 0x3a
-if (Tmp-Integer-9 != 1) {
+if (&Tmp-Integer-9 != 1) {
test_fail
}
update request {
- Tmp-Integer-0 := "%{length:Tmp-Cast-Short}"
- Tmp-Integer-1 := "%{length:Tmp-Cast-Ether}"
- Tmp-Integer-2 := "%{length:Tmp-Cast-Integer64}"
- Tmp-Integer-3 := "%{length:Tmp-Cast-IPv4Prefix}"
+ &Tmp-Integer-0 := "%{length:&Tmp-Cast-Short}"
+ &Tmp-Integer-1 := "%{length:&Tmp-Cast-Ether}"
+ &Tmp-Integer-2 := "%{length:&Tmp-Cast-Integer64}"
+ &Tmp-Integer-3 := "%{length:&Tmp-Cast-IPv4Prefix}"
}
# short - bin 0x373b
-if (Tmp-Integer-0 != 2) {
+if (&Tmp-Integer-0 != 2) {
test_fail
}
# ethernet - bin 0x00003938373c
-if (Tmp-Integer-1 != 6) {
+if (&Tmp-Integer-1 != 6) {
test_fail
}
# integer64 - bin 0x100000003938373d
-if (Tmp-Integer-2 != 8) {
+if (&Tmp-Integer-2 != 8) {
test_fail
}
# ipv4prefix - bin 0x203938373e
-if (Tmp-Integer-3 != 5) {
+if (&Tmp-Integer-3 != 5) {
test_fail
}
}
update session-state {
- User-Name := 'foo'
+ &User-Name := 'foo'
}
if (!&session-state) {
# Should distribute load between the modules.
#
update request {
- Tmp-Integer-0 := 0
- Tmp-Integer-1 := 0
+ &Tmp-Integer-0 := 0
+ &Tmp-Integer-1 := 0
- Tmp-Integer-2 += 0 # 0
- Tmp-Integer-2 += 1
- Tmp-Integer-2 += 2
- Tmp-Integer-2 += 3
- Tmp-Integer-2 += 4
- Tmp-Integer-2 += 5
- Tmp-Integer-2 += 6
- Tmp-Integer-2 += 7
- Tmp-Integer-2 += 8
- Tmp-Integer-2 += 9 # 10
- Tmp-Integer-2 += 0
- Tmp-Integer-2 += 1
- Tmp-Integer-2 += 2
- Tmp-Integer-2 += 3
- Tmp-Integer-2 += 4
- Tmp-Integer-2 += 5
- Tmp-Integer-2 += 6
- Tmp-Integer-2 += 7
- Tmp-Integer-2 += 8
- Tmp-Integer-2 += 9 # 20
- Tmp-Integer-2 += 0
- Tmp-Integer-2 += 1
- Tmp-Integer-2 += 2
- Tmp-Integer-2 += 3
- Tmp-Integer-2 += 4
- Tmp-Integer-2 += 5
- Tmp-Integer-2 += 6
- Tmp-Integer-2 += 7
- Tmp-Integer-2 += 8
- Tmp-Integer-2 += 9 # 30
- Tmp-Integer-2 += 0
- Tmp-Integer-2 += 1
- Tmp-Integer-2 += 2
- Tmp-Integer-2 += 3
- Tmp-Integer-2 += 4
- Tmp-Integer-2 += 5
- Tmp-Integer-2 += 6
- Tmp-Integer-2 += 7
- Tmp-Integer-2 += 8
- Tmp-Integer-2 += 9 # 40
- Tmp-Integer-2 += 0
- Tmp-Integer-2 += 1
- Tmp-Integer-2 += 2
- Tmp-Integer-2 += 3
- Tmp-Integer-2 += 4
- Tmp-Integer-2 += 5
- Tmp-Integer-2 += 6
- Tmp-Integer-2 += 7
- Tmp-Integer-2 += 8
- Tmp-Integer-2 += 9 # 49
+ &Tmp-Integer-2 += 0 # 0
+ &Tmp-Integer-2 += 1
+ &Tmp-Integer-2 += 2
+ &Tmp-Integer-2 += 3
+ &Tmp-Integer-2 += 4
+ &Tmp-Integer-2 += 5
+ &Tmp-Integer-2 += 6
+ &Tmp-Integer-2 += 7
+ &Tmp-Integer-2 += 8
+ &Tmp-Integer-2 += 9 # 10
+ &Tmp-Integer-2 += 0
+ &Tmp-Integer-2 += 1
+ &Tmp-Integer-2 += 2
+ &Tmp-Integer-2 += 3
+ &Tmp-Integer-2 += 4
+ &Tmp-Integer-2 += 5
+ &Tmp-Integer-2 += 6
+ &Tmp-Integer-2 += 7
+ &Tmp-Integer-2 += 8
+ &Tmp-Integer-2 += 9 # 20
+ &Tmp-Integer-2 += 0
+ &Tmp-Integer-2 += 1
+ &Tmp-Integer-2 += 2
+ &Tmp-Integer-2 += 3
+ &Tmp-Integer-2 += 4
+ &Tmp-Integer-2 += 5
+ &Tmp-Integer-2 += 6
+ &Tmp-Integer-2 += 7
+ &Tmp-Integer-2 += 8
+ &Tmp-Integer-2 += 9 # 30
+ &Tmp-Integer-2 += 0
+ &Tmp-Integer-2 += 1
+ &Tmp-Integer-2 += 2
+ &Tmp-Integer-2 += 3
+ &Tmp-Integer-2 += 4
+ &Tmp-Integer-2 += 5
+ &Tmp-Integer-2 += 6
+ &Tmp-Integer-2 += 7
+ &Tmp-Integer-2 += 8
+ &Tmp-Integer-2 += 9 # 40
+ &Tmp-Integer-2 += 0
+ &Tmp-Integer-2 += 1
+ &Tmp-Integer-2 += 2
+ &Tmp-Integer-2 += 3
+ &Tmp-Integer-2 += 4
+ &Tmp-Integer-2 += 5
+ &Tmp-Integer-2 += 6
+ &Tmp-Integer-2 += 7
+ &Tmp-Integer-2 += 8
+ &Tmp-Integer-2 += 9 # 49
}
#
load-balance {
group {
update request {
- Tmp-Integer-0 := "%{expr:%{Tmp-Integer-0} + 1}"
- Filter-Id += "PICKED GROUP 1 %{Tmp-Integer-0} TIME(S)"
+ &Tmp-Integer-0 := "%{expr:%{Tmp-Integer-0} + 1}"
+ &Filter-Id += "PICKED GROUP 1 %{Tmp-Integer-0} TIME(S)"
}
ok
}
group {
update request {
- Tmp-Integer-1 := "%{expr:%{Tmp-Integer-1} + 1}"
- Filter-Id += "PICKED GROUP 2 %{Tmp-Integer-1} TIME(S)"
+ &Tmp-Integer-1 := "%{expr:%{Tmp-Integer-1} + 1}"
+ &Filter-Id += "PICKED GROUP 2 %{Tmp-Integer-1} TIME(S)"
}
ok
}
update control {
- Cleartext-Password := 'hello'
+ &Cleartext-Password := 'hello'
}
success
# PRE: map-2arg-error map-empty-error map-module-error map-field-error
#
map csv &User-Name {
- reply:Filter-Id := 'field3'
+ &reply:Filter-Id := 'field3'
}
# arg3 can be an xlat
#
map csv "%{tolower:%{User-Name}}" {
- reply:Filter-Id := 'field3'
+ &reply:Filter-Id := 'field3'
}
# PRE: map-2arg-error
#
map foo "bar" { # ERROR
- User-Name = 'foo'
+ &User-Name = 'foo'
}
# PRE: update
#
update request {
- Tmp-String-0 := '9870'
- Tmp-String-1 := '98709870'
- Tmp-String-2 := '184467440737095516157'
- Tmp-Octets-0 := 0x39383731
- Tmp-Octets-1 := 0x3938373139383731
- Tmp-Octets-2 := 0x393837313938373139383731
- Tmp-IP-Address-0 := 57.56.55.50
- Tmp-Date-0 := 959985459
- Tmp-Integer-0 := 959985460
- Tmp-Cast-Abinary := 'ip out forward srcip 57.56.55.53/32 udp dstport = 1812'
- Tmp-Cast-IfId := '0000:0000:3938:3737'
- Tmp-Cast-IPv6Addr := '::3938:3738'
- Tmp-Cast-IPv6Prefix := '::3938:3739/128'
- Tmp-Cast-Byte := 58
- Tmp-Cast-Short := 14139
- Tmp-Cast-Ether := 00:00:39:38:37:3c
- Tmp-Cast-Integer64 := 1152921505566832445
- Tmp-Cast-IPv4Prefix := 57.56.55.62/32
+ &Tmp-String-0 := '9870'
+ &Tmp-String-1 := '98709870'
+ &Tmp-String-2 := '184467440737095516157'
+ &Tmp-Octets-0 := 0x39383731
+ &Tmp-Octets-1 := 0x3938373139383731
+ &Tmp-Octets-2 := 0x393837313938373139383731
+ &Tmp-IP-Address-0 := 57.56.55.50
+ &Tmp-Date-0 := 959985459
+ &Tmp-Integer-0 := 959985460
+ &Tmp-Cast-Abinary := 'ip out forward srcip 57.56.55.53/32 udp dstport = 1812'
+ &Tmp-Cast-IfId := '0000:0000:3938:3737'
+ &Tmp-Cast-IPv6Addr := '::3938:3738'
+ &Tmp-Cast-IPv6Prefix := '::3938:3739/128'
+ &Tmp-Cast-Byte := 58
+ &Tmp-Cast-Short := 14139
+ &Tmp-Cast-Ether := 00:00:39:38:37:3c
+ &Tmp-Cast-Integer64 := 1152921505566832445
+ &Tmp-Cast-IPv4Prefix := 57.56.55.62/32
}
# String - network order representation of a 4 char string
update request {
- Tmp-Integer-1 := "%{integer:Tmp-String-0}"
+ &Tmp-Integer-1 := "%{integer:&Tmp-String-0}"
}
-if ((<integer>&Tmp-String-0 != &Tmp-Integer-1) || (Tmp-Integer-1 != 9870)) {
+if ((<integer>&Tmp-String-0 != &Tmp-Integer-1) || (&Tmp-Integer-1 != 9870)) {
test_fail
}
# String - network order representation of a 8 char string
update request {
- Tmp-Integer64-0 := "%{integer:Tmp-String-1}"
+ &Tmp-Integer64-0 := "%{integer:&Tmp-String-1}"
}
if ((<integer64>&Tmp-String-1 != &Tmp-Integer64-0) || (&Tmp-Integer64-0 != 98709870)) {
test_fail
}
# String - Can't convert 12 byte string to integer (our biggest native size is a 64bit unsigned int)
-if ("%{integer:Tmp-String-2}" != '') {
+if ("%{integer:&Tmp-String-2}" != '') {
test_fail
}
# Octets - network order representation of a 4 byte octet string
update request {
- Tmp-Integer-1 := "%{integer:Tmp-Octets-0}"
+ &Tmp-Integer-1 := "%{integer:&Tmp-Octets-0}"
}
#
# Disabled until xlats can return binary data
#
-#if (Tmp-Octets-0 != "%{hex:Tmp-Integer-1}") {
+#if (&Tmp-Octets-0 != "%{hex:Tmp-Integer-1}") {
# test_fail
#}
-if (Tmp-Integer-1 != 959985457) {
+if (&Tmp-Integer-1 != 959985457) {
test_fail
}
# Octets - network order representation of a 8 byte octet string
update request {
- Tmp-Integer64-0 := "%{integer:Tmp-Octets-1}"
+ &Tmp-Integer64-0 := "%{integer:&Tmp-Octets-1}"
}
#
# Disabled until xlats can return binary data
#
-#if (Tmp-Octets-1 != "%{hex:Tmp-Integer64-0}") {
+#if (&Tmp-Octets-1 != "%{hex:Tmp-Integer64-0}") {
# test_fail
#}
-if (Tmp-Integer64-0 != 4123106143410599729) {
+if (&Tmp-Integer64-0 != 4123106143410599729) {
test_fail
}
# String - Can't convert 12 byte octet string to integer (our biggest native size is a 64bit unsigned int)
-if ("%{integer:Tmp-Octets-2}" != '') {
+if ("%{integer:&Tmp-Octets-2}" != '') {
test_fail
}
update request {
- Tmp-String-2 := "%{integer:Tmp-IP-Address-0}"
- Tmp-String-3 := "%{integer:Tmp-Date-0}"
- Tmp-String-4 := "%{integer:Tmp-Integer-0}"
- Tmp-String-5 := "%{integer:Tmp-Cast-Abinary}"
- Tmp-String-6 := "%{integer:Tmp-Cast-Ifid}"
- Tmp-String-7 := "%{integer:Tmp-Cast-IPv6Addr}"
- Tmp-String-8 := "%{integer:Tmp-Cast-IPv6Prefix}"
+ &Tmp-String-2 := "%{integer:&Tmp-IP-Address-0}"
+ &Tmp-String-3 := "%{integer:&Tmp-Date-0}"
+ &Tmp-String-4 := "%{integer:&Tmp-Integer-0}"
+ &Tmp-String-5 := "%{integer:&Tmp-Cast-Abinary}"
+ &Tmp-String-6 := "%{integer:&Tmp-Cast-Ifid}"
+ &Tmp-String-7 := "%{integer:&Tmp-Cast-IPv6Addr}"
+ &Tmp-String-8 := "%{integer:&Tmp-Cast-IPv6Prefix}"
}
# IP Address
-if (Tmp-String-2 != '959985458') {
+if (&Tmp-String-2 != '959985458') {
test_fail
}
-if (<ipaddr>Tmp-String-2 != &Tmp-IP-Address-0) {
+if (<ipaddr>&Tmp-String-2 != &Tmp-IP-Address-0) {
test_fail
}
# Date
-if (Tmp-String-3 != '959985459') {
+if (&Tmp-String-3 != '959985459') {
test_fail
}
# Integer
-if (Tmp-String-4 != '959985460') {
+if (&Tmp-String-4 != '959985460') {
test_fail
}
# Abinary - Can't convert ascend binary to an integer
-if (Tmp-String-5 != '') {
+if (&Tmp-String-5 != '') {
test_fail
}
# ifid - Can't convert interface ID to an integer
-if (Tmp-String-6 != '') {
+if (&Tmp-String-6 != '') {
test_fail
}
# ipv6addr - Can't convert IPv6 to integer
-if (Tmp-String-7 != '959985464') {
+if (&Tmp-String-7 != '959985464') {
test_fail
}
# ipv6addrprefix
-if (Tmp-String-8 != '959985465') {
+if (&Tmp-String-8 != '959985465') {
test_fail
}
update request {
- Tmp-String-0 := "%{integer:Tmp-Cast-Byte}"
- Tmp-String-1 := "%{integer:Tmp-Cast-Short}"
- Tmp-Integer64-2 := "%{integer:Tmp-Cast-Ether}"
- Tmp-String-3 := "%{integer:Tmp-Cast-Integer64}"
- Tmp-String-4 := "%{integer:Tmp-Cast-IPv4Prefix}"
+ &Tmp-String-0 := "%{integer:&Tmp-Cast-Byte}"
+ &Tmp-String-1 := "%{integer:&Tmp-Cast-Short}"
+ &Tmp-Integer64-2 := "%{integer:&Tmp-Cast-Ether}"
+ &Tmp-String-3 := "%{integer:&Tmp-Cast-Integer64}"
+ &Tmp-String-4 := "%{integer:&Tmp-Cast-IPv4Prefix}"
}
# byte
-if (Tmp-String-0 != '58') {
+if (&Tmp-String-0 != '58') {
test_fail
}
# short
-if (Tmp-String-1 != '14139') {
+if (&Tmp-String-1 != '14139') {
test_fail
}
# ethernet
-if (Tmp-Integer64-2 != 959985468) {
+if (&Tmp-Integer64-2 != 959985468) {
test_fail
}
# with the lowest octet of the integer mapping to the right-most
# ethernet octet (in network order)
#
-if (<ether>Tmp-Integer64-2 != &Tmp-Cast-Ether) {
+if (<ether>&Tmp-Integer64-2 != &Tmp-Cast-Ether) {
test_fail
}
# integer64
-if (Tmp-String-3 != '1152921505566832445') {
+if (&Tmp-String-3 != '1152921505566832445') {
test_fail
}
# ipv4prefix
-if (Tmp-String-4 != '959985470') {
+if (&Tmp-String-4 != '959985470') {
test_fail
}