Hi,

Is it possible to use sql expansion with query stored in a radius
attribute (e.g. Tmp-String-0)? Currently it mime-encodes the
characters equal (=) and single quote (') to "=3D" and "=27", so it's
not usable.

For example, I have something like this to store my local
configuration variables:

local-config {
sql-now="select concat('Current time = ',now())"
}

... and modify safe-characters on an sql/mysql/dialup.conf to include
some extra characters (including equal sign and single quote)

        safe-characters =
"@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_:
/'="

... and put some test sql expansion (on sites-available/default,
authorize section)

    update control {
                Tmp-String-0 := "${local-config.sql-now}"
    }
    update reply {
                Reply-Message := "Test1: ${local-config.sql-now}"
                Reply-Message += "Test2: %{sql:${local-config.sql-now}}"
                Reply-Message += "Test3: %{control:Tmp-String-0}"
                Reply-Message += "Test4: %{sql:%{control:Tmp-String-0}}"
    }

... and the resulting radtest output:

$ radtest testuser testpass 127.0.0.1 0 testing123
Sending Access-Request of id 228 to 127.0.0.1 port 1812
        User-Name = "testuser"
        User-Password = "testpass"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=228, length=166
        Reply-Message = "Test1: select concat('Current time = ',now())"
        Reply-Message = "Test2: Current time = 2011-10-19 13:35:21"
        Reply-Message = "Test3: select concat('Current time = ',now())"
        Reply-Message = "Test4: "

So the fourth test (sql expansion with query in an attribute) failed.
Radius debug output shows this

++[control] returns updated
sql_xlat
        expand: %{User-Name} -> testuser
sql_set_user escaped user --> 'testuser'
        expand: select concat('Current time = ',now()) -> select
concat('Current time = ',now())
rlm_sql (sql): Reserving sql socket id: 4
sql_xlat finished
rlm_sql (sql): Released sql socket id: 4
        expand: Test2: %{sql:select concat('Current time = ',now())} ->
Test2: Current time = 2011-10-19 13:35:21
        expand: Test3: %{control:Tmp-String-0} -> Test3: select
concat('Current time = ',now())
sql_xlat
        expand: %{User-Name} -> testuser
sql_set_user escaped user --> 'testuser'
        expand: %{control:Tmp-String-0} -> select concat=28'Current time =
'=2Cnow=28=29=29
rlm_sql (sql): Reserving sql socket id: 3
rlm_sql_mysql: MYSQL check_error: 1064 received
rlm_sql (sql): database query error, select concat=28'Current time =
'=2Cnow=28=29=29: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '=2Cnow=28=29=29' at line 1
rlm_sql (sql): Released sql socket id: 3
        expand: Test4: %{sql:%{control:Tmp-String-0}} -> Test4:
++[reply] returns updated


Is there a way to change which characters remain unencoded? Thanks.

-- 
Fajar
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to