Date: Mon, 29 Oct 2001 22:30:04 +0100 From: Anton Berezin <tobez@FreeBSD.org> To: audit@freebsd.org Subject: New option to sysctl(8) Message-ID: <20011029223004.B50609@heechee.tobez.org>
next in thread | raw e-mail | index | archive | help
Index: sysctl.8
===================================================================
RCS file: /home/ncvs/src/sbin/sysctl/sysctl.8,v
retrieving revision 1.38
diff -u -r1.38 sysctl.8
--- sysctl.8 2 Aug 2001 12:38:23 -0000 1.38
+++ sysctl.8 29 Oct 2001 21:20:44 -0000
@@ -40,11 +40,11 @@
.Nd get or set kernel state
.Sh SYNOPSIS
.Nm
-.Op Fl bNnox
+.Op Fl beNnox
.Ar name Ns Op = Ns Ar value
.Ar ...
.Nm
-.Op Fl bNnox
+.Op Fl beNnox
.Fl a
.Sh DESCRIPTION
The
@@ -71,6 +71,16 @@
Force the value of the variable(s) to be output in raw, binary format.
No names are printed and no terminating newlines are output.
This is mostly useful with a single variable.
+.It Fl e
+Separate the name and the value of the variable(s) with `='.
+This is useful for producing output which can be fed back to the
+.Nm
+utility.
+This option is ignored if either
+.Fl N
+or
+.Fl n
+is specified, or a variable is being set.
.It Fl N
Show only variable names, not their values.
This is particularly useful with shells that offer programmable
Index: sysctl.c
===================================================================
RCS file: /home/ncvs/src/sbin/sysctl/sysctl.c,v
retrieving revision 1.37
diff -u -r1.37 sysctl.c
--- sysctl.c 18 Jun 2001 21:06:24 -0000 1.37
+++ sysctl.c 29 Oct 2001 21:22:54 -0000
@@ -58,7 +58,7 @@
#include <string.h>
#include <unistd.h>
-static int aflag, bflag, Nflag, nflag, oflag, xflag;
+static int aflag, bflag, eflag, Nflag, nflag, oflag, xflag;
static int oidfmt(int *, int, char *, u_int *);
static void parse(char *);
@@ -71,8 +71,8 @@
{
(void)fprintf(stderr, "%s\n%s\n",
- "usage: sysctl [-bNnox] variable[=value] ...",
- " sysctl [-bNnox] -a");
+ "usage: sysctl [-beNnox] variable[=value] ...",
+ " sysctl [-beNnox] -a");
exit(1);
}
@@ -83,7 +83,7 @@
setbuf(stdout,0);
setbuf(stderr,0);
- while ((ch = getopt(argc, argv, "AabNnowxX")) != -1) {
+ while ((ch = getopt(argc, argv, "AabeNnowxX")) != -1) {
switch (ch) {
case 'A':
/* compatibility */
@@ -95,6 +95,9 @@
case 'b':
bflag = 1;
break;
+ case 'e':
+ eflag = 1;
+ break;
case 'N':
Nflag = 1;
break;
@@ -380,7 +383,7 @@
show_var(int *oid, int nlen)
{
u_char buf[BUFSIZ], *val, *p;
- char name[BUFSIZ], *fmt;
+ char name[BUFSIZ], *fmt, *sep;
int qoid[CTL_MAXNAME+2];
int i;
size_t j, len;
@@ -401,6 +404,11 @@
return (0);
}
+ if (eflag)
+ sep = "=";
+ else
+ sep = ": ";
+
/* find an estimate of how much we need for this var */
j = 0;
i = sysctl(oid, nlen, 0, &j, 0, 0);
@@ -431,13 +439,13 @@
switch (*fmt) {
case 'A':
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
printf("%s", p);
return (0);
case 'I':
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
fmt++;
val = "";
while (len >= sizeof(int)) {
@@ -453,7 +461,7 @@
case 'L':
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
fmt++;
val = "";
while (len >= sizeof(long)) {
@@ -469,7 +477,7 @@
case 'P':
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
printf("%p", *(void **)p);
return (0);
@@ -488,7 +496,7 @@
func = NULL;
if (func) {
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
return ((*func)(len, p));
}
/* FALL THROUGH */
@@ -496,7 +504,7 @@
if (!oflag && !xflag)
return (1);
if (!nflag)
- printf("%s: ", name);
+ printf("%s%s", name, sep);
printf("Format:%s Length:%d Dump:0x", fmt, len);
while (len-- && (xflag || p < val + 16))
printf("%02x", *p++);
=Anton.
--
| Anton Berezin | FreeBSD: The power to serve |
| catpipe Systems ApS _ _ |_ | http://www.FreeBSD.org |
| tobez@catpipe.net (_(_|| | tobez@FreeBSD.org |
| +45 7021 0050 | Private: tobez@tobez.org |
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011029223004.B50609>
