Hi everybody,

I'm using a self compiled version of FreeRADIUS 2.1.0 on a Linux x86 box running ubuntu 8.04 updated. 
I've been able to succesfully install and configure the server and to run some test using a D-Link access-point getting a regular Access-Accept.

My troubles started when I decided to implement a new module. My module has a structure similar to the sql module in fact it is used to query a MySQL database. I have been able to make this module connect to the database and to perform some operation on the reply packet during the postauth phase (basically adding attributes).

I also wanted to use this module, rlm_wimax_qos, in the authorize phase but here I got stuck because a symbol lookup error. 

I'm providing all the details I can, first of all the final part of radiusd -X command:

Module: Linked to module rlm_wimax_qos
 Module: Instantiating wimax_qos
  wimax_qos {
driver = "rlm_sql_mysql"
server = "localhost"
port = ""
login = "root"
password = "rootpass"
radius_db = "radiusDB"
read_groups = yes
sqltrace = no
sqltracefile = "/usr/local/var/log/radius/sqltrace.sql"
readclients = no
deletestalesessions = yes
num_sql_socks = 5
sql_user_name = "%{User-Name}"
default_user_profile = ""
nas_query = "SELECT id,nasname,shortname,type,secret FROM nas"
authorize_check_query = ""
authorize_reply_query = ""
authorize_group_check_query = ""
authorize_group_reply_query = ""
accounting_onoff_query = ""
accounting_update_query = ""
accounting_update_query_alt = ""
accounting_start_query = ""
accounting_start_query_alt = ""
accounting_stop_query = ""
accounting_stop_query_alt = ""
connect_failure_retry_delay = 60
simul_count_query = ""
simul_verify_query = ""
postauth_query = "INSERT into radpostauth (user, pass, reply, date) values ('%{User-Name}', '%{User-Password:-Chap-Password}', '%{reply:Packet-Type}', NOW())"
qos_profile_query = "SELECT qos_id FROM class_table WHERE EAP_Inner_GID='%{reply:EAP-Inner-GID}' AND EAP_Outer_GID='%{reply:EAP-Outer-GID}'"
qos_get_attribute_query = "SELECT id,qos_id,attribute,value,op FROM qos_profile_table WHERE qos_id=%{reply:Qos_Id}"
nas_capability_query = "SELECT NAS_DHCP_Support,DHCP_Proxy_Relay,MIP_FA_Address,type,nasname FROM nas_table WHERE nasname='%{NAS-IP-Address}'"
dhcp_sec_assoc_query = "SELECT DHCP_RK_Key_ID,DHCP_RK_Lifetime,DHCP_RK FROM dhcp_handling_table WHERE DHCPv4_Server='%{reply:WiMAX-DHCPv4-Server}'"
dhcp_sec_existid_query = "SELECT DHCP_RK_Key_ID,DHCP_RK_Lifetime,DHCP_RK FROM dhcp_handling_table WHERE DHCP_RK_Key_ID ='%{packet:WiMAX-DHCP-RK-Key-Id}'"
dhcp_sec_update_query = "INSERT INTO dhcp_handling_table (DHCPv4_Server,DHCP_RK_Key_ID,DHCP_RK_Lifetime,DHCP_RK) VALUES ('%{reply:WiMAX-DHCPv4-Server}','%{reply:gen_WiMAX-DHCP-RK-Key-ID}','%{reply:gen_WiMAX-DHCP-RK-Lifetime}','%{reply:gen_WiMAX-DHCP-RK}')"
dhcp_rm_old_key_query = "DELETE FROM dhcp_handling_table WHERE DHCPv4_Server='%{reply:WiMAX-DHCPv4-Server}'"
static_only_config = "1"
dhcp_rk_timeout = "36000"
safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /"
  }
rlm_sql (wimax_qos): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked
rlm_sql (wimax_qos): Attempting to connect to root@localhost:/radiusDB
radiusd: symbol lookup error: /usr/local/lib/rlm_wimax_qos-2.1.0.so: undefined symbol: sql_init_socketpool

Then I'm also providing the relevant portion of the radiusd.conf file.
Please note that no problems occur if I only "call" the module during postauth. In this phase the module's behaviour is the one expected.

authorize {
        preprocess
        auth_log
        wimax_qos
        eap
}


authenticate {
        eap
        mschap
}


preacct {
        preprocess
        acct_unique
        suffix
        files
}

accounting {
        detail
        radutmp
        sql
}


session {
        radutmp
        sql
}


post-auth {
        wimax_qos
}

Finally I can provide the last part of the module code, the one where I set the function that serves as an entry point during the authorize phase.

module_t rlm_wimax_qos = {
         RLM_MODULE_INIT,
         "wimax_qos",
         RLM_TYPE_THREAD_SAFE,          /* type */
         wimax_qos_instantiate,         /* instantiation */
         wimax_qos_detach,                      /* detach */
         {
                  NULL, /* authentication */
                  wimax_qos_authorize,  /* authorization */
                  NULL, /* preaccounting */
                  NULL, /* accounting */
                  NULL, /* checksimul */
                  NULL,                 /* pre-proxy */
                  NULL,                 /* post-proxy */
                  wimax_qos_postauth,   /* post-auth */
         },
};

I have tried by best to understand where the error below comes from. Compiling goes fine, no errors are found. If I put the module under authorize in radiusd.conf the error happen, otherwise everything is going fine (but nothing of what i want is performed during authorize). I'm keeping saying this because I want to point out that the issue is configuration dependent and that my code works in certain circumstances (i.e. the symbol is not missing from the dynamic library).

rlm_sql (wimax_qos): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked
rlm_sql (wimax_qos): Attempting to connect to root@localhost:/radiusDB
radiusd: symbol lookup error: /usr/local/lib/rlm_wimax_qos-2.1.0.so: undefined symbol: sql_init_socketpool

If someone has a clue everything is welcome, and If more details are needed I can do my best to provide them.

Thank you,

Lu