Segmentation fault in rlm_sql_postgresql

Olivn olivn at trollprod.org
Mon Oct 26 17:23:57 CET 2009


Hi all

radiusd crashes when Postgresql returns PGRES_FATAL_ERROR.


Olivier


-------- environment -----------

OS: Centos 5.3
Freeradius : 2.1.7 (also occurred in 2.1.6)
packages are from
http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/
Postgresql : 8.1
<http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/freeradius2-2.1.7-2.el5.i386.rpm>


------- debug output -----------


radius -X output:

...
}
rlm_sql (sql_secondary): Driver rlm_sql_postgresql (module
rlm_sql_postgresql) loaded and linked
rlm_sql (sql_secondary): Attempting to connect to
radius at 100.100.100.131:5432/radius
rlm_sql (sql_secondary): starting 0
rlm_sql (sql_secondary): Attempting to connect rlm_sql_postgresql #0
rlm_sql (sql_secondary): Connected new DB handle, #0
rlm_sql (sql_secondary): starting 1
rlm_sql (sql_secondary): Attempting to connect rlm_sql_postgresql #1
rlm_sql (sql_secondary): Connected new DB handle, #1
rlm_sql (sql_secondary): starting 2
rlm_sql (sql_secondary): Attempting to connect rlm_sql_postgresql #2
rlm_sql (sql_secondary): Connected new DB handle, #2
rlm_sql (sql_secondary): starting 3
rlm_sql (sql_secondary): Attempting to connect rlm_sql_postgresql #3
rlm_sql (sql_secondary): Connected new DB handle, #3
rlm_sql (sql_secondary): starting 4
rlm_sql (sql_secondary): Attempting to connect rlm_sql_postgresql #4
rlm_sql (sql_secondary): Connected new DB handle, #4
Module: Checking post-proxy {...} for more modules to load
} # modules
} # server
radiusd: #### Opening IP addresses and Ports ####
listen {
type = "auth"
ipaddr = *
port = 1812
}
Listening on authentication address * port 1812
Listening on proxy address * port 1814
Ready to process requests.
rad_recv: Access-Request packet from host 100.100.100.2 port 12048,
id=38, length=116
NAS-Identifier = "XXXXXX"
User-Name = "U0123456"
User-Password = "XXXXXXX"
NAS-IP-Address = 100.100.100.2
NAS-Port = 0
Acct-Session-Id = "XXXXXXX(ZZZ)\"Sun Oct 25 10:16:45 2009\"HcSrdUv5"
+- entering group authorize {...}
[suffix] No '@' in User-Name = "U0123456", looking up realm NULL
[suffix] Found realm "NULL"
[suffix] Adding Stripped-User-Name = "U0123456"
[suffix] Adding Realm = "NULL"
[suffix] Proxying request from user U0123456 to realm NULL
[suffix] Preparing to proxy authentication request to realm "NULL"
++[suffix] returns updated
++- entering policy redundant {...}
[sql_primary] expand: %{User-Name} ->  U0123456
[sql_primary] sql_set_user escaped user -->  'U0123456'
rlm_sql (sql_primary): Reserving sql socket id: 4
[sql_primary] expand: SELECT id, UserName, Attribute, Value, Op FROM
radcheck WHERE Username = '%{SQL-User-Name}' ORDER BY id ->  SELECT id,
UserName, Attribud
rlm_sql_postgresql: Status: PGRES_FATAL_ERROR
rlm_sql_postgresql: Error (null)


Program received signal SIGSEGV, Segmentation fault.
0x00c6040a in strcmp () from /lib/libc.so.6
(gdb) info threads
* 1 Thread 0xb7fcead0 (LWP 30560) 0x00c6040a in strcmp () from
/lib/libc.so.6
(gdb) thread apply all bt full

