Skip to content

Commit 533efa9

Browse files
committed
eap-radius: Add RADIUS Accounting session ID to Access-Request messages
This allows e.g. associating database entries for IP leases and accounting directly from the start. Fixes #2853.
1 parent 501bd53 commit 533efa9

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

src/libcharon/plugins/eap_radius/eap_radius.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2012-2017 Tobias Brunner
2+
* Copyright (C) 2012-2018 Tobias Brunner
33
* Copyright (C) 2009 Martin Willi
44
* HSR Hochschule fuer Technik Rapperswil
55
*
@@ -156,7 +156,7 @@ void eap_radius_build_attributes(radius_message_t *request)
156156
{
157157
ike_sa_t *ike_sa;
158158
host_t *host;
159-
char buf[40], *station_id_fmt;;
159+
char buf[40], *station_id_fmt, *session_id;
160160
uint32_t value;
161161
chunk_t chunk;
162162

@@ -202,6 +202,14 @@ void eap_radius_build_attributes(radius_message_t *request)
202202
host = ike_sa->get_other_host(ike_sa);
203203
snprintf(buf, sizeof(buf), station_id_fmt, host);
204204
request->add(request, RAT_CALLING_STATION_ID, chunk_from_str(buf));
205+
206+
session_id = eap_radius_accounting_session_id(ike_sa);
207+
if (session_id)
208+
{
209+
request->add(request, RAT_ACCT_SESSION_ID,
210+
chunk_from_str(session_id));
211+
free(session_id);
212+
}
205213
}
206214
}
207215

src/libcharon/plugins/eap_radius/eap_radius_accounting.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,8 +1070,27 @@ eap_radius_accounting_t *eap_radius_accounting_create()
10701070
return &this->public;
10711071
}
10721072

1073-
/**
1074-
* See header
1073+
/*
1074+
* Described in header
1075+
*/
1076+
char *eap_radius_accounting_session_id(ike_sa_t *ike_sa)
1077+
{
1078+
entry_t *entry;
1079+
char *sid = NULL;
1080+
1081+
if (singleton)
1082+
{
1083+
singleton->mutex->lock(singleton->mutex);
1084+
entry = get_or_create_entry(singleton, ike_sa->get_id(ike_sa),
1085+
ike_sa->get_unique_id(ike_sa));
1086+
sid = strdup(entry->sid);
1087+
singleton->mutex->unlock(singleton->mutex);
1088+
}
1089+
return sid;
1090+
}
1091+
1092+
/*
1093+
* Described in header
10751094
*/
10761095
void eap_radius_accounting_start_interim(ike_sa_t *ike_sa, uint32_t interval)
10771096
{

src/libcharon/plugins/eap_radius/eap_radius_accounting.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2017 Tobias Brunner
2+
* Copyright (C) 2017-2018 Tobias Brunner
33
* HSR Hochschule fuer Technik Rapperswil
44
*
55
* Copyright (C) 2012 Martin Willi
@@ -49,6 +49,14 @@ struct eap_radius_accounting_t {
4949
*/
5050
eap_radius_accounting_t *eap_radius_accounting_create();
5151

52+
/**
53+
* Get the Accounting session ID for the given IKE_SA.
54+
*
55+
* @param ike_sa IKE_SA for which to determine the session ID
56+
* @return allocated session ID
57+
*/
58+
char *eap_radius_accounting_session_id(ike_sa_t *ike_sa);
59+
5260
/**
5361
* Schedule Accounting interim updates for the given IKE_SA.
5462
*

0 commit comments

Comments
 (0)