PERFORCE change 41470 for review
Andrew Reisse
areisse at FreeBSD.org
Wed Nov 5 18:59:14 GMT 2003
http://perforce.freebsd.org/chv.cgi?CH=41470
Change 41470 by areisse at areisse_ibook on 2003/11/05 10:58:27
ls -lZ prints labels
Affected files ...
.. //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/Makefile#2 edit
.. //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/ls.c#2 edit
.. //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/ls.h#2 edit
.. //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/print.c#2 edit
Differences ...
==== //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/Makefile#2 (text+ko) ====
@@ -18,12 +18,11 @@
OTHERSRCS = Makefile Makefile.preamble Makefile.postamble ls.1
-
MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
CODE_GEN_STYLE = DYNAMIC
MAKEFILE = tool.make
NEXTSTEP_INSTALLDIR = /bin
-LIBS =
+LIBS = ../../../libmac/libmac.a
DEBUG_LIBS = $(LIBS)
PROF_LIBS = $(LIBS)
==== //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/ls.c#2 (text+ko) ====
@@ -54,6 +54,7 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/param.h>
+#include <sys/mac.h>
#include <dirent.h>
#include <err.h>
@@ -106,6 +107,7 @@
int f_statustime; /* use time of last mode change */
int f_type; /* add type character for non-regular files */
int f_whiteout; /* show whiteout entries */
+int f_label = 0; /* show labels */
int
main(argc, argv)
@@ -134,7 +136,7 @@
f_listdot = 1;
fts_options = FTS_PHYSICAL;
- while ((ch = getopt(argc, argv, "1ACFLRSTWacdfgiklnoqrstuxv")) != -1) {
+ while ((ch = getopt(argc, argv, "1ACFLRSTWacdfgiklZnoqrstuxv")) != -1) {
switch (ch) {
/*
* The -1, -C, -l and -x options all override each other so
@@ -228,6 +230,9 @@
case 'v':
f_nonprint = 0;
break;
+ case 'Z':
+ f_label = 1;
+ break;
default:
case '?':
usage();
@@ -412,11 +417,12 @@
u_int64_t btotal, maxblock, maxsize;
int maxinode, maxnlink, maxmajor, maxminor;
int bcfile, entries, flen, glen, ulen, maxflags, maxgroup, maxlen;
- int maxuser, needstats;
+ int maxuser, maxlabelstr, needstats, labelstrlen;
const char *user, *group;
char ubuf[21]="", gbuf[21]="", buf[21]; /* 64 bits == 20 digits, +1 for NUL */
char nuser[12], ngroup[12];
char *flags = NULL;
+ char *labelstr = NULL;
#ifdef __GNUC__
/* This outrageous construct just to shut up a GCC warning. */
@@ -439,7 +445,7 @@
bcfile = 0;
maxuser = maxgroup = maxflags = maxlen = 0;
btotal = maxblock = maxsize = 0;
- maxmajor = maxminor = 0;
+ maxmajor = maxminor = maxlabelstr = 0;
for (cur = list, entries = 0; cur; cur = cur->fts_link) {
if (cur->fts_info == FTS_ERR || cur->fts_info == FTS_NS) {
warnx("%s: %s",
@@ -516,19 +522,85 @@
} else
flen = 0;
- if ((np = malloc(sizeof(NAMES) +
- ulen + glen + flen + 3)) == NULL)
- err(1, "%s", "");
+ if (f_label)
+ {
+ char name[PATH_MAX + 1];
+ mac_t label;
+ int error;
+
+ error = mac_prepare_file_label(&label);
+ if (error == -1) {
+ warn("MAC label for %s/%s",
+ cur->fts_parent->fts_path,
+ cur->fts_name);
+ goto label_out;
+ }
+
+ if (cur->fts_level == FTS_ROOTLEVEL)
+ snprintf(name, sizeof(name),
+ "%s", cur->fts_name);
+ else
+ snprintf(name, sizeof(name),
+ "%s/%s", cur->fts_parent->fts_accpath, cur->fts_name);
+
+ /*if (options & FTS_LOGICAL)
+ error = mac_get_file(name,
+ label);
+ else*/
+ error = mac_get_link(name,
+ label);
+ if (error == -1) {
+ warn("MAC label for %s/%s",
+ cur->fts_parent->fts_path,
+ cur->fts_name);
+ mac_free(label);
+ goto label_out;
+ }
+
+ error = mac_to_text(label,
+ &labelstr);
+ if (error == -1) {
+ warn("MAC label for %s/%s",
+ cur->fts_parent->fts_path,
+ cur->fts_name);
+ mac_free(label);
+ goto label_out;
+ }
+ mac_free(label);
+label_out:
+ if (labelstr == NULL)
+ labelstr = strdup("-");
+ labelstrlen = strlen(labelstr);
+ if (labelstrlen > maxlabelstr)
+ maxlabelstr = labelstrlen;
+ } else
+ labelstrlen = 0;
+
+ if ((np = malloc(sizeof(NAMES) + labelstrlen +
+ ulen + glen + flen + 4)) == NULL)
+ err(1, "malloc");
np->user = &np->data[0];
(void)strcpy(np->user, user);
np->group = &np->data[ulen + 1];
(void)strcpy(np->group, group);
+ if (S_ISCHR(sp->st_mode) ||
+ S_ISBLK(sp->st_mode))
+ bcfile = 1;
+
if (f_flags) {
np->flags = &np->data[ulen + glen + 2];
- (void)strcpy(np->flags, flags);
+ (void)strcpy(np->flags, flags);
+ free(flags);
+ }
+ if (f_label) {
+ np->label = &np->data[ulen + glen + 2
+ + (f_flags ? flen + 1 : 0)];
+ (void)strcpy(np->label, labelstr);
+ free(labelstr);
}
+
cur->fts_pointer = np;
}
}
@@ -541,6 +613,7 @@
d.list = list;
d.entries = entries;
d.maxlen = maxlen;
+ d.s_label = maxlabelstr;
if (needstats) {
d.btotal = btotal;
(void)snprintf(buf, sizeof(buf), "%qu", (long long)maxblock);
==== //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/ls.h#2 (text+ko) ====
@@ -51,6 +51,7 @@
extern int f_size; /* list size in short listing */
extern int f_statustime; /* use time of last mode change */
extern int f_type; /* add type character for non-regular files */
+extern int f_label; /* show labels */
typedef struct {
FTSENT *list;
@@ -66,11 +67,13 @@
int s_user;
int s_major;
int s_minor;
+ int s_label;
} DISPLAY;
typedef struct {
char *user;
char *group;
char *flags;
+ char *label;
char data[1];
} NAMES;
==== //depot/projects/trustedbsd/sedarwin/apsl/file_cmds/ls/print.c#2 (text+ko) ====
@@ -117,6 +117,8 @@
(void)printf("%s %*u %-*s %-*s ", buf, dp->s_nlink,
sp->st_nlink, dp->s_user, np->user, dp->s_group,
np->group);
+ if (f_label && np->label)
+ printf ("%-*s ", dp->s_label, np->label);
if (f_flags)
(void)printf("%-*s ", dp->s_flags, np->flags);
if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode))
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message
More information about the trustedbsd-cvs
mailing list