accounting_reply_query
Daniel Larsson
daniel.larsson at servicefactory.com
Thu Dec 7 14:13:14 CET 2006
On Thu, 2006-12-07 at 14:59 +0200, halic wrote:
> this is a simple patch to rlm_sql module.
> it allows module to get attributes from db and send them in
> Accounting-Response packet.
> "select-query" configured via default sql.conf; parameter is
> accounting_reply_query.
> it is useful to, for example, send "vendor-specific-drop" attribute to NAS
> in response to Interim-Update.
> other accounting_*_query parameters may not be defined.
>
> configuration example:
> accounting_reply_query="select id, login as UserName, 'Terminate-Session'
> as Attribute, 'Yes' as Value, '=' as op from clients where ballance <= 0
> and '%{Acct-Status-Type}' = 'Interim-Update' and login = '%{User-Name}'"
>
> creating db-view is also a good choise; query like:
> accounting_reply_query="select id, UserName, Attribute, Value, op from
> acct_reply status_type = '%{Acct-Status-Type}' and UserName =
> '%{User-Name}'"
>
> my patched pppd recieves "Terminate-Session" attribute.
> mpd can also receive "Drop-User" attr.
>
> currenty a lot of billing systems use different nas-specific scripts to
> drop client with negative ballance.
> i think this patch is pretty usefull.
>
> sorry, but it's patch to 1.1.3 version; not devel, from cvs.
> due to bad internet i didnt downloaded cvs version.
>
> here it is:
>
> diff -urN freeradius-1.1.3/src/modules/rlm_sql/conf.h
> freeradius-1.1.3-oops/src/modules/rlm_sql/conf.h
> --- freeradius-1.1.3/src/modules/rlm_sql/conf.h Sat May 20 12:44:37 2006
> +++ freeradius-1.1.3-oops/src/modules/rlm_sql/conf.h Wed Dec 6 21:56:15
> 2006
> @@ -29,6 +29,7 @@
> char *accounting_start_query_alt;
> char *accounting_stop_query;
> char *accounting_stop_query_alt;
> + char *accounting_reply_query;
> char *simul_count_query;
> char *simul_verify_query;
> char *groupmemb_query;
> diff -urN freeradius-1.1.3/src/modules/rlm_sql/rlm_sql.c
> freeradius-1.1.3-oops/src/modules/rlm_sql/rlm_sql.c
> --- freeradius-1.1.3/src/modules/rlm_sql/rlm_sql.c Sat May 20 12:44:37 2006
> +++ freeradius-1.1.3-oops/src/modules/rlm_sql/rlm_sql.c Wed Dec 6
> 22:03:35 2006
> @@ -103,6 +103,8 @@
> offsetof(SQL_CONFIG,accounting_stop_query), NULL, ""},
> {"accounting_stop_query_alt", PW_TYPE_STRING_PTR,
> offsetof(SQL_CONFIG,accounting_stop_query_alt), NULL, ""},
> + {"accounting_reply_query", PW_TYPE_STRING_PTR,
> + offsetof(SQL_CONFIG,accounting_reply_query), NULL, ""},
> {"group_membership_query", PW_TYPE_STRING_PTR,
> offsetof(SQL_CONFIG,groupmemb_query), NULL, ""},
> {"connect_failure_retry_delay", PW_TYPE_INTEGER,
> @@ -887,6 +889,7 @@
> char querystr[MAX_QUERY_LEN];
> char logstr[MAX_QUERY_LEN];
> char sqlusername[MAX_STRING_LEN];
> + VALUE_PAIR *sql_reply = NULL;
>
> #ifdef CISCO_ACCOUNTING_HACK
> int acctsessiontime = 0;
> @@ -1103,6 +1106,19 @@
> break;
>
> }
> +
> + radius_xlat(querystr, sizeof(querystr),
> inst->config->accounting_reply_query, request, sql_escape_func);
> + query_log(request, inst, querystr);
> +
> + if (*querystr) {
> + if(sqlsocket == NULL && (sqlsocket = sql_get_socket(inst)) == NULL)
> + return(RLM_MODULE_FAIL);
> +
> + sql_getvpdata(inst, sqlsocket, &sql_reply, "SELECT 4 as id, 'dayset'
> as UserName, 'Terminate-Session' as Attribute, 'Yes' as Value, '=' as op",
> PW_VP_USERDATA);
I believe you left testing code in the patch. This should have said
"sql_getvpdata(inst, sqlsocket, &sql_reply, querystr, PW_VP_USERDATA);"
I assume.
> +
> + pairxlatmove(request, &request->reply->vps, &sql_reply);
> + pairfree(&sql_reply);
> + }
>
> sql_release_socket(inst, sqlsocket);
>
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/devel.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.freeradius.org/pipermail/freeradius-devel/attachments/20061207/e8be6848/attachment.pgp>
More information about the Freeradius-Devel
mailing list