summaryrefslogtreecommitdiff
path: root/usr/src/cmd/auditstat
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/auditstat')
-rw-r--r--usr/src/cmd/auditstat/Makefile44
-rw-r--r--usr/src/cmd/auditstat/auditstat.c249
2 files changed, 293 insertions, 0 deletions
diff --git a/usr/src/cmd/auditstat/Makefile b/usr/src/cmd/auditstat/Makefile
new file mode 100644
index 0000000000..a1b8cf39ac
--- /dev/null
+++ b/usr/src/cmd/auditstat/Makefile
@@ -0,0 +1,44 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 1992, 2002 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+PROG= auditstat
+
+include ../Makefile.cmd
+include ../Makefile.cmd.bsm
+
+LDLIBS += -lbsm
+
+.KEEP_STATE:
+
+all: $(PROG)
+
+clean:
+
+lint: lint_PROG
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/auditstat/auditstat.c b/usr/src/cmd/auditstat/auditstat.c
new file mode 100644
index 0000000000..347d1da69a
--- /dev/null
+++ b/usr/src/cmd/auditstat/auditstat.c
@@ -0,0 +1,249 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef lint
+static char sccsid[] = "%Z%%M% %I% %E% SMI;";
+static char cmw_sccsid[] = "@(#)auditstat.c 2.3 92/01/30 SMI; SunOS CMW";
+#endif
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <bsm/audit.h>
+#include <bsm/libbsm.h>
+#include <unistd.h>
+
+/*
+ * Display header every HEADER_MOD lines printed
+ */
+#define DFLT_HEADER_MOD (20)
+#define ONEK (1024)
+
+#define CFLG (0x01)
+#define HFLG (0x02)
+#define IFLG (0x04)
+#define NFLG (0x08)
+#define VFLG (0x10)
+
+extern char *optarg;
+
+static int count;
+static int flags;
+static int header_mod = DFLT_HEADER_MOD;
+static int interval;
+
+static void display_stats();
+static void eauditon();
+static void parse_args();
+static void usage_exit();
+static int strisdigit();
+
+int
+main(argc, argv)
+int argc;
+char **argv;
+{
+ register int i;
+ au_stat_t s;
+
+ (void) setbuf(stdout, (char *)0);
+ (void) setbuf(stderr, (char *)0);
+
+ parse_args(argc, argv);
+
+ if (!flags) {
+ eauditon(A_GETSTAT, (caddr_t)&s, NULL);
+ display_stats(&s, 0);
+ exit(0);
+ }
+
+ if (flags & VFLG || flags & NFLG)
+ eauditon(A_GETSTAT, (caddr_t)&s, NULL);
+
+ if (flags & VFLG)
+ (void) printf("version = %d\n", s.as_version);
+
+ if (flags & NFLG)
+ (void) printf("number of kernel events = %d\n", s.as_numevent);
+
+ if (!(flags & IFLG))
+ exit(0);
+
+ /* CSTYLED */
+ for (i = 0;; i++) {
+ eauditon(A_GETSTAT, (caddr_t)&s, NULL);
+ display_stats(&s, i);
+ if ((flags & CFLG) && count)
+ if (i == count - 1)
+ break;
+ (void) sleep(interval);
+ }
+
+ return (0);
+}
+
+
+static void
+display_stats(s, cnt)
+au_stat_t *s;
+{
+ int offset[12]; /* used to line the header up correctly */
+ char buf[512];
+
+ (void) sprintf(buf,
+"%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u %n%4u%n",
+ s->as_generated, &(offset[0]),
+ s->as_nonattrib, &(offset[1]),
+ s->as_kernel, &(offset[2]),
+ s->as_audit, &(offset[3]),
+ s->as_auditctl, &(offset[4]),
+ s->as_enqueue, &(offset[5]),
+ s->as_written, &(offset[6]),
+ s->as_wblocked, &(offset[7]),
+ s->as_rblocked, &(offset[8]),
+ s->as_dropped, &(offset[9]),
+ s->as_totalsize / ONEK, &(offset[10]),
+ s->as_memused / ONEK, &(offset[11]));
+
+ /* print a properly aligned header every HEADER_MOD lines */
+ if (header_mod && (!cnt || !(cnt % header_mod))) {
+ (void) printf(
+ "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s\n",
+ offset[0] - 1, "gen",
+ offset[1] - offset[0] - 1, "nona",
+ offset[2] - offset[1] - 1, "kern",
+ offset[3] - offset[2] - 1, "aud",
+ offset[4] - offset[3] - 1, "ctl",
+ offset[5] - offset[4] - 1, "enq",
+ offset[6] - offset[5] - 1, "wrtn",
+ offset[7] - offset[6] - 1, "wblk",
+ offset[8] - offset[7] - 1, "rblk",
+ offset[9] - offset[8] - 1, "drop",
+ offset[10] - offset[9] - 1, "tot",
+ offset[11] - offset[10], "mem");
+ }
+
+ (void) puts(buf);
+}
+
+
+static void
+eauditon(cmd, data, length)
+int cmd;
+caddr_t data;
+int length;
+{
+ if (auditon(cmd, data, length) == -1) {
+ perror("auditstat: auditon");
+ exit(1);
+ }
+}
+
+
+static void
+parse_args(argc, argv)
+int argc;
+char **argv;
+{
+ int c;
+
+ while ((c = getopt(argc, argv, "c:h:i:vn")) != -1) {
+ switch (c) {
+ case 'c':
+ if (flags & CFLG)
+ usage_exit();
+ flags |= CFLG;
+ if (strisdigit(optarg)) {
+ (void) fprintf(stderr,
+ "auditstat: invalid count specified.\n");
+ exit(1);
+ }
+ count = atoi(optarg);
+ break;
+ case 'h':
+ if (flags & HFLG)
+ usage_exit();
+ flags |= HFLG;
+ if (strisdigit(optarg)) {
+ (void) fprintf(stderr,
+ "auditstat: invalid header arg specified.\n");
+ exit(1);
+ }
+ header_mod = atoi(optarg);
+ break;
+ case 'i':
+ if (flags & IFLG)
+ usage_exit();
+ flags |= IFLG;
+ if (strisdigit(optarg)) {
+ (void) fprintf(stderr,
+ "auditstat: invalid interval specified.\n");
+ exit(1);
+ }
+ interval = atoi(optarg);
+ break;
+ case 'n':
+ if (flags & NFLG)
+ usage_exit();
+ flags |= NFLG;
+ break;
+ case 'v':
+ if (flags & VFLG)
+ usage_exit();
+ flags |= VFLG;
+ break;
+ case '?':
+ default:
+ usage_exit();
+ break;
+ }
+ }
+}
+
+
+static void
+usage_exit()
+{
+ (void) fprintf(stderr,
+ "auditstat: usage: auditstat [-c count] [-h lines] \
+ [-i interval] [-n] [-v]\n");
+ exit(1);
+}
+
+
+static int
+strisdigit(s)
+char *s;
+{
+ for (; *s; s++)
+ if (!isdigit(*s))
+ return (1);
+
+ return (0);
+}