mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-05-28 04:03:29 -04:00
Refactor signal handling in openvpn_getaddrinfo
Pass in sig_info struct to use register signal instead of
modifying signal_received.
No functional changes though some may be warranted.
Questions:
- Why are we overwriting SIGUSR1 in this function?
- Why the special interrupted syscall treatment for getaddrinfo?
Its not a syscall, is it?
Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20230101215109.1521549-3-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25872.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
05715485b4
commit
eff95d5004
2 changed files with 18 additions and 17 deletions
|
|
@ -67,7 +67,7 @@ sf2gaf(const unsigned int getaddr_flags,
|
|||
static int
|
||||
get_addr_generic(sa_family_t af, unsigned int flags, const char *hostname,
|
||||
void *network, unsigned int *netbits,
|
||||
int resolve_retry_seconds, volatile int *signal_received,
|
||||
int resolve_retry_seconds, struct signal_info *sig_info,
|
||||
int msglevel)
|
||||
{
|
||||
char *endp, *sep, *var_host = NULL;
|
||||
|
|
@ -130,7 +130,7 @@ get_addr_generic(sa_family_t af, unsigned int flags, const char *hostname,
|
|||
}
|
||||
|
||||
ret = openvpn_getaddrinfo(flags & ~GETADDR_HOST_ORDER, var_host, NULL,
|
||||
resolve_retry_seconds, signal_received, af, &ai);
|
||||
resolve_retry_seconds, sig_info, af, &ai);
|
||||
if ((ret == 0) && network)
|
||||
{
|
||||
struct in6_addr *ip6;
|
||||
|
|
@ -183,13 +183,13 @@ getaddr(unsigned int flags,
|
|||
const char *hostname,
|
||||
int resolve_retry_seconds,
|
||||
bool *succeeded,
|
||||
volatile int *signal_received)
|
||||
struct signal_info *sig_info)
|
||||
{
|
||||
in_addr_t addr;
|
||||
int status;
|
||||
|
||||
status = get_addr_generic(AF_INET, flags, hostname, &addr, NULL,
|
||||
resolve_retry_seconds, signal_received,
|
||||
resolve_retry_seconds, sig_info,
|
||||
M_WARN);
|
||||
if (status==0)
|
||||
{
|
||||
|
|
@ -432,13 +432,13 @@ openvpn_getaddrinfo(unsigned int flags,
|
|||
const char *hostname,
|
||||
const char *servname,
|
||||
int resolve_retry_seconds,
|
||||
volatile int *signal_received,
|
||||
struct signal_info *sig_info,
|
||||
int ai_family,
|
||||
struct addrinfo **res)
|
||||
{
|
||||
struct addrinfo hints;
|
||||
int status;
|
||||
int sigrec = 0;
|
||||
struct signal_info sigrec = {0};
|
||||
int msglevel = (flags & GETADDR_FATAL) ? M_FATAL : D_RESOLVE_ERRORS;
|
||||
struct gc_arena gc = gc_new();
|
||||
const char *print_hostname;
|
||||
|
|
@ -464,9 +464,9 @@ openvpn_getaddrinfo(unsigned int flags,
|
|||
}
|
||||
|
||||
if ((flags & (GETADDR_FATAL_ON_SIGNAL|GETADDR_WARN_ON_SIGNAL))
|
||||
&& !signal_received)
|
||||
&& !sig_info)
|
||||
{
|
||||
signal_received = &sigrec;
|
||||
sig_info = &sigrec;
|
||||
}
|
||||
|
||||
/* try numeric ipv6 addr first */
|
||||
|
|
@ -561,17 +561,18 @@ openvpn_getaddrinfo(unsigned int flags,
|
|||
flags, hints.ai_family, hints.ai_socktype);
|
||||
status = getaddrinfo(hostname, servname, &hints, res);
|
||||
|
||||
if (signal_received)
|
||||
if (sig_info)
|
||||
{
|
||||
get_signal(signal_received);
|
||||
if (*signal_received) /* were we interrupted by a signal? */
|
||||
get_signal(&sig_info->signal_received);
|
||||
if (sig_info->signal_received) /* were we interrupted by a signal? */
|
||||
{
|
||||
if (*signal_received == SIGUSR1) /* ignore SIGUSR1 */
|
||||
/* why are we overwriting SIGUSR1 ? */
|
||||
if (sig_info->signal_received == SIGUSR1) /* ignore SIGUSR1 */
|
||||
{
|
||||
msg(level,
|
||||
"RESOLVE: Ignored SIGUSR1 signal received during "
|
||||
"DNS resolution attempt");
|
||||
*signal_received = 0;
|
||||
signal_reset(sig_info);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -638,7 +639,7 @@ openvpn_getaddrinfo(unsigned int flags,
|
|||
}
|
||||
|
||||
done:
|
||||
if (signal_received && *signal_received)
|
||||
if (sig_info && sig_info->signal_received)
|
||||
{
|
||||
int level = 0;
|
||||
if (flags & GETADDR_FATAL_ON_SIGNAL)
|
||||
|
|
@ -1759,7 +1760,7 @@ resolve_remote(struct link_socket *sock,
|
|||
if (status)
|
||||
{
|
||||
status = openvpn_getaddrinfo(flags, sock->remote_host, sock->remote_port,
|
||||
retry, signal_received, sock->info.af, &ai);
|
||||
retry, sig_info, sock->info.af, &ai);
|
||||
}
|
||||
|
||||
if (status == 0)
|
||||
|
|
|
|||
|
|
@ -526,7 +526,7 @@ in_addr_t getaddr(unsigned int flags,
|
|||
const char *hostname,
|
||||
int resolve_retry_seconds,
|
||||
bool *succeeded,
|
||||
volatile int *signal_received);
|
||||
struct signal_info *sig_info);
|
||||
|
||||
/**
|
||||
* Translate an IPv6 addr or hostname from string form to in6_addr
|
||||
|
|
@ -538,7 +538,7 @@ int openvpn_getaddrinfo(unsigned int flags,
|
|||
const char *hostname,
|
||||
const char *servname,
|
||||
int resolve_retry_seconds,
|
||||
volatile int *signal_received,
|
||||
struct signal_info *sig_info,
|
||||
int ai_family,
|
||||
struct addrinfo **res);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue