Make tor_addr_lookup_host_impl mockable.

This commit is contained in:
Nick Mathewson 2019-10-03 07:50:18 -04:00
parent ac8f6d51f4
commit 9c24ceeb3f
2 changed files with 22 additions and 7 deletions

View File

@ -8,6 +8,7 @@
* \brief Use the libc DNS resolver to convert hostnames into addresses. * \brief Use the libc DNS resolver to convert hostnames into addresses.
**/ **/
#define RESOLVE_PRIVATE
#include "lib/net/resolve.h" #include "lib/net/resolve.h"
#include "lib/net/address.h" #include "lib/net/address.h"
@ -70,10 +71,10 @@ tor_lookup_hostname,(const char *name, uint32_t *addr))
* *
* See tor_addr_lookup() for details. * See tor_addr_lookup() for details.
*/ */
static int MOCK_IMPL(STATIC int,
tor_addr_lookup_host_impl(const char *name, tor_addr_lookup_host_impl,(const char *name,
uint16_t family, uint16_t family,
tor_addr_t *addr) tor_addr_t *addr))
{ {
int err; int err;
struct addrinfo *res=NULL, *res_p; struct addrinfo *res=NULL, *res_p;
@ -125,10 +126,10 @@ tor_addr_lookup_host_impl(const char *name,
* *
* See tor_addr_lookup() for details. * See tor_addr_lookup() for details.
*/ */
static int MOCK_IMPL(STATIC int,
tor_addr_lookup_host_impl(const char *name, tor_addr_lookup_host_impl,(const char *name,
uint16_t family, uint16_t family,
tor_addr_t *addr) tor_addr_t *addr))
{ {
(void) family; (void) family;
struct hostent *ent; struct hostent *ent;
@ -172,7 +173,6 @@ tor_addr_lookup_host_impl(const char *name,
return (err == TRY_AGAIN) ? 1 : -1; return (err == TRY_AGAIN) ? 1 : -1;
#endif #endif
} }
#endif /* defined(HAVE_GETADDRINFO) */ #endif /* defined(HAVE_GETADDRINFO) */
/** Similar behavior to Unix gethostbyname: resolve <b>name</b>, and set /** Similar behavior to Unix gethostbyname: resolve <b>name</b>, and set

View File

@ -24,12 +24,18 @@
struct tor_addr_t; struct tor_addr_t;
/*
* Primary lookup functions.
*/
MOCK_DECL(int, tor_lookup_hostname,(const char *name, uint32_t *addr)); MOCK_DECL(int, tor_lookup_hostname,(const char *name, uint32_t *addr));
MOCK_DECL(int, tor_addr_lookup,(const char *name, uint16_t family, MOCK_DECL(int, tor_addr_lookup,(const char *name, uint16_t family,
struct tor_addr_t *addr_out)); struct tor_addr_t *addr_out));
int tor_addr_port_lookup(const char *s, struct tor_addr_t *addr_out, int tor_addr_port_lookup(const char *s, struct tor_addr_t *addr_out,
uint16_t *port_out); uint16_t *port_out);
/*
* Sandbox helpers
*/
struct addrinfo; struct addrinfo;
#ifdef USE_SANDBOX_GETADDRINFO #ifdef USE_SANDBOX_GETADDRINFO
/** Pre-calls getaddrinfo in order to pre-record result. */ /** Pre-calls getaddrinfo in order to pre-record result. */
@ -55,4 +61,13 @@ void tor_free_getaddrinfo_cache(void);
void sandbox_disable_getaddrinfo_cache(void); void sandbox_disable_getaddrinfo_cache(void);
void tor_make_getaddrinfo_cache_active(void); void tor_make_getaddrinfo_cache_active(void);
/*
* Internal resolver wrapper; exposed for mocking.
*/
#ifdef RESOLVE_PRIVATE
MOCK_DECL(STATIC int, tor_addr_lookup_host_impl, (const char *name,
uint16_t family,
struct tor_addr_t *addr));
#endif
#endif /* !defined(TOR_RESOLVE_H) */ #endif /* !defined(TOR_RESOLVE_H) */