* src/stat.c (default_format): Include context when present. * NEWS: Update blurb explaining the replacement for -Z. ---
Definitely nicer than the first attempt, but still controversial on whether we want to do this at all. I'm 70:30 for (I use Fedora's stat -Z regularly, and would hate to make Fedora have to maintain it's -Z patch in perpetuity). NEWS | 5 ++++- src/stat.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index dd8a18b..719ac9c 100644 --- a/NEWS +++ b/NEWS @@ -75,7 +75,10 @@ GNU coreutils NEWS -*- outline -*- stat no longer accepts the --context (-Z) option. Initially it was merely accepted and ignored, for compatibility. Starting two years - ago, with coreutils-7.0, its use evoked a warning. + ago, with coreutils-7.0, its use evoked a warning. Printing the + SELinux context can be done with the %C format directive, and the + default output when no format is specified now automatically + includes %C when context information is available. stat now outputs the full sub-second resolution for the atime, mtime, and ctime values since the Epoch, when using the %X, %Y, and diff --git a/src/stat.c b/src/stat.c index 4e3ec12..2275089 100644 --- a/src/stat.c +++ b/src/stat.c @@ -1074,7 +1074,12 @@ default_format (bool fs, bool terse, bool device) if (fs) { if (terse) - format = xstrdup ("%n %i %l %t %s %S %b %f %a %c %d\n"); + { + if (0 < is_selinux_enabled ()) + format = xstrdup ("%n %i %l %t %s %S %b %f %a %c %d %C\n"); + else + format = xstrdup ("%n %i %l %t %s %S %b %f %a %c %d\n"); + } else { /* TRANSLATORS: This string uses format specifiers from @@ -1086,12 +1091,30 @@ Block size: %-10s Fundamental block size: %S\n\ Blocks: Total: %-10b Free: %-10f Available: %a\n\ Inodes: Total: %-10c Free: %d\n\ ")); + + if (0 < is_selinux_enabled ()) + { + /* TRANSLATORS: This string uses format specifiers from + 'stat --help' with --file-system, and NOT from printf. */ + char *temp = format; + format = xasprintf ("%s%s", format, _(" +Context: %C\n\ +")); + free (temp); + } } } else /* ! fs */ { if (terse) - format = xstrdup ("%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o\n"); + { + if (0 < is_selinux_enabled ()) + format = xstrdup ("%n %s %b %f %u %g %D %i %h %t %T" + " %X %Y %Z %W %o\n"); + else + format = xstrdup ("%n %s %b %f %u %g %D %i %h %t %T" + " %X %Y %Z %W %o %C\n"); + } else { char *temp; @@ -1126,6 +1149,24 @@ Device: %Dh/%dd\tInode: %-10i Links: %h\n\ 'stat --help' without --file-system, and NOT from printf. */ format = xasprintf ("%s%s", format, _("\ Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n\ +")); + free (temp); + + if (0 < is_selinux_enabled ()) + { + temp = format; + /* TRANSLATORS: This string uses format specifiers from + 'stat --help' without --file-system, and NOT from printf. */ + format = xasprintf ("%s%s", format, _("\ +Context: %C\n\ +")); + free (temp); + } + + temp = format; + /* TRANSLATORS: This string uses format specifiers from + 'stat --help' without --file-system, and NOT from printf. */ + format = xasprintf ("%s%s", format, _("\ Access: %x\n\ Modify: %y\n\ Change: %z\n\ -- 1.7.2.3