From 1759016be52c8ab1a3d70377535c85089e36fee8 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Tue, 5 Feb 2013 19:44:58 +0100 Subject: [PATCH] call connect script with explicit lease --- src/main-auth.c | 2 +- src/main-script.c | 22 ++++++++++++++-------- src/main.h | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main-auth.c b/src/main-auth.c index 8a684dd3..63451d84 100644 --- a/src/main-auth.c +++ b/src/main-auth.c @@ -297,7 +297,7 @@ int handle_commands(main_server_st *s, struct proc_list_st* proc) } if (ret == 0) { - ret = call_connect_script(s, proc); + ret = call_connect_script(s, proc, lease); if (ret < 0) { syslog(LOG_INFO, "User '%s' disconnected due to script", proc->username); } diff --git a/src/main-script.c b/src/main-script.c index 416214ba..32618fdb 100644 --- a/src/main-script.c +++ b/src/main-script.c @@ -55,6 +55,9 @@ int ret; char real[64]; char local[64]; char remote[64]; + + if (proc->lease == NULL) + exit(1); if (getnameinfo((void*)&proc->remote_addr, proc->remote_addr_len, real, sizeof(real), NULL, 0, NI_NUMERICHOST) != 0) exit(1); @@ -86,7 +89,7 @@ int ret; } } -int call_connect_script(main_server_st *s, struct proc_list_st* proc) +int call_connect_script(main_server_st *s, struct proc_list_st* proc, struct lease_st* lease) { pid_t pid; int ret, status; @@ -100,27 +103,30 @@ int ret, status; char local[64]; char remote[64]; + /* Note we don't use proc->lease and accept lease directly + * because we are called before proc population is completed */ + if (getnameinfo((void*)&proc->remote_addr, proc->remote_addr_len, real, sizeof(real), NULL, 0, NI_NUMERICHOST) != 0) exit(1); - if (proc->lease->lip4_len > 0) { - if (getnameinfo((void*)&proc->lease->lip4, proc->lease->lip4_len, local, sizeof(local), NULL, 0, NI_NUMERICHOST) != 0) + if (lease->lip4_len > 0) { + if (getnameinfo((void*)&lease->lip4, lease->lip4_len, local, sizeof(local), NULL, 0, NI_NUMERICHOST) != 0) exit(1); } else { - if (getnameinfo((void*)&proc->lease->lip6, proc->lease->lip6_len, local, sizeof(local), NULL, 0, NI_NUMERICHOST) != 0) + if (getnameinfo((void*)&lease->lip6, lease->lip6_len, local, sizeof(local), NULL, 0, NI_NUMERICHOST) != 0) exit(1); } - if (proc->lease->rip4_len > 0) { - if (getnameinfo((void*)&proc->lease->rip4, proc->lease->rip4_len, remote, sizeof(remote), NULL, 0, NI_NUMERICHOST) != 0) + if (lease->rip4_len > 0) { + if (getnameinfo((void*)&lease->rip4, lease->rip4_len, remote, sizeof(remote), NULL, 0, NI_NUMERICHOST) != 0) exit(1); } else { - if (getnameinfo((void*)&proc->lease->rip6, proc->lease->rip6_len, remote, sizeof(remote), NULL, 0, NI_NUMERICHOST) != 0) + if (getnameinfo((void*)&lease->rip6, lease->rip6_len, remote, sizeof(remote), NULL, 0, NI_NUMERICHOST) != 0) exit(1); } ret = execlp(s->config->connect_script, s->config->connect_script, - proc->username, proc->lease->name, real, local, remote, NULL); + proc->username, lease->name, real, local, remote, NULL); if (ret == -1) exit(1); diff --git a/src/main.h b/src/main.h index 9802a1f8..811bccbe 100644 --- a/src/main.h +++ b/src/main.h @@ -43,7 +43,7 @@ void clear_lists(main_server_st *s); int handle_commands(main_server_st *s, struct proc_list_st* cur); -int call_connect_script(main_server_st *s, struct proc_list_st* cur); +int call_connect_script(main_server_st *s, struct proc_list_st* cur, struct lease_st*); void call_disconnect_script(main_server_st *s, struct proc_list_st* cur); void expire_tls_sessions(main_server_st *s);