diff --git a/src/acct/radius.c b/src/acct/radius.c index 72fc9bd6..4900a62f 100644 --- a/src/acct/radius.c +++ b/src/acct/radius.c @@ -120,6 +120,13 @@ static void append_acct_standard(rc_handle *rh, const common_auth_info_st *ai, V } } + if (ai->id) { + i = ai->id; + if (rc_avpair_add(rh, send, PW_NAS_PORT, &i, -1, 0) == NULL) { + return; + } + } + if (ai->our_ip[0] != 0) { struct in_addr in; struct in6_addr in6; diff --git a/src/sec-mod-auth.c b/src/sec-mod-auth.c index 2ae65256..668d4416 100644 --- a/src/sec-mod-auth.c +++ b/src/sec-mod-auth.c @@ -717,7 +717,7 @@ int handle_sec_auth_init(int cfd, sec_mod_st *sec, const SecAuthInitMsg *req, pi client_entry_st *e; unsigned need_continue = 0; - e = new_client_entry(sec, req->ip); + e = new_client_entry(sec, req->ip, pid); if (e == NULL) { seclog(sec, LOG_ERR, "cannot initialize memory"); return -1; diff --git a/src/sec-mod-db.c b/src/sec-mod-db.c index 7eddc0f4..5136e10d 100644 --- a/src/sec-mod-db.c +++ b/src/sec-mod-db.c @@ -83,7 +83,7 @@ struct htable *db = sec->client_db; return 0; } -client_entry_st *new_client_entry(sec_mod_st *sec, const char *ip) +client_entry_st *new_client_entry(sec_mod_st *sec, const char *ip, unsigned pid) { struct htable *db = sec->client_db; client_entry_st *e, *te; @@ -96,6 +96,7 @@ client_entry_st *new_client_entry(sec_mod_st *sec, const char *ip) } strlcpy(e->auth_info.remote_ip, ip, sizeof(e->auth_info.remote_ip)); + e->auth_info.id = pid; do { ret = gnutls_rnd(GNUTLS_RND_RANDOM, e->sid, sizeof(e->sid)); diff --git a/src/sec-mod.h b/src/sec-mod.h index 4d5e63cd..9f71a0f9 100644 --- a/src/sec-mod.h +++ b/src/sec-mod.h @@ -56,6 +56,7 @@ typedef struct common_auth_info_st { char our_ip[MAX_IP_STR]; char ipv4[MAX_IP_STR]; char ipv6[MAX_IP_STR]; + unsigned id; } common_auth_info_st; typedef struct client_entry_st { @@ -100,7 +101,7 @@ typedef struct client_entry_st { void *sec_mod_client_db_init(sec_mod_st *sec); void sec_mod_client_db_deinit(sec_mod_st *sec); unsigned sec_mod_client_db_elems(sec_mod_st *sec); -client_entry_st * new_client_entry(sec_mod_st *sec, const char *ip); +client_entry_st * new_client_entry(sec_mod_st *sec, const char *ip, unsigned pid); client_entry_st * find_client_entry(sec_mod_st *sec, uint8_t sid[SID_SIZE]); void del_client_entry(sec_mod_st *sec, client_entry_st * e); void expire_client_entry(sec_mod_st *sec, client_entry_st * e);