mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-11 01:06:59 +08:00
radius: send IP address on session start
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user