Index: radiusd/src/include/radius.h =================================================================== RCS file: /source/radiusd/src/include/radius.h,v retrieving revision 1.84 diff -u -r1.84 radius.h --- radiusd/src/include/radius.h 15 Aug 2006 18:49:25 -0000 1.84 +++ radiusd/src/include/radius.h 21 May 2007 19:03:47 -0000 @@ -278,6 +278,7 @@ #define PW_STATUS_ALIVE 3 #define PW_STATUS_ACCOUNTING_ON 7 #define PW_STATUS_ACCOUNTING_OFF 8 +#define PW_STATUS_FAILED 15 /* * Vendor Private Enterprise Codes Index: radiusd/src/modules/rlm_sql/conf.h =================================================================== RCS file: /source/radiusd/src/modules/rlm_sql/conf.h,v retrieving revision 1.25 diff -u -r1.25 conf.h --- radiusd/src/modules/rlm_sql/conf.h 14 Nov 2006 21:22:29 -0000 1.25 +++ radiusd/src/modules/rlm_sql/conf.h 21 May 2007 19:03:47 -0000 @@ -32,6 +32,7 @@ char *accounting_start_query_alt; char *accounting_stop_query; char *accounting_stop_query_alt; + char *accounting_failed_query; char *simul_count_query; char *simul_verify_query; char *groupmemb_query; Index: radiusd/src/modules/rlm_sql/rlm_sql.c =================================================================== RCS file: /source/radiusd/src/modules/rlm_sql/rlm_sql.c,v retrieving revision 1.169 diff -u -r1.169 rlm_sql.c --- radiusd/src/modules/rlm_sql/rlm_sql.c 15 May 2007 10:10:35 -0000 1.169 +++ radiusd/src/modules/rlm_sql/rlm_sql.c 21 May 2007 19:03:47 -0000 @@ -89,6 +89,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_failed_query", PW_TYPE_STRING_PTR, + offsetof(SQL_CONFIG,accounting_failed_query), NULL, ""}, {"group_membership_query", PW_TYPE_STRING_PTR, offsetof(SQL_CONFIG,groupmemb_query), NULL, ""}, {"connect_failure_retry_delay", PW_TYPE_INTEGER, @@ -1269,6 +1271,33 @@ break; /* + * Got accounting failed packet + */ + case PW_STATUS_FAILED: + + /* + * Set, escape, and check the user attr here + */ + sql_set_user(inst, request, sqlusername, NULL); + + radius_xlat(querystr, sizeof(querystr), inst->config->accounting_failed_query, request, sql_escape_func); + query_log(request, inst, querystr); + + sqlsocket = sql_get_socket(inst); + if (sqlsocket == NULL) + return(RLM_MODULE_FAIL); + if (*querystr) { /* non-empty query */ + if (rlm_sql_query(sqlsocket, inst, querystr)) { + radlog(L_ERR, "rlm_sql (%s): Couldn't insert SQL accounting FAILED record - %s", + inst->config->xlat_name, + (char *)(inst->module->sql_error)(sqlsocket, inst->config)); + ret = RLM_MODULE_FAIL; + } + (inst->module->sql_finish_query)(sqlsocket, inst->config); + } + break; + + /* * Anything else is ignored. */ default: Index: radiusd/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c =================================================================== RCS file: /source/radiusd/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c,v retrieving revision 1.25 diff -u -r1.25 sql_mysql.c --- radiusd/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c 5 Apr 2007 10:52:38 -0000 1.25 +++ radiusd/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c 21 May 2007 19:03:47 -0000 @@ -84,8 +84,8 @@ config->sql_db, atoi(config->sql_port), NULL, - CLIENT_FOUND_ROWS))) { + CLIENT_FOUND_ROWS|CLIENT_MULTI_RESULTS))) { radlog(L_ERR, "rlm_sql_mysql: Couldn't connect socket to MySQL server %s@%s:%s", config->sql_login, config->sql_server, config->sql_db); radlog(L_ERR, "rlm_sql_mysql: Mysql error '%s'", mysql_error(&mysql_sock->conn)); mysql_sock->sock = NULL; return -1;