This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi!
getservbyname doesn't work with NIS (but I'm surprised this has not shown
up in many other places) if the NIS server doesn't provide
services.byservicename map, eventhough /etc/default/nss doesn't say
it is available and authoritative:
#SERVICES_AUTHORITATIVE=TRUE
(with SERVICES_AUTHORITATIVE=TRUE and no services.byservicename this
would be expected).
_nss_nis_getservbyname_r in that case tries services.byservicename
map (which fails) and then walks services.byname map with
yp_all. When the search routine finds the service it is looking for,
yp_all sees data.status == YP_TRUE and result (from clnt_call) RPC_SUCCESS.
The code then does:
if (res == YPERR_SUCCESS && data.status != YP_NOMORE)
{
__set_errno (saved_errno);
return ypprot_err (data.status);
}
but since October 2004 ypprot_err no longer handles error values above
YP_NOKEY, so this returns YPERR_YPERR and thus getservbyname results
failure.
Fixed thusly.
2005-03-23 Jakub Jelinek <jakub@redhat.com>
* nis/ypclnt.c (yp_2_yperr): Revert 2004-11-30 patch.
(ypprot_err): Use yp_2_yperr table also for YP_NODOM .. YP_NOMORE.
--- libc/nis/ypclnt.c.jj 2004-12-06 12:40:54.000000000 +0100
+++ libc/nis/ypclnt.c 2005-03-23 15:53:30.657777627 +0100
@@ -1,4 +1,5 @@
-/* Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@@ -829,6 +830,11 @@ yperr_string (const int error)
static const int8_t yp_2_yperr[] =
{
#define YP2YPERR(yp, yperr) [YP_##yp - YP_VERS] = YPERR_##yperr
+ YP2YPERR (TRUE, SUCCESS),
+ YP2YPERR (NOMORE, NOMORE),
+ YP2YPERR (FALSE, YPERR),
+ YP2YPERR (NOMAP, MAP),
+ YP2YPERR (NODOM, DOMAIN),
YP2YPERR (NOKEY, KEY),
YP2YPERR (BADOP, YPERR),
YP2YPERR (BADDB, BADDB),
@@ -839,7 +845,7 @@ static const int8_t yp_2_yperr[] =
int
ypprot_err (const int code)
{
- if (code < YP_VERS || code > YP_NOKEY)
+ if (code < YP_VERS || code > YP_NOMORE)
return YPERR_YPERR;
return yp_2_yperr[code - YP_VERS];
}
Jakub
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |