Blob Blame History Raw
commit a6033052d08027f745867e5e346852da1959226c
Author: Florian Weimer <fweimer@redhat.com>
Date:   Tue Mar 29 11:27:32 2016 +0200

    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.

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;
 	    }