mirror of https://github.com/getdnsapi/getdns.git
getdns_context_create2 and family that set an ...
... alternative resolvconf file
This commit is contained in:
parent
a7a6240202
commit
ed6c7a6b58
|
@ -1090,7 +1090,7 @@ static int get_dns_suffix_windows(getdns_list *suffix, char* domain)
|
||||||
|
|
||||||
|
|
||||||
static getdns_return_t
|
static getdns_return_t
|
||||||
set_os_defaults_windows(struct getdns_context *context)
|
set_os_defaults(getdns_context *context, const char *resolvconf_file)
|
||||||
{
|
{
|
||||||
char domain[1024] = "";
|
char domain[1024] = "";
|
||||||
size_t upstreams_limit = 10;
|
size_t upstreams_limit = 10;
|
||||||
|
@ -1107,7 +1107,7 @@ set_os_defaults_windows(struct getdns_context *context)
|
||||||
GETDNS_MALLOC(context->my_mf, struct filechg);
|
GETDNS_MALLOC(context->my_mf, struct filechg);
|
||||||
if (context->fchg_resolvconf == NULL)
|
if (context->fchg_resolvconf == NULL)
|
||||||
return GETDNS_RETURN_MEMORY_ERROR;
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
context->fchg_resolvconf->fn = "InvalidOnWindows";
|
context->fchg_resolvconf->fn = resolvconf_file;
|
||||||
context->fchg_resolvconf->prevstat = NULL;
|
context->fchg_resolvconf->prevstat = NULL;
|
||||||
context->fchg_resolvconf->changes = GETDNS_FCHG_NOCHANGES;
|
context->fchg_resolvconf->changes = GETDNS_FCHG_NOCHANGES;
|
||||||
context->fchg_resolvconf->errors = GETDNS_FCHG_NOERROR;
|
context->fchg_resolvconf->errors = GETDNS_FCHG_NOERROR;
|
||||||
|
@ -1186,7 +1186,7 @@ set_os_defaults_windows(struct getdns_context *context)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static getdns_return_t
|
static getdns_return_t
|
||||||
set_os_defaults(struct getdns_context *context)
|
set_os_defaults(getdns_context *context, const char *resolvconf_file)
|
||||||
{
|
{
|
||||||
FILE *in;
|
FILE *in;
|
||||||
char line[1024], domain[1024];
|
char line[1024], domain[1024];
|
||||||
|
@ -1203,7 +1203,7 @@ set_os_defaults(struct getdns_context *context)
|
||||||
GETDNS_MALLOC(context->my_mf, struct filechg);
|
GETDNS_MALLOC(context->my_mf, struct filechg);
|
||||||
if(context->fchg_resolvconf == NULL)
|
if(context->fchg_resolvconf == NULL)
|
||||||
return GETDNS_RETURN_MEMORY_ERROR;
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
context->fchg_resolvconf->fn = GETDNS_FN_RESOLVCONF;
|
context->fchg_resolvconf->fn = resolvconf_file;
|
||||||
context->fchg_resolvconf->prevstat = NULL;
|
context->fchg_resolvconf->prevstat = NULL;
|
||||||
context->fchg_resolvconf->changes = GETDNS_FCHG_NOCHANGES;
|
context->fchg_resolvconf->changes = GETDNS_FCHG_NOCHANGES;
|
||||||
context->fchg_resolvconf->errors = GETDNS_FCHG_NOERROR;
|
context->fchg_resolvconf->errors = GETDNS_FCHG_NOERROR;
|
||||||
|
@ -1395,9 +1395,9 @@ static const char *_getdns_default_trust_anchors_verify_email =
|
||||||
* Call this to initialize the context that is used in other getdns calls.
|
* Call this to initialize the context that is used in other getdns calls.
|
||||||
*/
|
*/
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_context_create_with_extended_memory_functions(
|
getdns_context_create_with_extended_memory_functions2(
|
||||||
struct getdns_context ** context,
|
getdns_context **context,
|
||||||
int set_from_os,
|
const char *resolvconf_file,
|
||||||
void *userarg,
|
void *userarg,
|
||||||
void *(*malloc)(void *userarg, size_t),
|
void *(*malloc)(void *userarg, size_t),
|
||||||
void *(*realloc)(void *userarg, void *, size_t),
|
void *(*realloc)(void *userarg, void *, size_t),
|
||||||
|
@ -1571,13 +1571,8 @@ getdns_context_create_with_extended_memory_functions(
|
||||||
result->fchg_hosts = NULL;
|
result->fchg_hosts = NULL;
|
||||||
|
|
||||||
// resolv.conf does not exist on Windows, handle differently
|
// resolv.conf does not exist on Windows, handle differently
|
||||||
#ifndef USE_WINSOCK
|
if (resolvconf_file && (r = set_os_defaults(result, resolvconf_file)))
|
||||||
if ((set_from_os & 1) && (r = set_os_defaults(result)))
|
|
||||||
goto error;
|
goto error;
|
||||||
#else
|
|
||||||
if ((set_from_os & 1) && (r = set_os_defaults_windows(result)))
|
|
||||||
goto error;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
result->dnssec_allowed_skew = 0;
|
result->dnssec_allowed_skew = 0;
|
||||||
result->edns_maximum_udp_payload_size = -1;
|
result->edns_maximum_udp_payload_size = -1;
|
||||||
|
@ -1638,6 +1633,21 @@ error:
|
||||||
return r;
|
return r;
|
||||||
} /* getdns_context_create_with_extended_memory_functions */
|
} /* getdns_context_create_with_extended_memory_functions */
|
||||||
|
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create_with_extended_memory_functions(
|
||||||
|
getdns_context **context,
|
||||||
|
int set_from_os,
|
||||||
|
void *userarg,
|
||||||
|
void *(*malloc)(void *userarg, size_t),
|
||||||
|
void *(*realloc)(void *userarg, void *, size_t),
|
||||||
|
void (*free)(void *userarg, void *)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return getdns_context_create_with_extended_memory_functions2(context,
|
||||||
|
((set_from_os & 1) ? GETDNS_FN_RESOLVCONF : NULL), userarg,
|
||||||
|
malloc, realloc, free);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* getdns_context_create
|
* getdns_context_create
|
||||||
*
|
*
|
||||||
|
@ -1672,6 +1682,29 @@ getdns_context_create(struct getdns_context ** context, int set_from_os)
|
||||||
set_from_os, malloc, realloc, free);
|
set_from_os, malloc, realloc, free);
|
||||||
} /* getdns_context_create */
|
} /* getdns_context_create */
|
||||||
|
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create_with_memory_functions2(getdns_context **context,
|
||||||
|
const char *resolvconf_file,
|
||||||
|
void *(*malloc)(size_t),
|
||||||
|
void *(*realloc)(void *, size_t),
|
||||||
|
void (*free)(void *)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mf_union mf;
|
||||||
|
mf.pln.malloc = malloc;
|
||||||
|
mf.pln.realloc = realloc;
|
||||||
|
mf.pln.free = free;
|
||||||
|
return getdns_context_create_with_extended_memory_functions2(
|
||||||
|
context, resolvconf_file, MF_PLAIN,
|
||||||
|
mf.ext.malloc, mf.ext.realloc, mf.ext.free);
|
||||||
|
}
|
||||||
|
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create2(getdns_context **context, const char *resolvconf_file)
|
||||||
|
{
|
||||||
|
return getdns_context_create_with_memory_functions2(context,
|
||||||
|
resolvconf_file, malloc, realloc, free);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* getdns_context_destroy
|
* getdns_context_destroy
|
||||||
|
|
|
@ -69,7 +69,7 @@ typedef void (*getdns_update_callback2) (struct getdns_context *,
|
||||||
|
|
||||||
/* internal use only for detecting changes to system files */
|
/* internal use only for detecting changes to system files */
|
||||||
struct filechg {
|
struct filechg {
|
||||||
char *fn;
|
const char *fn;
|
||||||
int changes;
|
int changes;
|
||||||
int errors;
|
int errors;
|
||||||
struct stat *prevstat;
|
struct stat *prevstat;
|
||||||
|
|
|
@ -377,6 +377,67 @@ getdns_context_run(getdns_context *context);
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a new getdns context with default settings.
|
||||||
|
* If used multi-threaded, user must define appropriate OpenSSL callback locking functions
|
||||||
|
* (e.g. CRYPTO_THREADID_set_call) depending on the library version used.
|
||||||
|
* @param context context that can be used immediately with other API calls
|
||||||
|
* @param resolvconf is the location of the resolv.conf file from which to
|
||||||
|
* read the OS settings. When NULL, the context will not be
|
||||||
|
* initialized with the settings herein.
|
||||||
|
* @return GETDNS_RETURN_GOOD on success
|
||||||
|
*/
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create2(getdns_context ** context, const char *resolvconf);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a new getdns context with default settings using custom memory functions.
|
||||||
|
* If used multi-threaded, user must define appropriate OpenSSL callback locking functions
|
||||||
|
* (e.g. CRYPTO_THREADID_set_call) depending on the library version used.
|
||||||
|
* @param context context that can be used immediately with other API calls
|
||||||
|
* @param resolvconf is the location of the resolv.conf file from which to
|
||||||
|
* read the OS settings. When NULL, the context will not be
|
||||||
|
* initialized with the settings herein.
|
||||||
|
* @param malloc custom malloc function
|
||||||
|
* @param realloc custom realloc function
|
||||||
|
* @param free custom free function
|
||||||
|
* @return GETDNS_RETURN_GOOD on success
|
||||||
|
*/
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create_with_memory_functions2(
|
||||||
|
getdns_context ** context,
|
||||||
|
const char *resolvconf,
|
||||||
|
void *(*malloc) (size_t),
|
||||||
|
void *(*realloc) (void *, size_t),
|
||||||
|
void (*free) (void *)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a new getdns context with default settings using extended custom memory functions.
|
||||||
|
* If used multi-threaded, user must define appropriate OpenSSL callback locking functions
|
||||||
|
* (e.g. CRYPTO_THREADID_set_call) depending on the library version used.
|
||||||
|
* @param context context that can be used immediately with other API calls
|
||||||
|
* @param resolvconf is the location of the resolv.conf file from which to
|
||||||
|
* read the OS settings. When NULL, the context will not be
|
||||||
|
* initialized with the settings herein.
|
||||||
|
* @param userarg parameter passed to the custom malloc, realloc and free functions
|
||||||
|
* @param malloc custom malloc function
|
||||||
|
* @param realloc custom realloc function
|
||||||
|
* @param free custom free function
|
||||||
|
* @return GETDNS_RETURN_GOOD on success
|
||||||
|
*/
|
||||||
|
getdns_return_t
|
||||||
|
getdns_context_create_with_extended_memory_functions2(
|
||||||
|
getdns_context **context,
|
||||||
|
const char *resolvconf,
|
||||||
|
void *userarg,
|
||||||
|
void *(*malloc) (void *userarg, size_t),
|
||||||
|
void *(*realloc) (void *userarg, void *, size_t),
|
||||||
|
void (*free) (void *userarg, void *)
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a callback function for context changes.
|
* Register a callback function for context changes.
|
||||||
* @see getdns_context_set_context_update_callback
|
* @see getdns_context_set_context_update_callback
|
||||||
|
|
|
@ -3,8 +3,11 @@ getdns_address_sync
|
||||||
getdns_cancel_callback
|
getdns_cancel_callback
|
||||||
getdns_context_config
|
getdns_context_config
|
||||||
getdns_context_create
|
getdns_context_create
|
||||||
|
getdns_context_create2
|
||||||
getdns_context_create_with_extended_memory_functions
|
getdns_context_create_with_extended_memory_functions
|
||||||
|
getdns_context_create_with_extended_memory_functions2
|
||||||
getdns_context_create_with_memory_functions
|
getdns_context_create_with_memory_functions
|
||||||
|
getdns_context_create_with_memory_functions2
|
||||||
getdns_context_destroy
|
getdns_context_destroy
|
||||||
getdns_context_detach_eventloop
|
getdns_context_detach_eventloop
|
||||||
getdns_context_get_api_information
|
getdns_context_get_api_information
|
||||||
|
|
Loading…
Reference in New Issue