Hi All. I have some code in an “sql” policy:
sql_check_user_present {
update control {
Tmp-String-0 := "%{sql_pwifi:SELECT COUNT(*) from voucher v left join state s on v.id=s.voucher_id where v.id=s.voucher_id and v.code='%{User-Name}' and (s.state='Inactive' or s.state='Active')}”
}
switch "%{control:Tmp-String-0}" {
case "0" {
update control {
User-RejectInformation := "Sorry, that voucher code is invalid or has expired."
Debug-RejectInformation := "Voucher code not present in database table, or voucher expired"
}
reject
}
case "1" {
noop
}
case {
# voucher has multiple table entries, oooh errr.
update control {
User-RejectInformation := "Sorry, there has been an error. Please contact IT."
Debug-RejectInformation := "Multiple voucher codes the same, or database error - SQL count not = 0 or 1. This should never happen due to primary key constraint!"
}
reject
}
}
}
This works fine in 3.0, git version #f66d411, but I have a problem with a regex related thing causing a segfault in that version and wouldn’t mind trying the latest version to see if it’s fixed.
Trying version #d166290 results in
/usr/local/etc/raddb/policy.d/sql[6]: "case" statements may only appear within a "switch" section
/usr/local/etc/raddb/policy.d/sql[6]: Failed to parse "case" subsection.
/usr/local/etc/raddb/policy.d/sql[5]: Failed to parse "switch" subsection.
/usr/local/etc/raddb/sites-enabled/default[220]: Errors parsing authorize section.
Do I need to change how the switch statement works? The unlang page doesn’t seem to have changed as far as I can tell.
Thanks
Andy