Commit 8d0a504f authored by Jason Glasgow's avatar Jason Glasgow Committed by Daniel Stenberg
Browse files

CURLOPT_DNS_SERVERS: set name servers if possible

parent 967b2f87
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -2045,6 +2045,20 @@ resolves, by including a string in the linked list that uses the format
and port number must exactly match what was already added previously.

(Added in 7.21.3)
.IP CURLOPT_DNS_SERVERS
Set the list of DNS servers to be used instead of the system default.
The format of the dns servers option is:

host[:port][,host[:port]]...

For example:

192.168.1.100,192.168.1.101,3.4.5.6

This option requires that libcurl was built with a resolver backend that
supports this operation. The c-ares backend is the only such one.

(Added in 7.24.0)
.SH SSL and SECURITY OPTIONS
.IP CURLOPT_SSLCERT
Pass a pointer to a zero terminated string as parameter. The string should be
+3 −0
Original line number Diff line number Diff line
@@ -1486,6 +1486,9 @@ typedef enum {
  /* allow GSSAPI credential delegation */
  CINIT(GSSAPI_DELEGATION, LONG, 210),

  /* Set the name servers to use for DNS resolution */
  CINIT(DNS_SERVERS, OBJECTPOINT, 211),

  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

+26 −0
Original line number Diff line number Diff line
@@ -600,4 +600,30 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
  }
  return NULL; /* no struct yet */
}

CURLcode Curl_set_dns_servers(struct SessionHandle *data,
                              char *servers)
{
  CURLcode result = CURLE_NOT_BUILT_IN;
#if (ARES_VERSION >= 0x010704)
  int ares_result = ares_set_servers_csv(data->state.resolver, servers);
  switch(ares_result) {
  case ARES_SUCCESS:
    break;
  case ARES_ENOMEM:
    result = CURLE_OUT_OF_MEMORY;
    break;
  case ARES_ENOTINITIALIZED:
  case ARES_ENODATA:
  case ARES_EBADSTR:
  default:
    result = CURLE_BAD_FUNCTION_ARGUMENT;
    break;
  }
#else /* too old c-ares version! */
  (void)data;
  (void)servers;
#endif
  return result;
}
#endif /* CURLRES_ARES */
+9 −0
Original line number Diff line number Diff line
@@ -696,4 +696,13 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,

#endif /* !HAVE_GETADDRINFO */

CURLcode Curl_set_dns_servers(struct SessionHandle *data,
                              char *servers)
{
  (void)data;
  (void)servers;
  return CURLE_NOT_BUILT_IN;

}

#endif /* CURLRES_THREADED */
+5 −0
Original line number Diff line number Diff line
@@ -195,4 +195,9 @@ Curl_cache_addr(struct SessionHandle *data, Curl_addrinfo *addr,
extern sigjmp_buf curl_jmpenv;
#endif

/*
 * Function provided by the resolver backend to set DNS servers to use.
 */
CURLcode Curl_set_dns_servers(struct SessionHandle *data, char *servers);

#endif /* HEADER_CURL_HOSTIP_H */
Loading