<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
<div class="moz-text-plain" wrap="true" graphical-quote="true"
style="font-family: -moz-fixed; font-size: 13px;" lang="x-unicode">
<pre wrap="">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
<a class="moz-txt-link-freetext"
href="http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/">http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/</a>
Postgresql : 8.1
<a class="moz-txt-link-rfc2396E"
href="http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/freeradius2-2.1.7-2.el5.i386.rpm"><http://people.redhat.com/jdennis/freeradius-rhel-centos/i386/freeradius2-2.1.7-2.el5.i386.rpm></a>
------- 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
<a class="moz-txt-link-abbreviated"
href="mailto:radius@100.100.100.131:5432/radius">radius@100.100.100.131:5432/radius</a>
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\000ǿ\006�ǿX�ǿ�\017�\000\b\222ǿ|\220ǿh\221ǿ5b�\000|\220ǿA�\.
sqlusername = "U0123456", '\0' <repeats 38 times>, "
�ǿ(xe\b��\210\000\214+\000\000\000\000\000u<�ǿX�ǿ_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@rd\b\000\000\000\000\210�ǿ&\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
<a class="moz-txt-link-freetext"
href="http://www.postgresql.org/docs/8.1/interactive/errcodes-appendix.html">http://www.postgresql.org/docs/8.1/interactive/errcodes-appendix.html</a>
*/
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;
}
</pre>
</div>
</body>
</html>