With this patch the filename will not be printed.
$ nfs4_getfacl /test/
# file: /test/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A::EVERYONE@:rwaDxtcy
$ nfs4_getfacl -c /test/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A::EVERYONE@:rwaDxtcy
Signed-off-by: Kenneth D'souza <[email protected]>
---
man/man1/nfs4_getfacl.1 | 6 ++++++
nfs4_getfacl/nfs4_getfacl.c | 13 ++++++++++---
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/man/man1/nfs4_getfacl.1 b/man/man1/nfs4_getfacl.1
index 83067c9..001723e 100644
--- a/man/man1/nfs4_getfacl.1
+++ b/man/man1/nfs4_getfacl.1
@@ -28,6 +28,12 @@ flag is specified,
.B nfs4_getfacl
will list the NFSv4 ACLs of all files and directories recursively.
+If the
+.BR -c / --omit-header
+flag is specified,
+.B nfs4_getfacl
+will not display the comment header (Do not print filename).
+
The output format for an NFSv4 file ACL, e.g., is:
.RS
.nf
diff --git a/nfs4_getfacl/nfs4_getfacl.c b/nfs4_getfacl/nfs4_getfacl.c
index 5a9c911..8194e6f 100644
--- a/nfs4_getfacl/nfs4_getfacl.c
+++ b/nfs4_getfacl/nfs4_getfacl.c
@@ -46,6 +46,7 @@ static void usage(int);
static void more_help();
static char *execname;
static void print_acl_from_path();
+static int ignore_comment = 0;
static int recursive(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf)
{
@@ -57,6 +58,7 @@ static struct option long_options[] = {
{"more-help", 0, 0, 'H' },
{"help", 0, 0, 'h' },
{"recursive", 0, 0, 'R' },
+ {"omit-header", 0, 0, 'c'},
{ NULL, 0, 0, 0, },
};
@@ -73,7 +75,7 @@ int main(int argc, char **argv)
goto out;
}
- while ((opt = getopt_long(argc, argv, "HR?h", long_options, NULL)) != -1) {
+ while ((opt = getopt_long(argc, argv, "HR?hc", long_options, NULL)) != -1) {
switch(opt) {
case 'H':
more_help();
@@ -83,7 +85,9 @@ int main(int argc, char **argv)
case 'R':
do_recursive = 1;
break;
-
+ case 'c':
+ ignore_comment = 1; /* Do not display the comment header */
+ break;
default:
usage(1);
res = 0;
@@ -115,7 +119,10 @@ static void print_acl_from_path(const char *fpath)
struct nfs4_acl *acl;
acl = nfs4_acl_for_path(fpath);
if (acl != NULL) {
+ if(ignore_comment == 0)
printf("\n# file: %s\n", fpath);
+ else
+ printf("\n");
nfs4_print_acl(stdout, acl);
nfs4_free_acl(acl);
}
@@ -125,7 +132,7 @@ static void usage(int label)
{
if (label)
fprintf(stderr, "%s %s -- get NFSv4 file or directory access control lists.\n", execname, VERSION);
- fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n", execname);
+ fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n -c, --omit-header\tDo not display the comment header (Do not print filename)\n", execname);
}
static void more_help()
--
2.20.1
Thanks, applying with some fixes:
On Tue, Mar 26, 2019 at 07:27:40PM +0530, Kenneth D'souza wrote:
> With this patch the filename will not be printed.
>
> $ nfs4_getfacl /test/
> # file: /test/
> A::OWNER@:rwaDxtTcCy
> A::GROUP@:rwaDxtcy
> A::EVERYONE@:rwaDxtcy
>
> $ nfs4_getfacl -c /test/
>
> A::OWNER@:rwaDxtTcCy
> A::GROUP@:rwaDxtcy
> A::EVERYONE@:rwaDxtcy
I don't see any reason for that blank line, I've removed it.
> @@ -115,7 +119,10 @@ static void print_acl_from_path(const char *fpath)
> struct nfs4_acl *acl;
> acl = nfs4_acl_for_path(fpath);
> if (acl != NULL) {
> + if(ignore_comment == 0)
> printf("\n# file: %s\n", fpath);
This needs to be indented.
> + else
> + printf("\n");
I've removed the "else" clause.
And fixed a couple minor whitespace issues.
--b.
> nfs4_print_acl(stdout, acl);
> nfs4_free_acl(acl);
> }
> @@ -125,7 +132,7 @@ static void usage(int label)
> {
> if (label)
> fprintf(stderr, "%s %s -- get NFSv4 file or directory access control lists.\n", execname, VERSION);
> - fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n", execname);
> + fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n -c, --omit-header\tDo not display the comment header (Do not print filename)\n", execname);
> }
>
> static void more_help()
> --
> 2.20.1
On Wed, Apr 10, 2019 at 2:04 AM J. Bruce Fields <[email protected]> wrote:
>
> Thanks, applying with some fixes:
>
> On Tue, Mar 26, 2019 at 07:27:40PM +0530, Kenneth D'souza wrote:
> > With this patch the filename will not be printed.
> >
> > $ nfs4_getfacl /test/
> > # file: /test/
> > A::OWNER@:rwaDxtTcCy
> > A::GROUP@:rwaDxtcy
> > A::EVERYONE@:rwaDxtcy
> >
> > $ nfs4_getfacl -c /test/
> >
> > A::OWNER@:rwaDxtTcCy
> > A::GROUP@:rwaDxtcy
> > A::EVERYONE@:rwaDxtcy
>
> I don't see any reason for that blank line, I've removed it.
>
I added the blank line so we print acl for each file on a new line
when -c is used.
# nfs4_getfacl -Rc /test
A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A::EVERYONE@:rwaDxtcy
A::OWNER@:rwatTcCy
A::GROUP@:tcy
A::EVERYONE@:tcy
A::OWNER@:rwaDxtTcCy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
> > @@ -115,7 +119,10 @@ static void print_acl_from_path(const char *fpath)
> > struct nfs4_acl *acl;
> > acl = nfs4_acl_for_path(fpath);
> > if (acl != NULL) {
> > + if(ignore_comment == 0)
> > printf("\n# file: %s\n", fpath);
>
> This needs to be indented.
>
> > + else
> > + printf("\n");
>
> I've removed the "else" clause.
>
> And fixed a couple minor whitespace issues.
>
> --b.
>
> > nfs4_print_acl(stdout, acl);
> > nfs4_free_acl(acl);
> > }
> > @@ -125,7 +132,7 @@ static void usage(int label)
> > {
> > if (label)
> > fprintf(stderr, "%s %s -- get NFSv4 file or directory access control lists.\n", execname, VERSION);
> > - fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n", execname);
> > + fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n -c, --omit-header\tDo not display the comment header (Do not print filename)\n", execname);
> > }
> >
> > static void more_help()
> > --
> > 2.20.1
On Wed, Apr 10, 2019 at 03:07:11PM +0530, Kenneth Dsouza wrote:
> On Wed, Apr 10, 2019 at 2:04 AM J. Bruce Fields <[email protected]> wrote:
> >
> > Thanks, applying with some fixes:
> >
> > On Tue, Mar 26, 2019 at 07:27:40PM +0530, Kenneth D'souza wrote:
> > > With this patch the filename will not be printed.
> > >
> > > $ nfs4_getfacl /test/
> > > # file: /test/
> > > A::OWNER@:rwaDxtTcCy
> > > A::GROUP@:rwaDxtcy
> > > A::EVERYONE@:rwaDxtcy
> > >
> > > $ nfs4_getfacl -c /test/
> > >
> > > A::OWNER@:rwaDxtTcCy
> > > A::GROUP@:rwaDxtcy
> > > A::EVERYONE@:rwaDxtcy
> >
> > I don't see any reason for that blank line, I've removed it.
> >
> I added the blank line so we print acl for each file on a new line
> when -c is used.
OK, it does make sense to have a blank line between multiple ACLs.
Again I'd rather adopt the same behavior has getfacl/setfacl whenever we
can. Looks like getfacl just appends a blank line regardless of whether
-c is used or whether the are multiple ACLs:
[bfields@patate ~]$ getfacl .
# file: .
# owner: bfields
# group: bfields
user::rwx
group::--x
other::--x
[bfields@patate ~]$
I've added that to print_acl_from_path().
--b.
> # nfs4_getfacl -Rc /test
>
> A::OWNER@:rwaDxtTcCy
> A::GROUP@:rwaDxtcy
> A::EVERYONE@:rwaDxtcy
>
> A::OWNER@:rwatTcCy
> A::GROUP@:tcy
> A::EVERYONE@:tcy
>
> A::OWNER@:rwaDxtTcCy
> A::GROUP@:rxtcy
> A::EVERYONE@:rxtcy
>
>
> > > @@ -115,7 +119,10 @@ static void print_acl_from_path(const char *fpath)
> > > struct nfs4_acl *acl;
> > > acl = nfs4_acl_for_path(fpath);
> > > if (acl != NULL) {
> > > + if(ignore_comment == 0)
> > > printf("\n# file: %s\n", fpath);
> >
> > This needs to be indented.
> >
> > > + else
> > > + printf("\n");
> >
> > I've removed the "else" clause.
> >
> > And fixed a couple minor whitespace issues.
> >
> > --b.
> >
> > > nfs4_print_acl(stdout, acl);
> > > nfs4_free_acl(acl);
> > > }
> > > @@ -125,7 +132,7 @@ static void usage(int label)
> > > {
> > > if (label)
> > > fprintf(stderr, "%s %s -- get NFSv4 file or directory access control lists.\n", execname, VERSION);
> > > - fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n", execname);
> > > + fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n -c, --omit-header\tDo not display the comment header (Do not print filename)\n", execname);
> > > }
> > >
> > > static void more_help()
> > > --
> > > 2.20.1
Thanks! Should we also add the below entries similar to getfacl?
$ nfs4_getfacl /test/
# file: /test/
# owner: test
# group: test
A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A::EVERYONE@:rwaDxtcy
On Wed, Apr 10, 2019 at 6:56 PM J. Bruce Fields <[email protected]> wrote:
>
> On Wed, Apr 10, 2019 at 03:07:11PM +0530, Kenneth Dsouza wrote:
> > On Wed, Apr 10, 2019 at 2:04 AM J. Bruce Fields <[email protected]> wrote:
> > >
> > > Thanks, applying with some fixes:
> > >
> > > On Tue, Mar 26, 2019 at 07:27:40PM +0530, Kenneth D'souza wrote:
> > > > With this patch the filename will not be printed.
> > > >
> > > > $ nfs4_getfacl /test/
> > > > # file: /test/
> > > > A::OWNER@:rwaDxtTcCy
> > > > A::GROUP@:rwaDxtcy
> > > > A::EVERYONE@:rwaDxtcy
> > > >
> > > > $ nfs4_getfacl -c /test/
> > > >
> > > > A::OWNER@:rwaDxtTcCy
> > > > A::GROUP@:rwaDxtcy
> > > > A::EVERYONE@:rwaDxtcy
> > >
> > > I don't see any reason for that blank line, I've removed it.
> > >
> > I added the blank line so we print acl for each file on a new line
> > when -c is used.
>
> OK, it does make sense to have a blank line between multiple ACLs.
>
> Again I'd rather adopt the same behavior has getfacl/setfacl whenever we
> can. Looks like getfacl just appends a blank line regardless of whether
> -c is used or whether the are multiple ACLs:
>
> [bfields@patate ~]$ getfacl .
> # file: .
> # owner: bfields
> # group: bfields
> user::rwx
> group::--x
> other::--x
>
> [bfields@patate ~]$
>
> I've added that to print_acl_from_path().
>
> --b.
>
> > # nfs4_getfacl -Rc /test
> >
> > A::OWNER@:rwaDxtTcCy
> > A::GROUP@:rwaDxtcy
> > A::EVERYONE@:rwaDxtcy
> >
> > A::OWNER@:rwatTcCy
> > A::GROUP@:tcy
> > A::EVERYONE@:tcy
> >
> > A::OWNER@:rwaDxtTcCy
> > A::GROUP@:rxtcy
> > A::EVERYONE@:rxtcy
> >
> >
> > > > @@ -115,7 +119,10 @@ static void print_acl_from_path(const char *fpath)
> > > > struct nfs4_acl *acl;
> > > > acl = nfs4_acl_for_path(fpath);
> > > > if (acl != NULL) {
> > > > + if(ignore_comment == 0)
> > > > printf("\n# file: %s\n", fpath);
> > >
> > > This needs to be indented.
> > >
> > > > + else
> > > > + printf("\n");
> > >
> > > I've removed the "else" clause.
> > >
> > > And fixed a couple minor whitespace issues.
> > >
> > > --b.
> > >
> > > > nfs4_print_acl(stdout, acl);
> > > > nfs4_free_acl(acl);
> > > > }
> > > > @@ -125,7 +132,7 @@ static void usage(int label)
> > > > {
> > > > if (label)
> > > > fprintf(stderr, "%s %s -- get NFSv4 file or directory access control lists.\n", execname, VERSION);
> > > > - fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n", execname);
> > > > + fprintf(stderr, "Usage: %s [-R] file ...\n -H, --more-help\tdisplay ACL format information\n -?, -h, --help\tdisplay this help text\n -R --recursive\trecurse into subdirectories\n -c, --omit-header\tDo not display the comment header (Do not print filename)\n", execname);
> > > > }
> > > >
> > > > static void more_help()
> > > > --
> > > > 2.20.1