From 40558d9b2b11b6edb660cce88544ef25d2f5a589 Mon Sep 17 00:00:00 2001 From: Apple Date: Fri, 11 May 2007 04:30:13 +0000 Subject: [PATCH] file_cmds-116.11.tar.gz --- chmod/chmod.1 | 7 +++++++ chmod/chmod.c | 6 +++++- chmod/chmod_acl.c | 19 +++++++++++++++++++ chmod/chmod_acl.h | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/chmod/chmod.1 b/chmod/chmod.1 index 90c7734..9cafe9c 100644 --- a/chmod/chmod.1 +++ b/chmod/chmod.1 @@ -63,6 +63,11 @@ .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 diff --git a/chmod/chmod.c b/chmod/chmod.c index 8651176..c256ecd 100644 --- a/chmod/chmod.c +++ b/chmod/chmod.c @@ -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; diff --git a/chmod/chmod_acl.c b/chmod/chmod_acl.c index eacc60d..effc4c0 100644 --- a/chmod/chmod_acl.c +++ b/chmod/chmod_acl.c @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #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 { diff --git a/chmod/chmod_acl.h b/chmod/chmod_acl.h index 1bab724..8ca16be 100644 --- a/chmod/chmod_acl.h +++ b/chmod/chmod_acl.h @@ -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) -- 2.7.4