From patchwork Wed Mar 4 22:16:48 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Riehecky X-Patchwork-Id: 131107 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 9DAA64BA23CB for ; Wed, 4 Mar 2026 22:19:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9DAA64BA23CB Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=fnal.gov header.i=@fnal.gov header.a=rsa-sha256 header.s=selector2 header.b=fuvlDNq4 X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from BN8PR09CU001.outbound.protection.outlook.com (mail-eastus2azlp170120005.outbound.protection.outlook.com [IPv6:2a01:111:f403:c110::5]) by sourceware.org (Postfix) with ESMTPS id 1C1254BA2E14 for ; Wed, 4 Mar 2026 22:17:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1C1254BA2E14 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=fnal.gov Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=fnal.gov ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1C1254BA2E14 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c110::5 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1772662647; cv=pass; b=U5XPWGGSbqJMujVyWwP6DeLrVq7f7nPdBxLaLWKFNI8YGww6t5hw9sUWZkXhrV1jEG09JoDiRpCxG1shiNfV9H/Jc8Y4Z/tm7rIvrEqOWNeQiXrpIIw4CylFwy/NwjaQDR0LUQkDiEmPlGkZmVqHkgSySnc0BrReoxIGKWzp+lA= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1772662647; c=relaxed/simple; bh=8e7Wb5aioJE3H+3YMOtpz8RHaCseDN3/ifdONofPWQw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=I+AAYsOq3wPjiTsVsrtbCl6tEMQp7AZsI2y/FdbRDAken+YJNc49uuhcnvIet4KVzWi6Umg3lxM4ztxiL7crA1A4qhk7VZufUk1KrDvVLgut//v7tb0L1ytkxSr9nqEUnPe+rMzah7zfUsdmv8DSfo2wF7sHuz5fAMb2j71GadE= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C1254BA2E14 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AO5qv28SViJcM7ND0GNtViudgEhyceDRu2fo/g9xU4VngELqfzGJf+50TNpV6olGq0jtNBHl1xzngQ8YeMXKRvBaQuM9cKRhIqtfzUmBGPiBn392D0x2LQivfYOMOkbPJqVmFXtMWzrQeUG1F2uNEdBUXRaqSGZB6DYhA5VreL4eJ20OX/YRDejI388YMVUKfMCcD5pXB/8JI0t58D00hRb2vQmgvNwhn3YvYb/bFlxtVhf0Ga19aWzBJxDA5Mwzh187VbYPtcENmj/fcfxAYfPOpctWmx5TYNhGZh0le6o8rm++NC8NcHsySdH9oJ7AOWlAzSFOViqZTR5Rut6MnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zGq9S6fNmAILMFbKyHx0tAKHE+qMu9+r70RKAgG5Twg=; b=F1IqM4IMXkzp21Bq4WlQuCKeMprBccxGoiWjp5jV1AX8933SO9fhymTyEmWdPeogf9IPlrv7pyRU2TgIGxm0FpxVIX7LMMXwrn0t758QzOzQmhmC3uHgEIbJHhl44v79cdHH+wGEXuYuDZ7Yuxtpw5gbcjwcLESAY7heh8KTe4dj9bq0eKl/E6B/4utWIAJGhEXi9YF4mGfoE798uCHYNhqWBdhGyZMwxrhMaZB+61RtDAq3iDkezUDx7R182uVMgFKRMx80OfFFobmFv4nz5fjBYk9nqyLnEyraQAYBr9eUth4AHQSllUYWJnG5o6vnZgnlSiafRTAGoo6rDNI4sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 131.225.12.108) smtp.rcpttodomain=fnal.gov smtp.mailfrom=fnal.gov; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=fnal.gov; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fnal.gov; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zGq9S6fNmAILMFbKyHx0tAKHE+qMu9+r70RKAgG5Twg=; b=fuvlDNq4Eq7jKc41LPhbjGPEHy+bqg2UXY5u1d6GBXqheFY2g3W16v9ElYI2RcITzN5gzmSKYn/kgDK5uLcVovGVZotJIrMOfTHBEZdRPtqxwDB/Oh/D661k6NgCgonBmgDAnM2hO9u8gB8TLvyk39bJPbd7YxA/ry1ur4a8whBUpvg4q2nJlnlLeZV4IUM91Qzhx19aeiG/5DOw97jsXYCqjqdbl3jFv1bvKRlqCOT0j0I7MmQma+qxrCO1MwwVQZFge0jzAInblqQI1A4tv+DAz/aTWgfbagOe4YimAyFOWXzEmuumesPx4r9d4rMWYny02yCu/RvRtItJfM2Nuw== Received: from CYXPR09CA0005.namprd09.prod.outlook.com (2603:10b6:930:d4::18) by BLAPR09MB6546.namprd09.prod.outlook.com (2603:10b6:208:2a7::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18; Wed, 4 Mar 2026 22:17:22 +0000 Received: from DS4PEPF00000172.namprd09.prod.outlook.com (2603:10b6:930:d4:cafe::73) by CYXPR09CA0005.outlook.office365.com (2603:10b6:930:d4::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9654.23 via Frontend Transport; Wed, 4 Mar 2026 22:17:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 131.225.12.108) smtp.mailfrom=fnal.gov; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=fnal.gov; Received-SPF: Pass (protection.outlook.com: domain of fnal.gov designates 131.225.12.108 as permitted sender) receiver=protection.outlook.com; client-ip=131.225.12.108; helo=smtp-ux-prd04.fnal.gov; pr=C Received: from smtp-ux-prd04.fnal.gov (131.225.12.108) by DS4PEPF00000172.mail.protection.outlook.com (10.167.18.199) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9678.18 via Frontend Transport; Wed, 4 Mar 2026 22:17:22 +0000 X-Received: from testify.fnal.gov (testify.fnal.gov [131.225.220.34]) by smtp-ux-prd04.fnal.gov (Postfix) with ESMTPS id DE4E760404E4; Wed, 4 Mar 2026 16:17:21 -0600 (CST) X-Received: by testify.fnal.gov (Postfix, from userid 45610) id D8B3D2203; Wed, 4 Mar 2026 16:17:21 -0600 (CST) X-Fermilab-Onsite-Email-Sender: True From: Patrick Riehecky X-Fermilab-Onsite-Email-Sender: True To: libc-alpha@sourceware.org X-Fermilab-Onsite-Email-Sender: True Cc: Pat Riehecky Subject: [PATCH 1/1] nss: files-initgroups.c use shared nss parse tools Date: Wed, 4 Mar 2026 16:16:48 -0600 X-Fermilab-Onsite-Email-Sender: True Message-ID: <20260304221715.1703198-3-riehecky@fnal.gov> X-Mailer: git-send-email 2.47.3 X-Fermilab-Onsite-Email-Sender: True In-Reply-To: <20260304221715.1703198-1-riehecky@fnal.gov> X-Fermilab-Onsite-Email-Sender: True References: <20260304221715.1703198-1-riehecky@fnal.gov> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS4PEPF00000172:EE_|BLAPR09MB6546:EE_ X-MS-Office365-Filtering-Correlation-Id: eca426e3-ee15-46d0-6493-08de7a3bcea0 X-Fermilab-OB: 1 X-Fermilab-Sender: smtp-ux-prd04 X-Fermilab-Sender-Location: inside X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700016; X-Microsoft-Antispam-Message-Info: HLdFIRvqNgLcpqWHFfgc4WxZ/oSnAvnpVUSfg7wmb5wrlDYxvDvF7vl0yre9+sngdb9HxfTs+6e5GB2pbAPKApDuyFkcqewxrf4SK77DtLVbtrnywg66ZeZaFBDBZJFPMPn+RaFv68IIJzzWnh13C7UV4BBmwL8c4yymN8sMEP6ajPkyp7J489UXBERAnbZeDTCpnuCCUF1a9QzWGT5touk4S2PA16XwzS1VyHgIoBaD74gd6nIh3tV4hFzJV7ILLBu31U/PKhfhdnvMEe7xCSXduYzFREixnG4SuUcPYt+oQZprwFiYGbDHk6L6IcF8/I7iullwtKqX2gnPMnPFjqm7G/3C/Nk9KGk/r+LUv/RNk8j5+zxi1E+mou2Gb/ABgCWBbseN89c6JkfhBjM84ZqALkmngv/WHWsqeFPTmVvKFldQhQEqPuvANG8GJRiM1vuXdxobi/7nwPQ1zM6C0VvxpLo/2teOFFej015uLRczWn5sGMArk67O52Q7WEd7lfQWODub88Uf8fCesIsUhtlJn3cDiKuFEP9Whwk17SbwaM9sceVme/73/S7vjOh2MTPmL90jUmbnEgyBDMRx2An3I3S/YhSLgW640PBQkE8skE+rS5rC2HDru4R9lN22BgWh2PJMAUREmRNc29boa0jis9Mk4WXKFsLOKShq2tp118ZJsmgibIc1b0CfCZG0nwDL6wddfCYh9KiClrSyUw29vgrvnAaRml+PRzIVd+dioJkSmmqA1D/doEmIazARL5WczzaRpRDtZE149Kkmfg== X-Forefront-Antispam-Report: CIP:131.225.12.108; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:smtp-ux-prd04.fnal.gov; PTR:smtp-ux-prd04.fnal.gov; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(36860700016); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0pGG1Ls0V+o8mI9i7K2yulurILER0NN1KcKQUaAVo01D2dDeM8t9+au1YucXmNiH1ts4sL6zC5jdDU8WM+9tZTr5aGMEbaj1VrGXqBvcjgkQcXLTM5itfIIelezHZVLx2vfObhW1ZWCLtGIHG1jM+UHWK+TtB8uSgjoBEmBrPw3FqoC5eiVe1C0mvVnlP/e9Ck3RQ9E76jzoEyjFcLhGTfD/hLbAfoBLgSQwUJQn0ZGo6PqiihlLvCpYJxyPFCAtGihffID9pKzbWiY6VejDNuLrCtDqgjdnE/ovtp8vzyFke20DphNjc0TVva5NgJmDEnx9vznZ1TE/k5mhkagnhkMjzQX0se8OS2Wfe24XtGz/0/UmdmgEHwm/zpp5JfhPG0RjrO8uYtApiSLv1MuLkRSGGRi0crMDLlJJZQob0gtvdhyfTwL+vJIB9zrPXIn+ X-OriginatorOrg: fnal.gov X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 22:17:22.0841 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eca426e3-ee15-46d0-6493-08de7a3bcea0 X-MS-Exchange-CrossTenant-Id: 9d5f83d3-d338-4fd3-b1c9-b7d94d70255a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=9d5f83d3-d338-4fd3-b1c9-b7d94d70255a; Ip=[131.225.12.108]; Helo=[smtp-ux-prd04.fnal.gov] X-MS-Exchange-CrossTenant-AuthSource: DS4PEPF00000172.namprd09.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR09MB6546 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FROM_GOV_DKIM_AU, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org From: Pat Riehecky files-initgroups.c open-coded line reading using __getline, fgetpos/fsetpos, and __feof_unlocked. The interface from files-XXX.c uses __nss_readline and __nss_parse_line_result. Replace the local file handling with __nss_readline and __nss_parse_line_result to align files-initgroups.c with files-XXX.c. stdio_ext.h is no longer needed and is removed. No behaviour change intended. Fixes: https://sourceware.org/bugzilla/show_bug.cgi?id=33960 Signed-off-by: Pat Riehecky --- nss/nss_files/files-initgroups.c | 74 +++++++++++++++++++------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c index 018b51e25f..dd6c7b4b82 100644 --- a/nss/nss_files/files-initgroups.c +++ b/nss/nss_files/files-initgroups.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -41,7 +40,6 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, } char *line = NULL; - size_t linelen = 0; enum nss_status status = NSS_STATUS_SUCCESS; bool any = false; @@ -53,34 +51,52 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start, /* We have to iterate over the entire file. */ while (1) { - fpos_t pos; - fgetpos (stream, &pos); - ssize_t n = __getline (&line, &linelen, stream); - if (n < 0) - { - if (! __feof_unlocked (stream)) - status = ((*errnop = errno) == ENOMEM - ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL); - break; - } - + off64_t original_offset; + int ret = __nss_readline (stream, tmpbuf.data, tmpbuf.length, + &original_offset); + if (ret == ENOENT) + /* End of file. */ + break; + else if (ret != 0) + { + *errnop = ret; + status = NSS_STATUS_UNAVAIL; + break; + } + + /* For grent, sizeof (struct parser_data) == 0: ENTDATA is not defined. + The parser from fgetgrent.c is used for grent rather than defining + its own LINE_PARSER with an accompanying ENTDATA struct. + The struct therefore contains only the zero-length linebuffer + member. So tmpbuf.data serves as both the line buffer and parser + scratch space. The parser tokenizes the line in-place and carves + the gr_mem pointer array into the remaining space up to the size of + tmpbuf.data + tmpbuf.length. */ struct group grp; - int res = _nss_files_parse_grent (line, &grp, - tmpbuf.data, tmpbuf.length, errnop); - if (res == -1) - { - if (!scratch_buffer_grow (&tmpbuf)) - { - *errnop = ENOMEM; - status = NSS_STATUS_TRYAGAIN; - goto out; - } - /* Reread current line, the parser has clobbered it. */ - fsetpos (stream, &pos); - continue; - } - - if (res > 0 && grp.gr_gid != group) + int parse_ret = _nss_files_parse_grent (tmpbuf.data, &grp, tmpbuf.data, + tmpbuf.length, errnop); + ret = __nss_parse_line_result (stream, original_offset, parse_ret); + if (ret == EINVAL) + /* Malformed line; skip it. */ + continue; + else if (ret == ERANGE) + { + if (!scratch_buffer_grow (&tmpbuf)) + { + *errnop = ENOMEM; + status = NSS_STATUS_TRYAGAIN; + goto out; + } + continue; + } + else if (ret != 0) + { + *errnop = ret; + status = NSS_STATUS_UNAVAIL; + goto out; + } + + if (grp.gr_gid != group) for (char **m = grp.gr_mem; *m != NULL; ++m) if (strcmp (*m, user) == 0) {