#ifdef HAVE_CONFIG_H
#include "config.h"
-#elif defined(_MSC_VER)
-#include "config-msvc.h"
#endif
#include "syshead.h"
if (sig_info->signal_received) /* were we interrupted by a signal? */
{
/* why are we overwriting SIGUSR1 ? */
- if (sig_info->signal_received == SIGUSR1) /* ignore SIGUSR1 */
+ if (signal_reset(sig_info, SIGUSR1) == SIGUSR1) /* ignore SIGUSR1 */
{
msg(level,
"RESOLVE: Ignored SIGUSR1 signal received during "
"DNS resolution attempt");
- signal_reset(sig_info);
}
else
{
static bool
socket_set_flags(socket_descriptor_t sd, unsigned int sockflags)
{
- if (sockflags & SF_TCP_NODELAY)
+ /* SF_TCP_NODELAY doesn't make sense for dco-win */
+ if ((sockflags & SF_TCP_NODELAY) && (!(sockflags & SF_DCO_WIN)))
{
return socket_set_tcp_nodelay(sd, 1);
}
{
if (ls && socket_defined(ls->sd))
{
- return socket_set_flags(ls->sd, ls->sockflags = sockflags);
+ ls->sockflags |= sockflags;
+ return socket_set_flags(ls->sd, ls->sockflags);
}
else
{
{
if (!management)
{
- msg(M_FATAL, "Required management interface not available.")
+ msg(M_FATAL, "Required management interface not available.");
}
/* pass socket FD to management interface to pass on to VPNService API
openvpn_close_socket(*sd);
*sd = SOCKET_UNDEFINED;
register_signal(sig_info, SIGUSR1, "connection-failed");
- sig_info->source = SIG_SOURCE_CONNECTION_FAILED;
}
else
{
if (sig_info->signal_received)
{
sig_save = *sig_info;
- signal_reset(sig_info);
+ sig_save.signal_received = signal_reset(sig_info, 0);
}
/* initialize buffers */
print_in_addr_t(in_addr_t addr, unsigned int flags, struct gc_arena *gc)
{
struct in_addr ia;
- struct buffer out = alloc_buf_gc(64, gc);
+ char *out = gc_malloc(INET_ADDRSTRLEN, true, gc);
if (addr || !(flags & IA_EMPTY_IF_UNDEF))
{
CLEAR(ia);
ia.s_addr = (flags & IA_NET_ORDER) ? addr : htonl(addr);
- buf_printf(&out, "%s", inet_ntoa(ia));
+ inet_ntop(AF_INET, &ia, out, INET_ADDRSTRLEN);
}
- return BSTR(&out);
+ return out;
}
/*
const char *
print_in6_addr(struct in6_addr a6, unsigned int flags, struct gc_arena *gc)
{
- struct buffer out = alloc_buf_gc(64, gc);
- char tmp_out_buf[64]; /* inet_ntop wants pointer to buffer */
+ char *out = gc_malloc(INET6_ADDRSTRLEN, true, gc);
if (memcmp(&a6, &in6addr_any, sizeof(a6)) != 0
|| !(flags & IA_EMPTY_IF_UNDEF))
{
- inet_ntop(AF_INET6, &a6, tmp_out_buf, sizeof(tmp_out_buf)-1);
- buf_printf(&out, "%s", tmp_out_buf );
+ inet_ntop(AF_INET6, &a6, out, INET6_ADDRSTRLEN);
}
- return BSTR(&out);
+ return out;
}
/*
{
char name_buf[256];
- char buf[128];
+ char buf[INET6_ADDRSTRLEN];
switch (addr->addr.sa.sa_family)
{
case AF_INET:
openvpn_snprintf(name_buf, sizeof(name_buf), "%s", name_prefix);
}
- setenv_str(es, name_buf, inet_ntoa(addr->addr.in4.sin_addr));
+ inet_ntop(AF_INET, &addr->addr.in4.sin_addr, buf, sizeof(buf));
+ setenv_str(es, name_buf, buf);
if ((flags & SA_IP_PORT) && addr->addr.in4.sin_port)
{
memcpy(&ia.s_addr, &addr->addr.in6.sin6_addr.s6_addr[12],
sizeof(ia.s_addr));
openvpn_snprintf(name_buf, sizeof(name_buf), "%s_ip", name_prefix);
- openvpn_snprintf(buf, sizeof(buf), "%s", inet_ntoa(ia) );
+ inet_ntop(AF_INET, &ia, buf, sizeof(buf));
}
else
{
openvpn_snprintf(name_buf, sizeof(name_buf), "%s_ip6", name_prefix);
- getnameinfo(&addr->addr.sa, sizeof(struct sockaddr_in6),
- buf, sizeof(buf), NULL, 0, NI_NUMERICHOST);
+ inet_ntop(AF_INET6, &addr->addr.in6.sin6_addr, buf, sizeof(buf));
}
setenv_str(es, name_buf, buf);
{
struct iovec iov;
uint8_t pktinfo_buf[PKTINFO_BUF_SIZE];
- struct msghdr mesg;
+ struct msghdr mesg = {0};
socklen_t fromlen = sizeof(from->dest.addr);
ASSERT(sock->sd >= 0); /* can't happen */