2004-04-01  Jakub Jelinek  <jakub@redhat.com>

	* nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): If protocol
	is NULL, instead of trying yp_match (name/tcp), yp_match (name/udp),
	yp_all, try yp_match (name), yp_all.

2004-04-01  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Add handling for
	ignored entries.  Ignore AT_IGNOREPPC.
This commit is contained in:
Ulrich Drepper 2004-04-01 09:03:29 +00:00
parent bf244ee81f
commit dd047aa514
2 changed files with 58 additions and 51 deletions

View File

@ -1,3 +1,14 @@
2004-04-01 Jakub Jelinek <jakub@redhat.com>
* nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): If protocol
is NULL, instead of trying yp_match (name/tcp), yp_match (name/udp),
yp_all, try yp_match (name), yp_all.
2004-04-01 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Add handling for
ignored entries. Ignore AT_IGNOREPPC.
2004-03-31 Andreas Jaeger <aj@suse.de>
* libio/fileops.c (new_do_write): Return _IO_size_t to make 64-bit

View File

@ -279,60 +279,56 @@ _nss_nis_getservbyname_r (const char *name, const char *protocol,
return NSS_STATUS_UNAVAIL;
/* If the protocol is given, we could try if our NIS server knows
about services.byservicename map. If yes, we only need one query.
If the protocol is not given, try first name/tcp, then name/udp
and then fallback to sequential scanning of services.byname map. */
const char *proto = protocol != NULL ? protocol : "tcp";
do
about services.byservicename map. If yes, we only need one query. */
char key[strlen (name) + (protocol ? strlen (protocol) : 0) + 2];
char *cp, *result;
size_t keylen, len;
int int_len;
/* key is: "name/proto" */
cp = stpcpy (key, name);
if (protocol)
{
char key[strlen (name) + strlen (proto) + 2];
char *cp, *result;
size_t keylen, len;
int int_len;
/* key is: "name/proto" */
cp = stpcpy (key, name);
*cp++ = '/';
stpcpy (cp, proto);
keylen = strlen (key);
status = yperr2nss (yp_match (domain, "services.byservicename", key,
keylen, &result, &int_len));
len = int_len;
/* If we found the key, it's ok and parse the result. If not,
fall through and parse the complete table. */
if (status == NSS_STATUS_SUCCESS)
{
struct parser_data *pdata = (void *) buffer;
int parse_res;
char *p;
if ((size_t) (len + 1) > buflen)
{
free (result);
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
p = strncpy (buffer, result, len);
buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
parse_res = _nss_files_parse_servent (p, serv, pdata,
buflen, errnop);
if (parse_res < 0)
{
if (parse_res == -1)
return NSS_STATUS_TRYAGAIN;
else
return NSS_STATUS_NOTFOUND;
}
else
return NSS_STATUS_SUCCESS;
}
strcpy (cp, protocol);
}
keylen = strlen (key);
status = yperr2nss (yp_match (domain, "services.byservicename", key,
keylen, &result, &int_len));
len = int_len;
/* If we found the key, it's ok and parse the result. If not,
fall through and parse the complete table. */
if (status == NSS_STATUS_SUCCESS)
{
struct parser_data *pdata = (void *) buffer;
int parse_res;
char *p;
if ((size_t) (len + 1) > buflen)
{
free (result);
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
p = strncpy (buffer, result, len);
buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
parse_res = _nss_files_parse_servent (p, serv, pdata,
buflen, errnop);
if (parse_res < 0)
{
if (parse_res == -1)
return NSS_STATUS_TRYAGAIN;
else
return NSS_STATUS_NOTFOUND;
}
else
return NSS_STATUS_SUCCESS;
}
while (protocol == NULL && (proto[0] == 't' ? (proto = "udp") : NULL));
struct ypall_callback ypcb;
struct search_t req;