summaryrefslogtreecommitdiff
path: root/sbin/sysctl/sysctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/sysctl/sysctl.c')
-rw-r--r--sbin/sysctl/sysctl.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c
index 1fb3dec337f..bcb0c60d46f 100644
--- a/sbin/sysctl/sysctl.c
+++ b/sbin/sysctl/sysctl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sysctl.c,v 1.157 2008/04/28 11:52:53 norby Exp $ */
+/* $OpenBSD: sysctl.c,v 1.158 2008/07/09 20:20:46 djm Exp $ */
/* $NetBSD: sysctl.c,v 1.9 1995/09/30 07:12:50 thorpej Exp $ */
/*
@@ -40,7 +40,7 @@ static const char copyright[] =
#if 0
static const char sccsid[] = "@(#)sysctl.c 8.5 (Berkeley) 5/9/95";
#else
-static const char rcsid[] = "$OpenBSD: sysctl.c,v 1.157 2008/04/28 11:52:53 norby Exp $";
+static const char rcsid[] = "$OpenBSD: sysctl.c,v 1.158 2008/07/09 20:20:46 djm Exp $";
#endif
#endif /* not lint */
@@ -144,6 +144,9 @@ struct ctlname ddbname[] = CTL_DDB_NAMES;
char names[BUFSIZ];
int lastused;
+/* Maximum size object to expect from sysctl(3) */
+#define SYSCTL_BUFSIZ 8192
+
struct list {
struct ctlname *list;
int size;
@@ -311,7 +314,7 @@ parse(char *string, int flags)
int64_t quadval;
struct list *lp;
int mib[CTL_MAXNAME];
- char *cp, *bufp, buf[BUFSIZ];
+ char *cp, *bufp, buf[SYSCTL_BUFSIZ];
(void)strlcpy(buf, string, sizeof(buf));
bufp = buf;
@@ -712,7 +715,7 @@ parse(char *string, int flags)
break;
}
}
- size = BUFSIZ;
+ size = SYSCTL_BUFSIZ;
if (sysctl(mib, len, buf, &size, newval, newsize) == -1) {
if (flags == 0)
return;
@@ -889,7 +892,7 @@ parse(char *string, int flags)
return;
}
if (special & BADDYNAMIC) {
- in_port_t port, lastport;
+ u_int port, lastport;
u_int32_t *baddynamic = (u_int32_t *)buf;
if (!qflag) {
@@ -897,10 +900,9 @@ parse(char *string, int flags)
(void)printf("%s%s", string,
newsize ? ": " : equ);
lastport = 0;
- for (port = IPPORT_RESERVED/2; port < IPPORT_RESERVED;
- port++)
+ for (port = 0; port < 65536; port++)
if (DP_ISSET(baddynamic, port)) {
- (void)printf("%s%hd",
+ (void)printf("%s%u",
lastport ? "," : "", port);
lastport = port;
}
@@ -909,10 +911,9 @@ parse(char *string, int flags)
fputs(" -> ", stdout);
baddynamic = (u_int32_t *)newval;
lastport = 0;
- for (port = IPPORT_RESERVED/2;
- port < IPPORT_RESERVED; port++)
+ for (port = 0; port < 65536; port++)
if (DP_ISSET(baddynamic, port)) {
- (void)printf("%s%hd",
+ (void)printf("%s%u",
lastport ? "," : "", port);
lastport = port;
}
@@ -1010,6 +1011,7 @@ parse_baddynamic(int mib[], size_t len, char *string, void **newvalp,
in_port_t port;
size_t size;
char action, *cp;
+ const char *errstr;
if (strchr((char *)*newvalp, '+') || strchr((char *)*newvalp, '-')) {
size = sizeof(newbaddynamic);
@@ -1026,10 +1028,9 @@ parse_baddynamic(int mib[], size_t len, char *string, void **newvalp,
if (*cp != '+' && *cp != '-')
errx(1, "cannot mix +/- with full list");
action = *cp++;
- port = atoi(cp);
- if (port < IPPORT_RESERVED/2 || port >= IPPORT_RESERVED)
- errx(1, "invalid port, range is %d to %d",
- IPPORT_RESERVED/2, IPPORT_RESERVED-1);
+ port = strtonum(cp, 0, 65535, &errstr);
+ if (errstr != NULL)
+ errx(1, "port is %s: %s", errstr, cp);
if (action == '+')
DP_SET(newbaddynamic, port);
else
@@ -1038,10 +1039,9 @@ parse_baddynamic(int mib[], size_t len, char *string, void **newvalp,
} else {
(void)memset((void *)newbaddynamic, 0, sizeof(newbaddynamic));
while (*newvalp && (cp = strsep((char **)newvalp, ", \t")) && *cp) {
- port = atoi(cp);
- if (port < IPPORT_RESERVED/2 || port >= IPPORT_RESERVED)
- errx(1, "invalid port, range is %d to %d",
- IPPORT_RESERVED/2, IPPORT_RESERVED-1);
+ port = strtonum(cp, 0, 65535, &errstr);
+ if (errstr != NULL)
+ errx(1, "port is %s: %s", errstr, cp);
DP_SET(newbaddynamic, port);
}
}
@@ -1741,7 +1741,7 @@ int
sysctl_malloc(char *string, char **bufpp, int mib[], int flags, int *typep)
{
int indx, stor, i;
- char *name, bufp[BUFSIZ], *buf, *ptr;
+ char *name, bufp[SYSCTL_BUFSIZ], *buf, *ptr;
struct list lp;
size_t size;
@@ -1754,7 +1754,7 @@ sysctl_malloc(char *string, char **bufpp, int mib[], int flags, int *typep)
mib[2] = indx;
if (mib[2] == KERN_MALLOC_BUCKET) {
if ((name = strsep(bufpp, ".")) == NULL) {
- size = BUFSIZ;
+ size = SYSCTL_BUFSIZ;
stor = mib[2];
mib[2] = KERN_MALLOC_BUCKETS;
buf = bufp;
@@ -1785,7 +1785,7 @@ sysctl_malloc(char *string, char **bufpp, int mib[], int flags, int *typep)
*typep = CTLTYPE_STRING;
return (3);
} else if (mib[2] == KERN_MALLOC_KMEMSTATS) {
- size = BUFSIZ;
+ size = SYSCTL_BUFSIZ;
stor = mib[2];
mib[2] = KERN_MALLOC_KMEMNAMES;
buf = bufp;
@@ -2184,7 +2184,7 @@ sysctl_sensors(char *string, char **bufpp, int mib[], int flags, int *typep)
size_t sdlen = sizeof(snsrdev);
if (*bufpp == NULL) {
- char buf[BUFSIZ];
+ char buf[SYSCTL_BUFSIZ];
/* scan all sensor devices */
for (dev = 0; dev < MAXSENSORDEVICES; dev++) {
@@ -2278,7 +2278,7 @@ sysctl_sensors(char *string, char **bufpp, int mib[], int flags, int *typep)
void
print_sensordev(char *string, int mib[], u_int mlen, struct sensordev *snsrdev)
{
- char buf[BUFSIZ];
+ char buf[SYSCTL_BUFSIZ];
enum sensor_type type;
if (mlen == 3) {