Add Event-Timestamp to all Accounting-Request packets

Event-Timestamp should be sent for all Accounting-Request packets and
only after the system clock has a sane value, not where there's a value
close to the Unix time epoch.

Signed-off-by: Nick Lowe <nick.lowe@lugatech.com>
This commit is contained in:
Nick Lowe 2016-01-24 11:38:40 +00:00 committed by Jouni Malinen
parent d179089b6d
commit 9b6177a891

View file

@ -41,6 +41,7 @@ static struct radius_msg * accounting_msg(struct hostapd_data *hapd,
size_t len; size_t len;
int i; int i;
struct wpabuf *b; struct wpabuf *b;
struct os_time now;
msg = radius_msg_new(RADIUS_CODE_ACCOUNTING_REQUEST, msg = radius_msg_new(RADIUS_CODE_ACCOUNTING_REQUEST,
radius_client_get_id(hapd->radius)); radius_client_get_id(hapd->radius));
@ -159,6 +160,14 @@ static struct radius_msg * accounting_msg(struct hostapd_data *hapd,
} }
} }
os_get_time(&now);
if (now.sec > 1000000000 &&
!radius_msg_add_attr_int32(msg, RADIUS_ATTR_EVENT_TIMESTAMP,
now.sec)) {
wpa_printf(MSG_INFO, "Could not add Event-Timestamp");
goto fail;
}
return msg; return msg;
fail: fail:
@ -261,7 +270,6 @@ static void accounting_sta_report(struct hostapd_data *hapd,
int cause = sta->acct_terminate_cause; int cause = sta->acct_terminate_cause;
struct hostap_sta_driver_data data; struct hostap_sta_driver_data data;
struct os_reltime now_r, diff; struct os_reltime now_r, diff;
struct os_time now;
u32 gigawords; u32 gigawords;
if (!hapd->conf->radius->acct_server) if (!hapd->conf->radius->acct_server)
@ -276,7 +284,6 @@ static void accounting_sta_report(struct hostapd_data *hapd,
} }
os_get_reltime(&now_r); os_get_reltime(&now_r);
os_get_time(&now);
os_reltime_sub(&now_r, &sta->acct_session_start, &diff); os_reltime_sub(&now_r, &sta->acct_session_start, &diff);
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_ACCT_SESSION_TIME, if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_ACCT_SESSION_TIME,
diff.sec)) { diff.sec)) {
@ -333,12 +340,6 @@ static void accounting_sta_report(struct hostapd_data *hapd,
} }
} }
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_EVENT_TIMESTAMP,
now.sec)) {
wpa_printf(MSG_INFO, "Could not add Event-Timestamp");
goto fail;
}
if (eloop_terminated()) if (eloop_terminated())
cause = RADIUS_ACCT_TERMINATE_CAUSE_ADMIN_REBOOT; cause = RADIUS_ACCT_TERMINATE_CAUSE_ADMIN_REBOOT;