Here is patch to rlm_sql.c and rlm_sql/conf.h which adds support of postproxy_query: *** ./conf.h Thu Apr 29 00:55:16 2004 --- ./conf.h Thu Mar 30 10:42:29 2006 *************** *** 50,55 **** --- 50,56 ---- int query_on_not_found; char *sql_postauth_table; char *postauth_query; + char *postproxy_query; char *allowed_chars; /* individual driver config */ *** ./rlm_sql.c Tue Dec 13 16:11:53 2005 --- ./rlm_sql.c Thu Mar 30 10:49:58 2006 *************** *** 131,136 **** --- 131,138 ---- offsetof(SQL_CONFIG,sql_postauth_table), NULL, "radpostauth"}, {"postauth_query", PW_TYPE_STRING_PTR, offsetof(SQL_CONFIG,postauth_query), NULL, ""}, + {"postproxy_query", PW_TYPE_STRING_PTR, + offsetof(SQL_CONFIG,postproxy_query), NULL, ""}, {"safe-characters", PW_TYPE_STRING_PTR, offsetof(SQL_CONFIG,allowed_chars), NULL, "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /"}, *************** *** 1347,1352 **** --- 1349,1400 ---- return RLM_MODULE_OK; } + /* + * Execute postproxy_query after authentication + */ + static int rlm_sql_postproxy(void *instance, REQUEST *request) { + SQLSOCK *sqlsocket = NULL; + SQL_INST *inst = instance; + char querystr[MAX_QUERY_LEN]; + char sqlusername[MAX_STRING_LEN]; + + DEBUG("rlm_sql (%s): Processing sql_postproxy", inst->config->xlat_name); + + if(sql_set_user(inst, request, sqlusername, 0) <0) + return RLM_MODULE_FAIL; + + /* If postproxy_query is not defined, we stop here */ + if (inst->config->postproxy_query[0] == '\0') + return RLM_MODULE_NOOP; + + /* Expand variables in the query */ + memset(querystr, 0, MAX_QUERY_LEN); + radius_xlat(querystr, sizeof(querystr), inst->config->postproxy_query, + request, sql_escape_func); + query_log(request, inst, querystr); + DEBUG2("rlm_sql (%s) in sql_postproxy: query is %s", + inst->config->xlat_name, querystr); + + /* Initialize the sql socket */ + sqlsocket = sql_get_socket(inst); + if (sqlsocket == NULL) + return RLM_MODULE_FAIL; + + /* Process the query */ + if (rlm_sql_query(sqlsocket, inst, querystr)) { + radlog(L_ERR, "rlm_sql (%s) in sql_postproxy: Database query error - %s", + inst->config->xlat_name, + (char *)(inst->module->sql_error)(sqlsocket, inst->config)); + sql_release_socket(inst, sqlsocket); + return RLM_MODULE_FAIL; + } + (inst->module->sql_finish_query)(sqlsocket, inst->config); + + sql_release_socket(inst, sqlsocket); + return RLM_MODULE_OK; + } + + /* globally exported name */ module_t rlm_sql = { "SQL", *************** *** 1360,1368 **** rlm_sql_accounting, /* accounting */ rlm_sql_checksimul, /* checksimul */ NULL, /* pre-proxy */ ! NULL, /* post-proxy */ rlm_sql_postauth /* post-auth */ }, rlm_sql_detach, /* detach */ rlm_sql_destroy, /* destroy */ }; --- 1408,1419 ---- rlm_sql_accounting, /* accounting */ rlm_sql_checksimul, /* checksimul */ NULL, /* pre-proxy */ ! rlm_sql_postproxy, /* post-proxy */ rlm_sql_postauth /* post-auth */ }, rlm_sql_detach, /* detach */ rlm_sql_destroy, /* destroy */ }; + + +