Thread 1 (Thread 0xb7fcead0 (LWP 30560)):
#0 0x00c6040a in strcmp () from /lib/libc.so.6
No symbol table info available.
#1 0x006c790f in sql_query (sqlsocket=0x867a968, config=0x8657cf8,
querystr=0xbfc78fdc "SELECT id, UserName, Attribute, Value, Op FROM
radcheck WHERE Username = 'U0123456' ORDER BY id") at sql_postgresql.c:118
status =<value optimized out>
pg_sock =<value optimized out>
numfields =<value optimized out>
errorcode = 0x0
errormsg =<value optimized out>
#2 0x008911e2 in rlm_sql_select_query (sqlsocket=0x867a968, inst=0x8657cc0,
query=0xbfc78fdc "SELECT id, UserName, Attribute, Value, Op FROM
radcheck WHERE Username = 'U0123456' ORDER BY id") at sql.c:559
ret =<value optimized out>
#3 0x00891782 in sql_getvpdata (inst=0x8657cc0, sqlsocket=0x867a968,
pair=0xbfc78fd8,
query=0xbfc78fdc "SELECT id, UserName, Attribute, Value, Op FROM
radcheck WHERE Username = 'U0123456' ORDER BY id") at sql.c:606
row =<value optimized out>
rows = 0
#4 0x0088efae in rlm_sql_authorize (instance=0x8657cc0,
request=0x86b2048) at rlm_sql.c:1007
check_tmp = (VALUE_PAIR *) 0x0
reply_tmp = (VALUE_PAIR *) 0x0
user_profile =<value optimized out>
found =<value optimized out>
dofallthrough = 1
rows =<value optimized out>
sqlsocket = (SQLSOCK *) 0x867a968
inst =<value optimized out>
querystr = "SELECT id, UserName, Attribute, Value, Op FROM radcheck
WHERE Username = 'U0123456' ORDER BY
id\000o/'\006?o/'X?o/'?\017?\000\b\222o/'|\220o/'h\221o/'5b?\000|\220o/'A?\.
sqlusername = "U0123456", '\0'<repeats 38 times>, "
?o/'(xe\b??\210\000\214+\000\000\000\000\000u<?o/'X?o/'_N\006O\t\000\000\000\200?\210\000H?\210\000^N\006O\000\000\000\000\r\.
profileusername =
"@?\021\000?*k\b?*k\b\000i$q0%Z\000 at rd\b\000\000\000\000\210?o/'&\205Y\000?*k\b?\202W\b?*\000\000\001\000\000\000\230,X\000\200\n\022\000?(k\b?\202W\b?*k\b?.
#5 0x08062dfe in modcall (component=1, c=0x8657570, request=0x86b2048)
at modcall.c:292
myresult = 1
stack = {pointer = -1, priority = {0, 4, 0, -1077435628, 13600512,
140868088, 0, 0, 2, 0, 0, 12952177, -1077435732, 140861472, 140861480,
140861476,
-1208162612, -1077435192, 140867624, 0, -1208147968, 12509120, 12508320,
140861464, -1077435560, 12509760, 12455465, 12572564, 1172048, 12936180,
12952177, 20},
result = {6, 8, 6, 12940957, -1077435604, -1077435316, -1077435061,
-1077435032, 13832180, -1077435316, -1077435604, -1077435368, 13460021,
-1077435604,
134726134, -1077435032, -1077435316, 0, -1077435444, 255, -72515583,
-1077435316, -1077435316, -1077435316, -1077435316, -1077435289,
-1077435061, -1077435316,
-1077435061, 0, 0, 0}, children = {0x8657570, 0x86575c0, 0x8683280, 0x4,
0xbedfc0, 0x0, 0x0, 0xbfc7a414, 0xbfc7a33c, 0xbe0e29, 0xd32140, 0x0,
0x8656fc8, 0x101,
0xffffffff, 0xd832ca, 0xd18918, 0x86577a8, 0x8655dc8, 0xbfc7a3c8,
0xd832ca, 0x8656fc8, 0x101, 0xd80f9b, 0xd8575c, 0xd30940, 0x0,
0xbfc7a3f8, 0xd81470, 0x0,
0xd30ff4, 0x71246900}, start = {0x8085e9c, 0x8657518, 0x8683280,
0xbfc7a418, 0x805d2ae, 0x1, 0x80786f1, 0xbfc7a428, 0x0, 0x0, 0xc5769d,
0xbfc7a448, 0x8085e9c,
0xbfc7a428, 0x8085e9c, 0xbfc7a558, 0x80519bd, 0x1, 0x80786f1,
0xbfc7a44c, 0x100, 0x807c1f6, 0xbfc7a568, 0xbfc7a8b8, 0x0, 0xc5a271,
0xff, 0xbfc7a568, 0x74736e49,
0x69746e61, 0x6e697461, 0x71732067}}
parent = (modcallable *) 0x86575c0
child = (modcallable *) 0x8683280
if_taken = 0
was_if = 0
#6 0x0805fa65 in indexed_modcall (comp=1, idx=0, request=0x86b2048) at
modules.c:691
rcode =<value optimized out>
list = (modcallable *) 0x8657570
server =<value optimized out>
#7 0x0805fe0c in module_authorize (autz_type=0, request=0x86b2048) at
modules.c:1453
No locals.
#8 0x0804e678 in rad_authenticate (request=0x86b2048) at auth.c:565
namepair =<value optimized out>
check_item =<value optimized out>
auth_item = (VALUE_PAIR *) 0x86b23e0
module_msg =<value optimized out>
tmp =<value optimized out>
result = 12
autz_retry = 0 '\0'
autz_type = 7112497
#9 0x0806e4d5 in radius_handle_request (request=0x86b2048, fun=0x804e550
<rad_authenticate>) at event.c:3693
No locals.
#10 0x08065a5c in thread_pool_addrequest (request=0x86b2048,
fun=0x804e550<rad_authenticate>) at threads.c:841
now = 1256462126
#11 0x0806aef2 in event_socket_handler (xel=0x86ae3e0, fd=18,
ctx=0x86b1e58) at event.c:3317
fun = (RAD_REQUEST_FUNP) 0x804e550<rad_authenticate>
request = (REQUEST *) 0x86b2048
#12 0x0059ad15 in fr_event_loop (el=<value optimized out>) at event.c:400
ef = (fr_event_fd_t *) 0x86ae490
i =<value optimized out>
rcode = 1
when = Could not find the frame base for "fr_event_loop".



-------------sql_postgresql.c code --------------------

freeradius-server-2.1.7/src/modules/rlm_sql/drivers/rlm_sql_postgresql/sql_postgresql.c



static int check_fatal_error (char *errorcode)
{
int x = 0;

/*
Check the error code to see if we should reconnect or not
Error Code table taken from
http://www.postgresql.org/docs/8.1/interactive/errcodes-appendix.html
*/

while(errorcodes[x].errorcode != NULL){
line 118-->  if (strcmp(errorcodes[x].errorcode, errorcode) == 0){
radlog(L_DBG, "rlm_sql_postgresql: Postgresql Fatal Error: [%s: %s]
Occurred!!", errorcode, errorcodes[x].
meaning);
if (errorcodes[x].shouldreconnect == 1)
return SQL_DOWN;
else
return -1;
}
x++;
}

radlog(L_DBG, "rlm_sql_postgresql: Postgresql Fatal Error: [%s]
Occurred!!", errorcode);
/* We don't seem to have a matching error class/code */
return -1;
}











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


More information about the Freeradius-Users mailing list