From nobody@FreeBSD.org  Wed Aug 18 18:52:12 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3CFED106566B
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 18 Aug 2010 18:52:12 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 2CC9D8FC1B
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 18 Aug 2010 18:52:12 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o7IIqBgi096421
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 18 Aug 2010 18:52:11 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o7IIqB1u096404;
	Wed, 18 Aug 2010 18:52:11 GMT
	(envelope-from nobody)
Message-Id: <201008181852.o7IIqB1u096404@www.freebsd.org>
Date: Wed, 18 Aug 2010 18:52:11 GMT
From: var Arnfjr Bjarmason <avarab@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: setfacl doesn't return non-zero on error
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         149780
>Category:       bin
>Synopsis:       [patch] setfacl(1) doesn't return non-zero on error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    jh
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Aug 18 19:00:05 UTC 2010
>Closed-Date:    Tue Feb 01 16:37:21 UTC 2011
>Last-Modified:  Tue Feb 01 16:37:21 UTC 2011
>Originator:     var Arnfjr Bjarmason
>Release:        8.1-STABLE
>Organization:
MagNet Inc.
>Environment:
FreeBSD eschaton.local 8.1-STABLE FreeBSD 8.1-STABLE #0: Wed Aug  4 09:11:13 EDT 2010     root@eschaton.local:/usr/src/sys/amd64/compile/ESCHATON  amd64

>Description:
setfacl doesn't return non-zero when it encounters an error in all cases.
>How-To-Repeat:
$ setfacl -m u:root:rwx . ; echo $?
setfacl: .: acl_get_file() failed: Operation not supported
0
>Fix:
See the attached one-line patch to setfacl.c. There are also more potential problems of this type in the source, e.g. setfacl won't return an error if a stat() call fails.

Patch attached with submission follows:

From acfdd206be4b2b2966eb55352ece421e86e75bd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= <avarab@gmail.com>
Date: Wed, 18 Aug 2010 14:40:34 -0400
Subject: [PATCH] setfacl: don't return 0 on error
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The setfacl documentation states:

    The setfacl utility exits 0 on success, and >0 if an error occurs.

Which is contradicted in this case:

    $ setfacl -m u:root:rwx . ; echo $?
    setfacl: .: acl_get_file() failed: Operation not supported
    0

But on Linux:

    $ setfacl -m u:root:rwx . ; echo $?
    setfacl: .: Operation not supported
    1

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 setfacl.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/setfacl.c b/setfacl.c
index 5552ff1..e254e75 100644
--- a/setfacl.c
+++ b/setfacl.c
@@ -234,6 +234,7 @@ main(int argc, char *argv[])
 		else
 			acl = acl_get_file(file->filename, acl_type);
 		if (acl == NULL) {
+			carried_error++;
 			if (h_flag)
 				warn("%s: acl_get_link_np() failed",
 				    file->filename);
-- 
1.7.2.1



>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->jh 
Responsible-Changed-By: jh 
Responsible-Changed-When: Sun Jan 2 11:07:26 UTC 2011 
Responsible-Changed-Why:  
Take. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=149780 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/149780: commit references a PR
Date: Mon,  3 Jan 2011 17:17:36 +0000 (UTC)

 Author: jh
 Date: Mon Jan  3 17:17:31 2011
 New Revision: 216922
 URL: http://svn.freebsd.org/changeset/base/216922
 
 Log:
   Increase carried_error if we skip a file due to an error. This ensures
   that setfacl(1) exits with proper exit status on failure.
   
   PR:		bin/149780
   Submitted by:	Ævar Arnfjörð Bjarmason (original version)
   Reviewed by:	trasz
   MFC after:	3 weeks
 
 Modified:
   head/bin/setfacl/setfacl.c
 
 Modified: head/bin/setfacl/setfacl.c
 ==============================================================================
 --- head/bin/setfacl/setfacl.c	Mon Jan  3 16:29:00 2011	(r216921)
 +++ head/bin/setfacl/setfacl.c	Mon Jan  3 17:17:31 2011	(r216922)
 @@ -201,12 +201,14 @@ main(int argc, char *argv[])
  
  		if (stat(file->filename, &sb) == -1) {
  			warn("%s: stat() failed", file->filename);
 +			carried_error++;
  			continue;
  		}
  
  		if (acl_type == ACL_TYPE_DEFAULT && S_ISDIR(sb.st_mode) == 0) {
  			warnx("%s: default ACL may only be set on a directory",
  			    file->filename);
 +			carried_error++;
  			continue;
  		}
  
 @@ -218,6 +220,7 @@ main(int argc, char *argv[])
  			if (acl_type == ACL_TYPE_DEFAULT) {
  				warnx("%s: there are no default entries "
  			           "in NFSv4 ACLs", file->filename);
 +				carried_error++;
  				continue;
  			}
  			acl_type = ACL_TYPE_NFS4;
 @@ -240,6 +243,7 @@ main(int argc, char *argv[])
  			else
  				warn("%s: acl_get_file() failed",
  				    file->filename);
 +			carried_error++;
  			continue;
  		}
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: jh 
State-Changed-When: Mon Jan 3 17:27:46 UTC 2011 
State-Changed-Why:  
Patched in head (r216922). Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=149780 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/149780: commit references a PR
Date: Tue,  1 Feb 2011 16:11:38 +0000 (UTC)

 Author: jh
 Date: Tue Feb  1 16:11:31 2011
 New Revision: 218172
 URL: http://svn.freebsd.org/changeset/base/218172
 
 Log:
   MFC r216922:
   
   Increase carried_error if we skip a file due to an error. This ensures
   that setfacl(1) exits with proper exit status on failure.
   
   PR:		bin/149780
 
 Modified:
   stable/8/bin/setfacl/setfacl.c
 Directory Properties:
   stable/8/bin/setfacl/   (props changed)
 
 Modified: stable/8/bin/setfacl/setfacl.c
 ==============================================================================
 --- stable/8/bin/setfacl/setfacl.c	Tue Feb  1 15:48:27 2011	(r218171)
 +++ stable/8/bin/setfacl/setfacl.c	Tue Feb  1 16:11:31 2011	(r218172)
 @@ -201,12 +201,14 @@ main(int argc, char *argv[])
  
  		if (stat(file->filename, &sb) == -1) {
  			warn("%s: stat() failed", file->filename);
 +			carried_error++;
  			continue;
  		}
  
  		if (acl_type == ACL_TYPE_DEFAULT && S_ISDIR(sb.st_mode) == 0) {
  			warnx("%s: default ACL may only be set on a directory",
  			    file->filename);
 +			carried_error++;
  			continue;
  		}
  
 @@ -218,6 +220,7 @@ main(int argc, char *argv[])
  			if (acl_type == ACL_TYPE_DEFAULT) {
  				warnx("%s: there are no default entries "
  			           "in NFSv4 ACLs", file->filename);
 +				carried_error++;
  				continue;
  			}
  			acl_type = ACL_TYPE_NFS4;
 @@ -240,6 +243,7 @@ main(int argc, char *argv[])
  			else
  				warn("%s: acl_get_file() failed",
  				    file->filename);
 +			carried_error++;
  			continue;
  		}
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: jh 
State-Changed-When: Tue Feb 1 16:37:20 UTC 2011 
State-Changed-Why:  
Fixed in head and stable/8. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=149780 
>Unformatted:
