OK,
I found a bug that stoped sqlcounters working for me.
Basically sql_xlat in rlm_sql is doing
rlm_sql_select_query(sqlsocket,ins...
...
rlm_sql_fetch_row(sqlsocket, inst)
(inst->module->sql_finish_select_query)(sqlsocket, inst->config);
...
row = sqlsocket->row;
The problem is sqlsocket->row is freed by sql_finish_select.
Below is a patch to fix this. It is against snapshot from 20021104. I
checked cvs and this does not seem to fixed.
--- rlm_sql.c.20021104 Mon Nov 11 11:52:25 2002
+++ rlm_sql.c Mon Nov 11 12:02:04 2002
@@ -136,39 +136,42 @@
return 0;
}
ret = rlm_sql_fetch_row(sqlsocket, inst);
- (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
if (ret) {
DEBUG("rlm_sql: SQL query did not succeed");
+ (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
sql_release_socket(inst,sqlsocket);
return 0;
}
row = sqlsocket->row;
if (row == NULL) {
DEBUG("rlm_sql: SQL query did not return any results");
+ (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
sql_release_socket(inst,sqlsocket);
return 0;
}
if (row[0] == NULL){
DEBUG("rlm_sql: row[0] returned NULL");
+ (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
sql_release_socket(inst,sqlsocket);
return 0;
}
ret = strlen(row[0]);
if (ret > freespace){
DEBUG("rlm_sql: sql_xlat:: Insufficient string space");
+ (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
sql_release_socket(inst,sqlsocket);
return 0;
}
strncpy(out,row[0],ret);
DEBUG("rlm_sql: - sql_xlat finished");
-
+ (inst->module->sql_finish_select_query)(sqlsocket, inst->config);
sql_release_socket(inst,sqlsocket);
return ret;
}
>Hello,
>
>I am trying to use sqlcounter and oracle to implement download
>limits/quotas.
>
>I have:
>sqlcounter testquota {
> counter-name = Test-Quota-Input-Octets
> check-name = Test-Quota
> sqlmod-inst = sql
> key = User-Name
> reset = daily
>
> query = "SELECT SUM(acctinputoctets) FROM radacct WHERE
>UserName='%{%k}'"
> }
>
>And:
>DEFAULT User-Name =~ "^s[0-9]+$", Test-Quota-Input-Octets > 1000, Auth-Type = Reject
> Reply-Message = "You have used up your quota"
>
>
>Output with -XX I get:
>sqlcounter_expand: 'SELECT SUM(acctinputoctets) FROM radacct WHERE
>UserName='%{User-Name}''
>radius_xlat: 'SELECT SUM(acctinputoctets) FROM radacct WHERE UserName='s111111''
>sqlcounter_expand: '%{sql:SELECT SUM(acctinputoctets) FROM radacct WHERE
>UserName='s111111'}'
>radius_xlat: Running registered xlat function of module sql for string 'SELECT
>SUM(acctinputoctets) FROM radacct WHERE UserName='s111111''
>rlm_sql: - sql_xlat
>radius_xlat: 'SELECT SUM(acctinputoctets) FROM radacct WHERE UserName='s111111''
>rlm_sql: Reserving sql socket id: 4
>SELECT SUM(acctinputoctets) FROM radacct WHERE UserName='s111111'
>rlm_sql: - sql_xlat finished
>rlm_sql: Released sql socket id: 4
>radius_xlat:
>'?�???�?@�~??�~??��?@��?@��?@��?@��?@��?@��?@��?@x~??x~??��?@��?@��?@��?@��?@��?@��?@��?@��?@��?@'
>
>This is then repeated a few times.
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
________________________________________________________________________
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html