mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-03-14 14:58:06 +08:00
check the explicit IP addresses for existence in our leases
This commit is contained in:
@@ -197,6 +197,12 @@ int get_ipv4_lease(main_server_st* s, struct proc_st* proc)
|
|||||||
memcpy(&proc->ipv4->rip, &tmp, sizeof(struct sockaddr_in));
|
memcpy(&proc->ipv4->rip, &tmp, sizeof(struct sockaddr_in));
|
||||||
proc->ipv4->rip_len = sizeof(struct sockaddr_in);
|
proc->ipv4->rip_len = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
if (ip_lease_exists(s, &tmp, sizeof(struct sockaddr_in)) != 0) {
|
||||||
|
mslog(s, proc, LOG_DEBUG, "cannot assign explicit IP %s; it is in use.",
|
||||||
|
human_addr((void*)&tmp, sizeof(struct sockaddr_in), buf, sizeof(buf)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* LIP = 1st network address */
|
/* LIP = 1st network address */
|
||||||
memcpy(&proc->ipv4->lip, &network, sizeof(struct sockaddr_in));
|
memcpy(&proc->ipv4->lip, &network, sizeof(struct sockaddr_in));
|
||||||
proc->ipv4->lip_len = sizeof(struct sockaddr_in);
|
proc->ipv4->lip_len = sizeof(struct sockaddr_in);
|
||||||
@@ -365,7 +371,13 @@ int get_ipv6_lease(main_server_st* s, struct proc_st* proc)
|
|||||||
((struct sockaddr_in6*)&tmp)->sin6_port = 0;
|
((struct sockaddr_in6*)&tmp)->sin6_port = 0;
|
||||||
memcpy(&proc->ipv6->rip, &tmp, sizeof(struct sockaddr_in6));
|
memcpy(&proc->ipv6->rip, &tmp, sizeof(struct sockaddr_in6));
|
||||||
proc->ipv6->rip_len = sizeof(struct sockaddr_in6);
|
proc->ipv6->rip_len = sizeof(struct sockaddr_in6);
|
||||||
|
|
||||||
|
if (ip_lease_exists(s, &tmp, sizeof(struct sockaddr_in6)) != 0) {
|
||||||
|
mslog(s, proc, LOG_DEBUG, "cannot assign explicit IP %s; it is in use.",
|
||||||
|
human_addr((void*)&tmp, sizeof(struct sockaddr_in6), buf, sizeof(buf)));
|
||||||
|
return ERR_NO_IP;
|
||||||
|
}
|
||||||
|
|
||||||
/* LIP = 1st network address */
|
/* LIP = 1st network address */
|
||||||
memcpy(&proc->ipv6->lip, &network, sizeof(struct sockaddr_in6));
|
memcpy(&proc->ipv6->lip, &network, sizeof(struct sockaddr_in6));
|
||||||
proc->ipv6->lip_len = sizeof(struct sockaddr_in6);
|
proc->ipv6->lip_len = sizeof(struct sockaddr_in6);
|
||||||
|
|||||||
Reference in New Issue
Block a user