From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS22989 209.51.188.0/24 X-Spam-Status: No, score=-3.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 586161F45A for ; Thu, 27 Oct 2022 12:48:06 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oo2I0-0003AG-3l; Thu, 27 Oct 2022 08:47:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1onzHe-0007cE-6B for bug-gnulib@gnu.org; Thu, 27 Oct 2022 05:34:55 -0400 Received: from haproxy.adestotech.com ([217.163.77.122]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1onzHb-00082t-B1 for bug-gnulib@gnu.org; Thu, 27 Oct 2022 05:34:41 -0400 Received: from skynet19.adestotech.com (unknown [192.168.129.19]) by haproxy.adestotech.com (Postfix) with ESMTP id 4CCB6A1469; Thu, 27 Oct 2022 10:34:33 +0100 (IST) From: Ondrej Valousek To: bug-gnulib@gnu.org Cc: Ondrej Valousek Subject: [PATCH] Basic support for checking NFSv4 ACLs in Linux Date: Thu, 27 Oct 2022 11:34:01 +0200 Message-Id: <20221027093401.813511-1-ondrej.valousek.xm@renesas.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=217.163.77.122; envelope-from=ondrej.valousek.xm@renesas.com; helo=haproxy.adestotech.com X-Spam_score_int: 4 X-Spam_score: 0.4 X-Spam_bar: / X-Spam_report: (0.4 / 5.0 requ) AC_FROM_MANY_DOTS=2.285, BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 27 Oct 2022 08:47:14 -0400 X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "bug-gnulib" Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org --- lib/file-has-acl.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c index e02f0626a..a6144e52e 100644 --- a/lib/file-has-acl.c +++ b/lib/file-has-acl.c @@ -32,6 +32,10 @@ #if GETXATTR_WITH_POSIX_ACLS # include # include +# include +#ifndef XATTR_NAME_NFSV4_ACL +#define XATTR_NAME_NFSV4_ACL "system.nfs4_acl" +#endif #endif /* Return 1 if NAME has a nontrivial access control list, @@ -67,6 +71,26 @@ file_has_acl (char const *name, struct stat const *sb) return 1; } + if (ret < 0) { /* we might be on NFS, so try to check NFSv4 ACLs too */ + ret = getxattr (name, XATTR_NAME_NFSV4_ACL, NULL, 0); + if (ret < 0 && errno == ENODATA) + ret = 0; + else if (ret > 0) { + char *xattr; + xattr = malloc(ret); + if (!xattr) { + ret = -1; + } else { + ret = getxattr (name, XATTR_NAME_NFSV4_ACL, xattr, ret); + if (ret < 0) ret = -1; + else { + u_int32_t num_aces = (u_int32_t)ntohl(*((u_int32_t*)(xattr))); /* Grab the number of aces in the acl */ + ret = num_aces > 3; + } + free(xattr); + } + } + } if (ret < 0) return - acl_errno_valid (errno); return ret; -- 2.37.3