radius: send IP address on session start

This commit is contained in:
Nikos Mavrogiannopoulos
2015-05-04 19:02:34 +02:00
parent 1b29436168
commit 9ed9716e0e
3 changed files with 22 additions and 0 deletions

View File

@@ -247,6 +247,8 @@ message sec_auth_session_msg
optional uint32 uptime = 3;
optional uint64 bytes_in = 4;
optional uint64 bytes_out = 5;
optional string ipv4 = 6;
optional string ipv6 = 7;
}
message sec_auth_session_reply_msg

View File

@@ -39,6 +39,7 @@
#include "str.h"
#include "setproctitle.h"
#include <sec-mod.h>
#include <ip-lease.h>
#include <route-add.h>
#include <ipc.pb-c.h>
#include <script-list.h>
@@ -173,6 +174,8 @@ int session_open(main_server_st * s, struct proc_st *proc, const uint8_t *cookie
SecAuthSessionReplyMsg *msg = NULL;
unsigned i;
PROTOBUF_ALLOCATOR(pa, proc);
char str_ipv4[MAX_IP_STR];
char str_ipv6[MAX_IP_STR];
ireq.uptime = time(0)-proc->conn_time;
ireq.has_uptime = 1;
@@ -183,6 +186,18 @@ int session_open(main_server_st * s, struct proc_st *proc, const uint8_t *cookie
ireq.sid.data = proc->sid;
ireq.sid.len = sizeof(proc->sid);
if (proc->ipv4 &&
human_addr2((struct sockaddr *)&proc->ipv4->rip, proc->ipv4->rip_len,
str_ipv4, sizeof(str_ipv4), 0) != NULL) {
ireq.ipv4 = str_ipv4;
}
if (proc->ipv6 &&
human_addr2((struct sockaddr *)&proc->ipv6->rip, proc->ipv6->rip_len,
str_ipv6, sizeof(str_ipv6), 0) != NULL) {
ireq.ipv6 = str_ipv6;
}
if (cookie) {
ireq.cookie.data = (void*)cookie;
ireq.cookie.len = cookie_size;

View File

@@ -434,6 +434,11 @@ int handle_sec_auth_session_open(int cfd, sec_mod_st *sec, const SecAuthSessionM
return send_failed_session_open_reply(cfd, sec);
}
if (req->ipv4)
strlcpy(e->auth_info.ipv4, req->ipv4, sizeof(e->auth_info.ipv4));
if (req->ipv6)
strlcpy(e->auth_info.ipv6, req->ipv6, sizeof(e->auth_info.ipv6));
if (sec->perm_config->acct.amod != NULL && sec->perm_config->acct.amod->open_session != NULL && e->session_is_open == 0) {
ret = sec->perm_config->acct.amod->open_session(e->auth_type, e->auth_ctx, &e->auth_info, req->sid.data, req->sid.len);
if (ret < 0) {