mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
resolv: Automatically reload a changed /etc/resolv.conf file [BZ #984]
This commit enhances the stub resolver to reload the configuration in the per-thread _res object if the /etc/resolv.conf file has changed. The resolver checks whether the application has modified _res and will not overwrite the _res object in that case. The struct resolv_context mechanism is used to check the configuration file only once per name lookup.
This commit is contained in:
@ -35,11 +35,6 @@ struct resolv_sortlist_entry
|
||||
object. */
|
||||
struct resolv_conf
|
||||
{
|
||||
/* Used to propagate the effect of res_init across threads. This
|
||||
member is mutable and prevents sharing of the same struct
|
||||
resolv_conf object among multiple struct __res_state objects. */
|
||||
unsigned long long int initstamp;
|
||||
|
||||
/* Reference counter. The object is deallocated once it reaches
|
||||
zero. For internal use within resolv_conf only. */
|
||||
size_t __refcount;
|
||||
@ -69,6 +64,18 @@ struct resolv_conf
|
||||
|
||||
struct __res_state;
|
||||
|
||||
/* Read /etc/resolv.conf and return a configuration object, or NULL if
|
||||
/etc/resolv.conf cannot be read due to memory allocation errors.
|
||||
If PREINIT is not NULL, some configuration values are taken from the
|
||||
struct __res_state object. */
|
||||
struct resolv_conf *__resolv_conf_load (struct __res_state *preinit)
|
||||
attribute_hidden __attribute__ ((warn_unused_result));
|
||||
|
||||
/* Return a configuration object for the current /etc/resolv.conf
|
||||
settings, or NULL on failure. The object is cached. */
|
||||
struct resolv_conf *__resolv_conf_get_current (void)
|
||||
attribute_hidden __attribute__ ((warn_unused_result));
|
||||
|
||||
/* Return the extended resolver state for *RESP, or NULL if it cannot
|
||||
be determined. A call to this function must be paired with a call
|
||||
to __resolv_conf_put. */
|
||||
|
Reference in New Issue
Block a user