diff options
author | Florian Weimer <fweimer@redhat.com> | 2016-05-02 15:25:20 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2016-05-02 15:25:20 +0200 |
commit | 5018f16c6205404ba3aa7298dc8a3d45fbd46bfc (patch) | |
tree | 5d78047ea2ee964b7874be218fa9c9e91b18f420 /hesiod/nss_hesiod/hesiod-grp.c | |
parent | 46cb402c6d621ef89b23fa61247faf623e8fb306 (diff) | |
download | glibc-5018f16c6205404ba3aa7298dc8a3d45fbd46bfc.zip glibc-5018f16c6205404ba3aa7298dc8a3d45fbd46bfc.tar.gz glibc-5018f16c6205404ba3aa7298dc8a3d45fbd46bfc.tar.bz2 |
hesiod: Always use thread-local resolver state [BZ #19573]
The Hesiod implementation imported into glibc was enhanced
to support caller-supplied resolver states. But its only
consumer is nss_hesiod, and it supplies the thread-local
resolver state. Therefore, this commit changes the Hesiod
implementation to use the thread-local resolver state (_res)
directly. This fixes bug 19573 because the Hesiod
implementation no longer has to initialize and free any
resolver state.
To avoid any risk of interposition of ABI-incompatible Hesiod
function implementations, this commit marks the Hesiod functions
as hidden. (They were already hidden using a linker version
script.)
Diffstat (limited to 'hesiod/nss_hesiod/hesiod-grp.c')
-rw-r--r-- | hesiod/nss_hesiod/hesiod-grp.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/hesiod/nss_hesiod/hesiod-grp.c b/hesiod/nss_hesiod/hesiod-grp.c index 7e4ecb4..944e5e0 100644 --- a/hesiod/nss_hesiod/hesiod-grp.c +++ b/hesiod/nss_hesiod/hesiod-grp.c @@ -26,8 +26,6 @@ #include <string.h> #include <sys/param.h> -#include "nss_hesiod.h" - /* Get the declaration of the parser function. */ #define ENTNAME grent #define STRUCTURE group @@ -58,8 +56,7 @@ lookup (const char *name, const char *type, struct group *grp, size_t len; int olderr = errno; - context = _nss_hesiod_init (); - if (context == NULL) + if (hesiod_init (&context) < 0) return NSS_STATUS_UNAVAIL; list = hesiod_resolve (context, name, type); @@ -179,8 +176,7 @@ _nss_hesiod_initgroups_dyn (const char *user, gid_t group, long int *start, gid_t *groups = *groupsp; int save_errno; - context = _nss_hesiod_init (); - if (context == NULL) + if (hesiod_init (&context) < 0) return NSS_STATUS_UNAVAIL; list = hesiod_resolve (context, user, "grplist"); |