From 4260e1a1ff148af48c6676413cf210c898e8aa0b Mon Sep 17 00:00:00 2001 From: Nick Lowe Date: Mon, 25 Jan 2016 10:43:33 +0000 Subject: [PATCH] Add Acct-Session-Id to Accounting-On/Off An Acct-Session-Id is required on Accounting-On and Accounting-Off forms of Accounting-Request. Signed-off-by: Nick Lowe --- src/ap/accounting.c | 19 +++++++++++++++++++ src/ap/hostapd.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/ap/accounting.c b/src/ap/accounting.c index 962a869..87ab5f9 100644 --- a/src/ap/accounting.c +++ b/src/ap/accounting.c @@ -448,6 +448,16 @@ static void accounting_report_state(struct hostapd_data *hapd, int on) if (!msg) return; + if (hapd->acct_session_id) { + char buf[20]; + + os_snprintf(buf, sizeof(buf), "%016lX", + (long unsigned int) hapd->acct_session_id); + if (!radius_msg_add_attr(msg, RADIUS_ATTR_ACCT_SESSION_ID, + (u8 *) buf, os_strlen(buf))) + wpa_printf(MSG_ERROR, "Could not add Acct-Session-Id"); + } + if (radius_client_send(hapd->radius, msg, RADIUS_ACCT, NULL) < 0) radius_msg_free(msg); } @@ -460,6 +470,15 @@ static void accounting_report_state(struct hostapd_data *hapd, int on) */ int accounting_init(struct hostapd_data *hapd) { + /* + * Acct-Session-Id should be globally and temporarily unique. + * A high quality random number is required therefore. + * This could be be improved by switching to a GUID. + */ + if (os_get_random((u8 *) &hapd->acct_session_id, + sizeof(hapd->acct_session_id)) < 0) + return -1; + if (radius_client_register(hapd->radius, RADIUS_ACCT, accounting_receive, hapd)) return -1; diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index 72f8252..b3d702e 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -138,6 +138,7 @@ struct hostapd_data { void *msg_ctx_parent; /* parent interface ctx for wpa_msg() calls */ struct radius_client_data *radius; + u64 acct_session_id; struct radius_das_data *radius_das; struct iapp_data *iapp; -- 2.1.4