From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7381 invoked by alias); 27 Mar 2004 17:53:19 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 7365 invoked from network); 27 Mar 2004 17:53:18 -0000 Received: from unknown (HELO Cantor.suse.de) (195.135.220.2) by sources.redhat.com with SMTP; 27 Mar 2004 17:53:18 -0000 Received: from hermes.suse.de (Hermes.suse.de [195.135.221.8]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (No client certificate requested) by Cantor.suse.de (Postfix) with ESMTP id 99525386EA1 for ; Sat, 27 Mar 2004 18:51:22 +0100 (CET) Date: Mon, 29 Mar 2004 20:16:00 -0000 From: Thorsten Kukuk To: libc-hacker@sources.redhat.com Subject: Re: NSS modules and errno if key not found Message-ID: <20040327175122.GA21826@suse.de> References: <20040326221341.GA14167@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040326221341.GA14167@suse.de> User-Agent: Mutt/1.4i Organization: SuSE Linux AG, Nuernberg, Germany X-SW-Source: 2004-03/txt/msg00139.txt.bz2 On Fri, Mar 26, Thorsten Kukuk wrote: > > Hi, > > I found a problem today when debugging some NSS releated problems. > > If somebody calls getgrnam_r (or any other reentrant NSS function), > the return value of the function will be errno if the status is not > NSS_STATUS_SUCCESS. > > But in the case of NSS_STATUS_NOTFOUND, no NSS module sets errno, > so the return value is a random value, but should be zero. > > Who should set errno in this case? Should all NSS modules set > errno? Or should we explicit return 0 in the getXXbyYY_r functions > for NSS_STATUS_NOTFOUND? Looking at getXXbyYY_r.c, we can only change it in this file. My proposed fix: 2004-03-27 Thorsten Kukuk * nss/getXXbyYY_r.c: If key is not found, return zero, not a random errno value. --- nss/getXXbyYY_r.c 10 Mar 2004 09:28:25 -0000 1.57 +++ nss/getXXbyYY_r.c 27 Mar 2004 08:44:52 -0000 @@ -256,6 +256,11 @@ else if (status == NSS_STATUS_TRYAGAIN && *h_errnop != NETDB_INTERNAL) res = EAGAIN; #endif + else if (status == NSS_STATUS_NOTFOUND) + { + __set_errno (ENOENT); + return 0; + } else return errno; -- Thorsten Kukuk http://www.suse.de/~kukuk/ kukuk@suse.de SuSE Linux AG Maxfeldstr. 5 D-90409 Nuernberg -------------------------------------------------------------------- Key fingerprint = A368 676B 5E1B 3E46 CFCE 2D97 F8FD 4E23 56C6 FB4B