]> git.saurik.com Git - apple/file_cmds.git/commitdiff
file_cmds-116.11.tar.gz mac-os-x-10411ppc mac-os-x-10411x86 v116.11
authorApple <opensource@apple.com>
Fri, 11 May 2007 04:30:13 +0000 (04:30 +0000)
committerApple <opensource@apple.com>
Fri, 11 May 2007 04:30:13 +0000 (04:30 +0000)
chmod/chmod.1
chmod/chmod.c
chmod/chmod_acl.c
chmod/chmod_acl.h

index 90c773486d28cf94ae2028ccc4385e2c057eba8d..9cafe9cf1f1fabe98b58f3b90162e7f8b7d0b09e 100644 (file)
 .Op Fl R Op Fl H | L | P 
 .Op Fl C
 .Ar
+.Nm chmod
+.Op Fl fv
+.Op Fl R Op Fl H | L | P
+.Op Fl N
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -520,6 +525,8 @@ Returns false if any of the named files have ACLs in non-canonical order.
 Removes the 'inherited' bit from all entries in the named file(s) ACLs.
 .It Fl I
 Removes all inherited entries from the named file(s) ACL(s).
+.It Fl N
+Removes the ACL from the named file(s).
 .El
 .Sh COMPATIBILITY
 The
index 8651176b6a1a93cadeb4bca043785da9a17b512d..c256ecdd46bba005ebe0a193172b60be3e910fe9 100644 (file)
@@ -93,7 +93,7 @@ main(int argc, char *argv[])
 #ifndef __APPLE__
        while ((ch = getopt(argc, argv, "HLPRXfghorstuvwx")) != -1)
 #else
-       while ((ch = getopt(argc, argv, "ACEHILPRVXafginorstuvwx")) != -1)
+       while ((ch = getopt(argc, argv, "ACEHILNPRVXafginorstuvwx")) != -1)
 #endif
                switch (ch) {
                case 'H':
@@ -149,6 +149,10 @@ main(int argc, char *argv[])
                case 'n':
                        acloptflags |= ACL_FLAG | ACL_NO_TRANSLATE;
                        break;
+               case 'N':
+                       acloptflags |= ACL_FLAG | ACL_CLEAR_FLAG;
+                       ace_arg_not_required = 1;
+                       goto done;
                case 'V':
                        acloptflags |= ACL_FLAG | ACL_INVOKE_EDITOR;
                        ace_arg_not_required = 1;
index eacc60d1fe2392fefad709934a33d1624c4bc6b4..effc4c0716e95b0261b80b78cafd292c3ae9a9ad 100644 (file)
@@ -37,6 +37,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 #include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
 
 #include <membership.h>
 #include "chmod_acl.h"
@@ -695,6 +697,23 @@ modify_file_acl(unsigned int optflags, const char *path, acl_t modifier, int pos
        if (path == NULL)
                usage();
 
+       if (optflags & ACL_CLEAR_FLAG) {
+               filesec_t fsec = filesec_init();
+               if (fsec == NULL)
+                       err(1, "filesec_init() failed");
+               if (filesec_set_property(fsec, FILESEC_ACL,
+                                        _FILESEC_REMOVE_ACL) != 0)
+                       err(1, "filesec_set_property() failed");
+               if (chmodx_np(path, fsec) != 0) {
+                       if (!fflag)
+                               warn("Failed to clear ACL on file %s", path);
+                       retval = 1;
+               } else
+                       retval = 0;
+               filesec_free(fsec);
+               return (retval);
+       }
+
        if (optflags & ACL_FROM_STDIN)
                oacl = acl_dup(modifier);
        else {
index 1bab724f0447602161976e025fab1675792b0510..8ca16beb8d3ef3b86acbe86f2d784544ae899495 100644 (file)
@@ -52,6 +52,7 @@
 #define ACL_REMOVE_INHERITED_ENTRIES (1<<10)
 #define ACL_NO_TRANSLATE (1<<11)
 #define ACL_INVOKE_EDITOR (1<<12)
+#define ACL_CLEAR_FLAG (1<<14)
 
 #define INHERITANCE_TIER (-5)
 #define MINIMUM_TIER (-1000)