djdelorie / rpms / glibc

Forked from rpms/glibc 3 years ago
Clone
84517e1
commit a6033052d08027f745867e5e346852da1959226c
84517e1
Author: Florian Weimer <fweimer@redhat.com>
84517e1
Date:   Tue Mar 29 11:27:32 2016 +0200
84517e1
84517e1
    nss_db: Propagate ERANGE error if parse_line fails [BZ #19837]
84517e1
    
84517e1
    Reproducer (needs to run as root):
84517e1
    
84517e1
    perl -e \
84517e1
      'print "large:x:999:" . join(",", map {"user$_"} (1 .. 135))."\n"' \
84517e1
      >> /etc/group
84517e1
    cd /var/db
84517e1
    make
84517e1
    getent -s db group
84517e1
    
84517e1
    After the fix, the last command should list the "large" group.
84517e1
    
84517e1
    The magic number 135 has been chosen so that the line is shorter than
84517e1
    1024 bytes, but the pointers required to encode the member array will
84517e1
    cross the threshold, triggering the bug.
84517e1
84517e1
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
84517e1
index 03c18d7..125a5e9 100644
84517e1
--- a/nss/nss_db/db-XXX.c
84517e1
+++ b/nss/nss_db/db-XXX.c
84517e1
@@ -288,8 +288,8 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
84517e1
 	    }
84517e1
 	  if (err < 0)
84517e1
 	    {
84517e1
-	      H_ERRNO_SET (HOST_NOT_FOUND);
84517e1
-	      status = NSS_STATUS_NOTFOUND;
84517e1
+	      H_ERRNO_SET (NETDB_INTERNAL);
84517e1
+	      status = NSS_STATUS_TRYAGAIN;
84517e1
 	      break;
84517e1
 	    }
84517e1