OpenVPN
resolve.c File Reference
#include "syshead.h"
#include "buffer.h"
#include "crypto.h"
#include "manage.h"
#include "openvpn.h"
#include "socket.h"
#include "socket_util.h"
#include "resolve.h"
Include dependency graph for resolve.c:

Go to the source code of this file.

Macros

#define n_rnd_bytes   6

Functions

unsigned int sf2gaf (const unsigned int getaddr_flags, const unsigned int sockflags)
 Convert sockflags/getaddr_flags into getaddr_flags.
static const char * getaddrinfo_addr_family_name (int af)
 Small helper function for openvpn_getaddrinfo to print the address family when resolving fails.
static const char * hostname_randomize (const char *hostname, struct gc_arena *gc)
int openvpn_getaddrinfo (unsigned int flags, const char *hostname, const char *servname, int resolve_retry_seconds, struct signal_info *sig_info, int ai_family, struct addrinfo **res)
static int get_addr_generic (sa_family_t af, unsigned int flags, const char *hostname, void *network, unsigned int *netbits, int resolve_retry_seconds, struct signal_info *sig_info, msglvl_t msglevel)
in_addr_t getaddr (unsigned int flags, const char *hostname, int resolve_retry_seconds, bool *succeeded, struct signal_info *sig_info)
 Translate an IPv4 addr or hostname from string form to in_addr_t.
in_addr_t get_ip_addr (const char *ip_string, msglvl_t msglevel, bool *error)
bool get_ipv6_addr (const char *hostname, struct in6_addr *network, unsigned int *netbits, msglvl_t msglevel)
 Translate an IPv6 addr or hostname from string form to in6_addr.
int get_cached_dns_entry (struct cached_dns_entry *dns_cache, const char *hostname, const char *servname, int ai_family, unsigned int resolve_flags, struct addrinfo **ai)
 get_cached_dns_entry return 0 on success and -1 otherwise.
static int do_preresolve_host (struct context *c, const char *hostname, const char *servname, const int af, const unsigned int flags)
void do_preresolve (struct context *c)

Macro Definition Documentation

◆ n_rnd_bytes

#define n_rnd_bytes   6

Referenced by hostname_randomize().

Function Documentation

◆ do_preresolve()

◆ do_preresolve_host()

◆ get_addr_generic()

int get_addr_generic ( sa_family_t af,
unsigned int flags,
const char * hostname,
void * network,
unsigned int * netbits,
int resolve_retry_seconds,
struct signal_info * sig_info,
msglvl_t msglevel )
static

Definition at line 324 of file resolve.c.

References GETADDR_HOST_ORDER, M_ERRNO, M_NONFATAL, M_WARN, msg, and openvpn_getaddrinfo().

Referenced by get_ipv6_addr(), and getaddr().

◆ get_cached_dns_entry()

int get_cached_dns_entry ( struct cached_dns_entry * dns_cache,
const char * hostname,
const char * servname,
int ai_family,
unsigned int resolve_flags,
struct addrinfo ** ai )

get_cached_dns_entry return 0 on success and -1 otherwise.

(like getaddrinfo())

Definition at line 506 of file resolve.c.

References cached_dns_entry::ai, cached_dns_entry::ai_family, cached_dns_entry::flags, GETADDR_CACHE_MASK, cached_dns_entry::hostname, cached_dns_entry::next, cached_dns_entry::servname, and streqnull().

Referenced by do_preresolve_host(), resolve_bind_local(), and resolve_remote().

◆ get_ip_addr()

in_addr_t get_ip_addr ( const char * ip_string,
msglvl_t msglevel,
bool * error )

Definition at line 469 of file resolve.c.

References getaddr(), GETADDR_FATAL, GETADDR_HOST_ORDER, and M_FATAL.

Referenced by add_option(), and dhcp_option_address_parse().

◆ get_ipv6_addr()

bool get_ipv6_addr ( const char * hostname,
struct in6_addr * network,
unsigned int * netbits,
msglvl_t msglevel )

Translate an IPv6 addr or hostname from string form to in6_addr.

Definition at line 489 of file resolve.c.

References get_addr_generic(), and GETADDR_RESOLVE.

Referenced by add_option(), dhcp_option_dns6_parse(), ifconfig_pool_read(), init_route_ipv6(), ipv6_addr_safe_hexplusbits(), option_iroute_ipv6(), and remove_iroutes_from_push_route_list().

◆ getaddr()

in_addr_t getaddr ( unsigned int flags,
const char * hostname,
int resolve_retry_seconds,
bool * succeeded,
struct signal_info * sig_info )

Translate an IPv4 addr or hostname from string form to in_addr_t.

In case of resolve error, it will try again for resolve_retry_seconds seconds.

Definition at line 442 of file resolve.c.

References get_addr_generic(), M_WARN, and status.

Referenced by add_client_nat_to_option_list(), add_host_route_array(), add_option(), get_adapter_ip_netmask(), get_ip_addr(), ifconfig_pool_read(), init_route(), init_route_list(), init_tun(), ip_addr_string_to_array(), man_kill(), option_iroute(), and remove_iroutes_from_push_route_list().

◆ getaddrinfo_addr_family_name()

const char * getaddrinfo_addr_family_name ( int af)
static

Small helper function for openvpn_getaddrinfo to print the address family when resolving fails.

Definition at line 63 of file resolve.c.

Referenced by openvpn_getaddrinfo().

◆ hostname_randomize()

const char * hostname_randomize ( const char * hostname,
struct gc_arena * gc )
static

Definition at line 82 of file resolve.c.

References alloc_buf_gc(), BSTR, buf_printf(), format_hex_ex(), gc, n_rnd_bytes, and prng_bytes().

Referenced by openvpn_getaddrinfo().

◆ openvpn_getaddrinfo()

◆ sf2gaf()

unsigned int sf2gaf ( const unsigned int getaddr_flags,
const unsigned int sockflags )

Convert sockflags/getaddr_flags into getaddr_flags.

Definition at line 42 of file resolve.c.

References GETADDR_RANDOMIZE, and SF_HOST_RANDOMIZE.

Referenced by resolve_remote().