Issue with a new module and radiusd: symbol lookup error

Luca Adamo lucamerica at hotmail.com
Tue Sep 23 14:19:01 CEST 2008


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 at 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 at 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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeradius.org/pipermail/freeradius-users/attachments/20080923/17f2f95a/attachment.html>


More information about the Freeradius-Users mailing list