xref: /openbsd-src/sys/ddb/db_usrreq.c (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
1 /*	$OpenBSD: db_usrreq.c,v 1.4 2000/02/27 04:57:29 hugh Exp $	*/
2 
3 /*
4  * Copyright (c) 1996 Michael Shalayeff.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *	This product includes software developed by Michael Shalayeff.
17  * 4. The name of the author may not be used to endorse or promote products
18  *    derived from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include <sys/param.h>
33 #include <sys/types.h>
34 #include <sys/kernel.h>
35 #include <sys/proc.h>
36 #include <vm/vm.h>
37 #include <sys/sysctl.h>
38 
39 #include <ddb/db_var.h>
40 
41 extern int securelevel;
42 
43 int
44 ddb_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
45 	int	*name;
46 	u_int	namelen;
47 	void	*oldp;
48 	size_t	*oldlenp;
49 	void	*newp;
50 	size_t	newlen;
51 	struct proc *p;
52 {
53 	int error, ctlval;
54 
55 	/* All sysctl names at this level are terminal. */
56 	if (namelen != 1)
57 		return (ENOTDIR);
58 
59 	switch (name[0]) {
60 
61 	case DBCTL_RADIX:
62 		return sysctl_int(oldp, oldlenp, newp, newlen, &db_radix);
63 	case DBCTL_MAXWIDTH:
64 		return sysctl_int(oldp, oldlenp, newp, newlen, &db_max_width);
65 	case DBCTL_TABSTOP:
66 		return sysctl_int(oldp, oldlenp, newp, newlen, &db_tab_stop_width);
67 	case DBCTL_MAXLINE:
68 		return sysctl_int(oldp, oldlenp, newp, newlen, &db_max_line);
69 	case DBCTL_PANIC:
70 		ctlval = db_panic;
71 		if ((error = sysctl_int(oldp, oldlenp, newp, newlen, &ctlval)) ||
72 		    newp == NULL)
73 			return (error);
74 		if (ctlval != 1 && ctlval != 0)
75 			return (EINVAL);
76 		if (ctlval > db_panic && securelevel > 1)
77 			return (EPERM);
78 		db_panic = ctlval;
79 		return (0);
80 	case DBCTL_CONSOLE:
81 		ctlval = db_console;
82 		if ((error = sysctl_int(oldp, oldlenp, newp, newlen, &ctlval)) ||
83 		    newp == NULL)
84 			return (error);
85 		if (ctlval != 1 && ctlval != 0)
86 			return (EINVAL);
87 		if (ctlval > db_console && securelevel > 1)
88 			return (EPERM);
89 		db_console = ctlval;
90 		return (0);
91 	default:
92 		return (EOPNOTSUPP);
93 	}
94 	/* NOTREACHED */
95 }
96