summaryrefslogtreecommitdiff
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>1995-11-14 09:22:15 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>1995-11-14 09:22:15 +0000
commitf7152c81a0c7f26b7ffa398c7eff8762cb5df8a7 (patch)
tree4983c6984f6774e572b59f0676284e268d0448bb /sys/kern/kern_sysctl.c
parent395e673587ff1a0d9ee246b56281c8dc29d6d898 (diff)
Notes
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r--sys/kern/kern_sysctl.c55
1 files changed, 35 insertions, 20 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 3785294e5fca..414d75d9a079 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
- * $Id: kern_sysctl.c,v 1.42 1995/11/14 09:10:54 phk Exp $
+ * $Id: kern_sysctl.c,v 1.43 1995/11/14 09:17:32 phk Exp $
*/
/*
@@ -687,8 +687,6 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
size_t newlen;
struct proc *p;
{
- int error, level;
- dev_t ndumpdev;
/* all sysctl names at this level are terminal */
if (namelen != 1 && !(name[0] == KERN_PROC || name[0] == KERN_PROF
@@ -697,15 +695,6 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
switch (name[0]) {
- case KERN_SECURELVL:
- level = securelevel;
- if ((error = sysctl_int(oldp, oldlenp, newp, newlen, &level)) ||
- newp == NULL)
- return (error);
- if (level < securelevel && p->p_pid != 1)
- return (EPERM);
- securelevel = level;
- return (0);
case KERN_VNODE:
return (sysctl_vnode(oldp, oldlenp));
#ifdef GPROF
@@ -713,20 +702,46 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
return (sysctl_doprof(name + 1, namelen - 1, oldp, oldlenp,
newp, newlen));
#endif
- case KERN_DUMPDEV:
- ndumpdev = dumpdev;
- error = sysctl_struct(oldp, oldlenp, newp, newlen, &ndumpdev,
- sizeof ndumpdev);
- if (!error && ndumpdev != dumpdev) {
- error = setdumpdev(ndumpdev);
- }
- return error;
default:
return (EOPNOTSUPP);
}
/* NOTREACHED */
}
+static int
+sysctl_kern_securelvl SYSCTL_HANDLER_ARGS
+{
+ int error, level;
+
+ level = securelevel;
+ error = sysctl_handle_int(oidp, &level, 0, req);
+ if (error || !req->newptr)
+ return (error);
+ if (level < securelevel && req->p->p_pid != 1)
+ return (EPERM);
+ securelevel = level;
+ return (error);
+}
+
+SYSCTL_PROC(_kern, KERN_SECURELVL, securelevel, CTLTYPE_INT|CTLFLAG_RW,
+ 0, 0, sysctl_kern_securelvl, "");
+
+static int
+sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS
+{
+ int error;
+ dev_t ndumpdev;
+
+ ndumpdev = dumpdev;
+ error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req);
+ if (!error && ndumpdev != dumpdev) {
+ error = setdumpdev(ndumpdev);
+ }
+ return (error);
+}
+
+SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW,
+ 0, sizeof dumpdev, sysctl_kern_dumpdev, "");
/*
* hardware related system variables.
*/