call connect script with explicit lease

This commit is contained in:
Nikos Mavrogiannopoulos
2013-02-05 19:44:58 +01:00
parent 7c3900176e
commit 1759016be5
3 changed files with 16 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);