diff options
author | Florian Weimer <fweimer@redhat.com> | 2016-03-29 11:27:32 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2016-03-29 11:27:32 +0200 |
commit | a6033052d08027f745867e5e346852da1959226c (patch) | |
tree | 7223be0f10e3468f5c44ef9c259ec0a36f30ae85 /nss/nss_db | |
parent | 0791f91dff9a77263fa8173b143d854cad902c6d (diff) | |
download | glibc-a6033052d08027f745867e5e346852da1959226c.zip glibc-a6033052d08027f745867e5e346852da1959226c.tar.gz glibc-a6033052d08027f745867e5e346852da1959226c.tar.bz2 |
nss_db: Propagate ERANGE error if parse_line fails [BZ #19837]
Reproducer (needs to run as root):
perl -e \
'print "large:x:999:" . join(",", map {"user$_"} (1 .. 135))."\n"' \
>> /etc/group
cd /var/db
make
getent -s db group
After the fix, the last command should list the "large" group.
The magic number 135 has been chosen so that the line is shorter than
1024 bytes, but the pointers required to encode the member array will
cross the threshold, triggering the bug.
Diffstat (limited to 'nss/nss_db')
-rw-r--r-- | nss/nss_db/db-XXX.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 03c18d7..125a5e9 100644 --- a/nss/nss_db/db-XXX.c +++ b/nss/nss_db/db-XXX.c @@ -288,8 +288,8 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer, } if (err < 0) { - H_ERRNO_SET (HOST_NOT_FOUND); - status = NSS_STATUS_NOTFOUND; + H_ERRNO_SET (NETDB_INTERNAL); + status = NSS_STATUS_TRYAGAIN; break; } |