tnt@kalik.net a écrit :
So In the authorize section i tried to add an update directive where i define a variable which has the result of the sql query as value. Then i want to concatenate this variable with the value of the Pool-Name attribute as defined in the users file and set it as the new value of Pool-Name. I think this would work for what i want to do.
update control { "%{MANA-DSL-Type}" = mysqldb:"SELECT value FROM radcheck WHERE attribute='Subscription-Type' AND username='%{User-Name}'" if ("%{MANA-DSL-Type}") { Pool-Name := "%{Pool-Name}""%{ADSL-Type}" } }
Ugh.
I knew you was going to said that :)
1. Forget custom dictionaries. Use already defined temporary attributes from freeradius internal dictionary (ie. Tmp-String-0,..., Tmp-Integer-0, ... etc.)
good
2. "%{}" goes around the value not attribute name:
Tmp-String-0 = "%{mysqldb:SELECT value FROM...}"
understood
3. You can't put if inside the control section. You can put update control inside if section.
update control { read temporary value from the database }
if(whatever) { update control { ...
ok here is what i have now: # I want the pool to be the concatenation of pool-name as previously set by huntgroup in # users file, the expanded value of tmp-String-0 and the string "_pool" if possible update control { Tmp-String-0 = "%{mysqldb:SELECT forfait FROM test WHERE username='%{User-Name}'}" Pool-Name := "%{Pool-Name}""%{Tmp-String-0}"_pool } Two problems I can see in the debug output: - 1 - control returns noop (the update control is placed at the end ofthe authorize section after pap), and so nothing happens... - 2 - when expanded "%{Pool-Name}" is empty whereas users as been proceed before the "update control". Any idea? here is the revelant debug: rlm_sql (mysqldb): - sql_xlat expand: %{User-Name} -> scott rlm_sql (mysqldb): sql_set_user escaped user --> 'scott' expand: SELECT forfait FROM test WHERE username='%{User-Name}' -> SELECT forfait FROM test WHERE username='scott' expand: /var/log/freeradius/sqltrace.sql -> /var/log/freeradius/sqltrace.sql rlm_sql (mysqldb): Reserving sql socket id: 4 rlm_sql_mysql: query: SELECT forfait FROM test WHERE username='scott' rlm_sql (mysqldb): - sql_xlat finished rlm_sql (mysqldb): Released sql socket id: 4 expand: %{mysqldb:SELECT forfait FROM test WHERE username='%{User-Name}'} -> ADSL512 expand: %{Pool-Name} -> ++[control] returns noop
Ivan Kalik Kalik Informatika ISP
- List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html