aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-08-26 07:06:57 +0000
committerUlrich Drepper <drepper@redhat.com>2002-08-26 07:06:57 +0000
commit34816665b678a06e096a378303b68d35ff10a693 (patch)
tree471e49cf229dc64a80a72764e1d2db2c9c6e2818
parent40e15c4da81e899cbb4c6299fd4f48e1b1391115 (diff)
downloadglibc-34816665b678a06e096a378303b68d35ff10a693.tar.xz
glibc-34816665b678a06e096a378303b68d35ff10a693.zip
Update.
* nss/getXXbyYY_r.c (REENTRANT_NAME): Return ENOENT if status is neither SUCCESS nor TRYAGAIN [PR libc/4259]. * nss/nss_files/files-XXX.c (internal_getent): Don't set *errnop to ENOENT if no entry is found. * nis/nss_compat/compat-grp.c: Don't set errno in case of lookup failure. * nis/nss_compat/compat-initgroups.c: Likewise. * nis/nss_compat/compat-pwd.c: Likewise. * nis/nss_compat/compat-spwd.c: Likewise. * nis/nss_nis/nis-alias.c: Likewise. * nis/nss_nis/nis-ethers.c: Likewise. * nis/nss_nis/nis-grp.c: Likewise. * nis/nss_nis/nis-hosts.c: Likewise. * nis/nss_nis/nis-initgroups.c: Likewise. * nis/nss_nis/nis-netgrp.c: Likewise. * nis/nss_nis/nis-network.c: Likewise. * nis/nss_nis/nis-proto.c: Likewise. * nis/nss_nis/nis-publickey.c: Likewise. * nis/nss_nis/nis-pwd.c: Likewise. * nis/nss_nis/nis-rpc.c: Likewise. * nis/nss_nis/nis-service.c: Likewise. * nis/nss_nis/nis-spwd.c: Likewise. * resolv/nss_dns/dns-host.c: Likewise. * resolv/nss_dns/dns-network.c: Likewise. * nis/nss_nisplus/nisplus-alias.c: Save errno around NIS calls. * nis/nss_nisplus/nisplus-ethers.c: Likewise. * nis/nss_nisplus/nisplus-grp.c: Likewise. * nis/nss_nisplus/nisplus-hosts.c: Likewise. * nis/nss_nisplus/nisplus-network.c: Likewise. * nis/nss_nisplus/nisplus-proto.c: Likewise. * nis/nss_nisplus/nisplus-pwd.c: Likewise. * nis/nss_nisplus/nisplus-rpc.c: Likewise. * nis/nss_nisplus/nisplus-service.c: Likewise. * nis/nss_nisplus/nisplus-spwd.c: Likewise. * hesiod/nss_hesiod/hesiod-pwd.c (lookup): Preserve errno value. * hesiod/nss_hesiod/hesiod-proto.c (lookup): Likewise. * hesiod/nss_hesiod/hesiod-grp.c (lookup): Likewise. * hesiod/nss_hesiod/hesiod-service.c (lookup): Likewise.
-rw-r--r--ChangeLog39
-rw-r--r--hesiod/nss_hesiod/hesiod-grp.c12
-rw-r--r--hesiod/nss_hesiod/hesiod-proto.c15
-rw-r--r--hesiod/nss_hesiod/hesiod-pwd.c12
-rw-r--r--hesiod/nss_hesiod/hesiod-service.c15
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/Examples/ex10.c4
-rw-r--r--nis/nss_compat/compat-grp.c55
-rw-r--r--nis/nss_compat/compat-initgroups.c21
-rw-r--r--nis/nss_compat/compat-pwd.c89
-rw-r--r--nis/nss_compat/compat-spwd.c54
-rw-r--r--nis/nss_nis/nis-alias.c11
-rw-r--r--nis/nss_nis/nis-ethers.c22
-rw-r--r--nis/nss_nis/nis-grp.c20
-rw-r--r--nis/nss_nis/nis-hosts.c10
-rw-r--r--nis/nss_nis/nis-initgroups.c8
-rw-r--r--nis/nss_nis/nis-netgrp.c7
-rw-r--r--nis/nss_nis/nis-network.c25
-rw-r--r--nis/nss_nis/nis-proto.c26
-rw-r--r--nis/nss_nis/nis-publickey.c19
-rw-r--r--nis/nss_nis/nis-pwd.c24
-rw-r--r--nis/nss_nis/nis-rpc.c22
-rw-r--r--nis/nss_nis/nis-service.c28
-rw-r--r--nis/nss_nis/nis-spwd.c15
-rw-r--r--nis/nss_nisplus/nisplus-alias.c5
-rw-r--r--nis/nss_nisplus/nisplus-ethers.c5
-rw-r--r--nis/nss_nisplus/nisplus-grp.c13
-rw-r--r--nis/nss_nisplus/nisplus-hosts.c18
-rw-r--r--nis/nss_nisplus/nisplus-network.c18
-rw-r--r--nis/nss_nisplus/nisplus-proto.c18
-rw-r--r--nis/nss_nisplus/nisplus-pwd.c18
-rw-r--r--nis/nss_nisplus/nisplus-rpc.c15
-rw-r--r--nis/nss_nisplus/nisplus-service.c18
-rw-r--r--nis/nss_nisplus/nisplus-spwd.c10
-rw-r--r--nss/getXXbyYY_r.c3
-rw-r--r--nss/nss_files/files-XXX.c3
-rw-r--r--resolv/nss_dns/dns-host.c10
-rw-r--r--resolv/nss_dns/dns-network.c12
38 files changed, 337 insertions, 387 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e8c1daecc..5cd6bf6645 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,44 @@
2002-08-25 Ulrich Drepper <drepper@redhat.com>
+ * nss/getXXbyYY_r.c (REENTRANT_NAME): Return ENOENT if status is
+ neither SUCCESS nor TRYAGAIN [PR libc/4259].
+ * nss/nss_files/files-XXX.c (internal_getent): Don't set *errnop
+ to ENOENT if no entry is found.
+ * nis/nss_compat/compat-grp.c: Don't set errno in case of lookup
+ failure.
+ * nis/nss_compat/compat-initgroups.c: Likewise.
+ * nis/nss_compat/compat-pwd.c: Likewise.
+ * nis/nss_compat/compat-spwd.c: Likewise.
+ * nis/nss_nis/nis-alias.c: Likewise.
+ * nis/nss_nis/nis-ethers.c: Likewise.
+ * nis/nss_nis/nis-grp.c: Likewise.
+ * nis/nss_nis/nis-hosts.c: Likewise.
+ * nis/nss_nis/nis-initgroups.c: Likewise.
+ * nis/nss_nis/nis-netgrp.c: Likewise.
+ * nis/nss_nis/nis-network.c: Likewise.
+ * nis/nss_nis/nis-proto.c: Likewise.
+ * nis/nss_nis/nis-publickey.c: Likewise.
+ * nis/nss_nis/nis-pwd.c: Likewise.
+ * nis/nss_nis/nis-rpc.c: Likewise.
+ * nis/nss_nis/nis-service.c: Likewise.
+ * nis/nss_nis/nis-spwd.c: Likewise.
+ * resolv/nss_dns/dns-host.c: Likewise.
+ * resolv/nss_dns/dns-network.c: Likewise.
+ * nis/nss_nisplus/nisplus-alias.c: Save errno around NIS calls.
+ * nis/nss_nisplus/nisplus-ethers.c: Likewise.
+ * nis/nss_nisplus/nisplus-grp.c: Likewise.
+ * nis/nss_nisplus/nisplus-hosts.c: Likewise.
+ * nis/nss_nisplus/nisplus-network.c: Likewise.
+ * nis/nss_nisplus/nisplus-proto.c: Likewise.
+ * nis/nss_nisplus/nisplus-pwd.c: Likewise.
+ * nis/nss_nisplus/nisplus-rpc.c: Likewise.
+ * nis/nss_nisplus/nisplus-service.c: Likewise.
+ * nis/nss_nisplus/nisplus-spwd.c: Likewise.
+ * hesiod/nss_hesiod/hesiod-pwd.c (lookup): Preserve errno value.
+ * hesiod/nss_hesiod/hesiod-proto.c (lookup): Likewise.
+ * hesiod/nss_hesiod/hesiod-grp.c (lookup): Likewise.
+ * hesiod/nss_hesiod/hesiod-service.c (lookup): Likewise.
+
* sysdeps/unix/sysv/linux/i386/sigaction.c: Avoid warnings by
declaring __restore and __restore_rt as hidden (if possible).
diff --git a/hesiod/nss_hesiod/hesiod-grp.c b/hesiod/nss_hesiod/hesiod-grp.c
index fdaf1f26f7..50c53f7893 100644
--- a/hesiod/nss_hesiod/hesiod-grp.c
+++ b/hesiod/nss_hesiod/hesiod-grp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
@@ -57,6 +57,7 @@ lookup (const char *name, const char *type, struct group *grp,
char **list;
int parse_res;
size_t len;
+ int olderr = errno;
context = _nss_hesiod_init ();
if (context == NULL)
@@ -65,8 +66,10 @@ lookup (const char *name, const char *type, struct group *grp,
list = hesiod_resolve (context, name, type);
if (list == NULL)
{
+ int err = errno;
hesiod_end (context);
- return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
+ __set_errno (olderr);
+ return err == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
}
linebuflen = buffer + buflen - data->linebuffer;
@@ -85,7 +88,10 @@ lookup (const char *name, const char *type, struct group *grp,
parse_res = _nss_files_parse_grent (buffer, grp, data, buflen, errnop);
if (parse_res < 1)
- return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+ {
+ __set_errno (olderr);
+ return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+ }
return NSS_STATUS_SUCCESS;
}
diff --git a/hesiod/nss_hesiod/hesiod-proto.c b/hesiod/nss_hesiod/hesiod-proto.c
index 333f02a5f5..137b57202b 100644
--- a/hesiod/nss_hesiod/hesiod-proto.c
+++ b/hesiod/nss_hesiod/hesiod-proto.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
@@ -67,6 +67,7 @@ lookup (const char *name, const char *type, struct protoent *proto,
char **list, **item;
int parse_res;
int found;
+ int olderr = errno;
context = _nss_hesiod_init ();
if (context == NULL)
@@ -75,8 +76,10 @@ lookup (const char *name, const char *type, struct protoent *proto,
list = hesiod_resolve (context, name, type);
if (list == NULL)
{
+ int err = errno;
hesiod_end (context);
- return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
+ __set_errno (olderr);
+ return err == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
}
linebuflen = buffer + buflen - data->linebuffer;
@@ -115,7 +118,13 @@ lookup (const char *name, const char *type, struct protoent *proto,
hesiod_free_list (context, list);
hesiod_end (context);
- return found ? NSS_STATUS_SUCCESS : NSS_STATUS_NOTFOUND;
+ if (found == 0)
+ {
+ __set_errno (olderr);
+ return NSS_STATUS_NOTFOUND;
+ }
+
+ return NSS_STATUS_SUCCESS;
}
enum nss_status
diff --git a/hesiod/nss_hesiod/hesiod-pwd.c b/hesiod/nss_hesiod/hesiod-pwd.c
index 9f57e27906..2a7f65e2f0 100644
--- a/hesiod/nss_hesiod/hesiod-pwd.c
+++ b/hesiod/nss_hesiod/hesiod-pwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
@@ -55,6 +55,7 @@ lookup (const char *name, const char *type, struct passwd *pwd,
char **list;
int parse_res;
size_t len;
+ int olderr = errno;
context = _nss_hesiod_init ();
if (context == NULL)
@@ -63,8 +64,10 @@ lookup (const char *name, const char *type, struct passwd *pwd,
list = hesiod_resolve (context, name, type);
if (list == NULL)
{
+ int err = errno;
hesiod_end (context);
- return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
+ __set_errno (olderr);
+ return err == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
}
linebuflen = buffer + buflen - data->linebuffer;
@@ -83,7 +86,10 @@ lookup (const char *name, const char *type, struct passwd *pwd,
parse_res = _nss_files_parse_pwent (buffer, pwd, data, buflen, errnop);
if (parse_res < 1)
- return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+ {
+ __set_errno (olderr);
+ return parse_res == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+ }
return NSS_STATUS_SUCCESS;
}
diff --git a/hesiod/nss_hesiod/hesiod-service.c b/hesiod/nss_hesiod/hesiod-service.c
index bd4cb612fb..cb5edd2859 100644
--- a/hesiod/nss_hesiod/hesiod-service.c
+++ b/hesiod/nss_hesiod/hesiod-service.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
@@ -68,6 +68,7 @@ lookup (const char *name, const char *type, const char *protocol,
char **list, **item;
int parse_res;
int found;
+ int olderr = errno;
context = _nss_hesiod_init ();
if (context == NULL)
@@ -76,8 +77,10 @@ lookup (const char *name, const char *type, const char *protocol,
list = hesiod_resolve (context, name, type);
if (list == NULL)
{
+ int err = errno;
hesiod_end (context);
- return errno == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
+ __set_errno (olderr);
+ return err == ENOENT ? NSS_STATUS_NOTFOUND : NSS_STATUS_UNAVAIL;
}
linebuflen = buffer + buflen - data->linebuffer;
@@ -116,7 +119,13 @@ lookup (const char *name, const char *type, const char *protocol,
hesiod_free_list (context, list);
hesiod_end (context);
- return found ? NSS_STATUS_SUCCESS : NSS_STATUS_NOTFOUND;
+ if (found == 0)
+ {
+ __set_errno (olderr);
+ return NSS_STATUS_NOTFOUND;
+ }
+
+ return NSS_STATUS_SUCCESS;
}
enum nss_status
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index bc124a13c1..c689dc2164 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-26 Ulrich Drepper <drepper@redhat.com>
+
+ * Examples/ex10.c (thread): tv_nsec == 1000000000 is already
+ overflow [PR libc/4244].
+
2002-08-25 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/timer_routines.c (thread_func): Make the
diff --git a/linuxthreads/Examples/ex10.c b/linuxthreads/Examples/ex10.c
index 8af1b6e1ca..9352f463a0 100644
--- a/linuxthreads/Examples/ex10.c
+++ b/linuxthreads/Examples/ex10.c
@@ -1,5 +1,5 @@
/* Tests for pthread_mutex_timedlock function.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Kaz Kylheku <kaz@ashi.footprints.net>, 2000.
The GNU C Library is free software; you can redistribute it and/or
@@ -67,7 +67,7 @@ thread (void *arg)
ts.tv_nsec += TIMEOUT_NS;
- if (ts.tv_nsec > 1000000000L) {
+ if (ts.tv_nsec >= 1000000000L) {
ts.tv_sec++;
ts.tv_nsec -= 1000000000L;
}
diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c
index cd939eb9e1..c9750ae1be 100644
--- a/nis/nss_compat/compat-grp.c
+++ b/nis/nss_compat/compat-grp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@@ -246,7 +246,6 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
{
ent->nis = 0;
- *errnop = ENOENT;
return NSS_STATUS_NOTFOUND;
}
@@ -286,7 +285,6 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
!= YPERR_SUCCESS)
{
ent->nis = 0;
- *errnop = ENOENT;
return NSS_STATUS_NOTFOUND;
}
@@ -438,17 +436,11 @@ getgrnam_plusgroup (const char *name, struct group *result, char *buffer,
int outvallen;
if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
if (yp_match (domain, "group.byname", name, strlen (name),
&outval, &outvallen) != YPERR_SUCCESS)
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
if (buflen < ((size_t) outvallen + 1))
{
@@ -493,10 +485,8 @@ getgrent_next_file (struct group *result, ent_t *ent,
buffer[buflen - 1] = '\xff';
p = fgets (buffer, buflen, ent->stream);
if (p == NULL && feof (ent->stream))
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
+
if (p == NULL || buffer[buflen - 1] != '\xff')
{
fsetpos (ent->stream, &pos);
@@ -636,10 +626,8 @@ internal_getgrnam_r (const char *name, struct group *result, ent_t *ent,
buffer[buflen - 1] = '\xff';
p = fgets (buffer, buflen, ent->stream);
if (p == NULL && feof (ent->stream))
- {
- *errnop = ENOENT;
return NSS_STATUS_NOTFOUND;
- }
+
if (p == NULL || buffer[buflen - 1] != '\xff')
{
fsetpos (ent->stream, &pos);
@@ -681,10 +669,7 @@ internal_getgrnam_r (const char *name, struct group *result, ent_t *ent,
if (result->gr_name[0] == '-' && result->gr_name[1] != '\0')
{
if (strcmp (&result->gr_name[1], name) == 0)
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
else
continue;
}
@@ -730,10 +715,7 @@ _nss_compat_getgrnam_r (const char *name, struct group *grp,
enum nss_status status;
if (name[0] == '-' || name[0] == '+')
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
__libc_lock_lock (lock);
@@ -789,19 +771,13 @@ getgrgid_plusgroup (gid_t gid, struct group *result, char *buffer,
int outvallen;
if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
snprintf (buf, sizeof (buf), "%lu", (unsigned long int) gid);
if (yp_match (domain, "group.bygid", buf, strlen (buf),
&outval, &outvallen) != YPERR_SUCCESS)
- {
- *errnop = ENOENT;
- return NSS_STATUS_NOTFOUND;
- }
+ return NSS_STATUS_NOTFOUND;
if (buflen < ((size_t) outvallen + 1))
{
@@ -848,10 +824,8 @@ internal_getgrgid_r (gid_t gid, struct group *result, ent_t *ent,
buffer[buflen - 1] = '\xff';
p = fgets (buffer, buflen, ent->stream);