diff options
author | cvs2svn <cvs2svn@FreeBSD.org> | 1999-02-16 01:59:46 +0000 |
---|---|---|
committer | cvs2svn <cvs2svn@FreeBSD.org> | 1999-02-16 01:59:46 +0000 |
commit | bcb29ac16cc991f99f0c976390dff6be1a1b9058 (patch) | |
tree | ea5e3b237aafbf9d5ae15bc5abb0faaa102742d6 /sbin | |
parent | 496747cdd475144f5df2af67677fad487337c6e8 (diff) |
Notes
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/mount_ntfs/Makefile | 13 | ||||
-rw-r--r-- | sbin/mount_ntfs/mount_ntfs.c | 240 | ||||
-rw-r--r-- | sbin/natd/README | 53 | ||||
-rw-r--r-- | sbin/natd/samples/natd.cf.sample | 94 | ||||
-rw-r--r-- | sbin/natd/samples/natd.test | 14 | ||||
-rw-r--r-- | sbin/sysctl/Makefile | 10 | ||||
-rw-r--r-- | sbin/sysctl/pathconf.c | 240 | ||||
-rw-r--r-- | sbin/sysctl/sysctl.8 | 243 | ||||
-rw-r--r-- | sbin/sysctl/sysctl.c | 502 |
9 files changed, 0 insertions, 1409 deletions
diff --git a/sbin/mount_ntfs/Makefile b/sbin/mount_ntfs/Makefile deleted file mode 100644 index ba8005b20c079..0000000000000 --- a/sbin/mount_ntfs/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# $Id: Makefile,v 1.2 1999/01/30 05:06:53 semen Exp $ -# - -PROG= mount_ntfs -SRCS= mount_ntfs.c getmntopts.c -MAN8= mount_ntfs.8 - -MOUNT= ${.CURDIR}/../mount -CFLAGS+= -I${.CURDIR}/../../sys -I${MOUNT} -.PATH: ${MOUNT} - -.include <bsd.prog.mk> diff --git a/sbin/mount_ntfs/mount_ntfs.c b/sbin/mount_ntfs/mount_ntfs.c deleted file mode 100644 index 43ed49f97ff78..0000000000000 --- a/sbin/mount_ntfs/mount_ntfs.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * Copyright (c) 1999 Semen Ustimenko - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id: mount_ntfs.c,v 1.2 1999/02/02 01:47:22 semen Exp $ - * - */ - -#include <sys/cdefs.h> -#include <sys/param.h> -#define NTFS -#include <sys/mount.h> -#include <sys/stat.h> -#include <ntfs/ntfsmount.h> -#include <ctype.h> -#include <err.h> -#include <grp.h> -#include <pwd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sysexits.h> -#include <unistd.h> - -#include "mntopts.h" - -static struct mntopt mopts[] = { - MOPT_STDOPTS, - { NULL } -}; - -static gid_t a_gid __P((char *)); -static uid_t a_uid __P((char *)); -static mode_t a_mask __P((char *)); -static void usage __P((void)) __dead2; - -int -main(argc, argv) - int argc; - char **argv; -{ - struct ntfs_args args; - struct stat sb; - int c, mntflags, set_gid, set_uid, set_mask,error; - char *dev, *dir, ndir[MAXPATHLEN+1]; -#if __FreeBSD_version >= 300000 - struct vfsconf vfc; -#else - struct vfsconf *vfc; -#endif - - mntflags = set_gid = set_uid = set_mask = 0; - (void)memset(&args, '\0', sizeof(args)); - - while ((c = getopt(argc, argv, "aiu:g:m:o:")) != -1) { - switch (c) { - case 'u': - args.uid = a_uid(optarg); - set_uid = 1; - break; - case 'g': - args.gid = a_gid(optarg); - set_gid = 1; - break; - case 'm': - args.mode = a_mask(optarg); - set_mask = 1; - break; - case 'i': - args.flag |= NTFS_MFLAG_CASEINS; - break; - case 'a': - args.flag |= NTFS_MFLAG_ALLNAMES; - break; - case 'o': - getmntopts(optarg, mopts, &mntflags, 0); - break; - case '?': - default: - usage(); - break; - } - } - - if (optind + 2 != argc) - usage(); - - dev = argv[optind]; - dir = argv[optind + 1]; - if (dir[0] != '/') { - warnx("\"%s\" is a relative path", dir); - if (getcwd(ndir, sizeof(ndir)) == NULL) - err(EX_OSERR, "getcwd"); - strncat(ndir, "/", sizeof(ndir) - strlen(ndir) - 1); - strncat(ndir, dir, sizeof(ndir) - strlen(ndir) - 1); - dir = ndir; - warnx("using \"%s\" instead", dir); - } - - args.fspec = dev; - args.export.ex_root = 65534; /* unchecked anyway on DOS fs */ - if (mntflags & MNT_RDONLY) - args.export.ex_flags = MNT_EXRDONLY; - else - args.export.ex_flags = 0; - if (!set_gid || !set_uid || !set_mask) { - if (stat(dir, &sb) == -1) - err(EX_OSERR, "stat %s", dir); - - if (!set_uid) - args.uid = sb.st_uid; - if (!set_gid) - args.gid = sb.st_gid; - if (!set_mask) - args.mode = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); - } - -#if __FreeBSD_version >= 300000 - error = getvfsbyname("ntfs", &vfc); - if(error && vfsisloadable("ntfs")) { - if(vfsload("ntfs")) -#else - vfc = getvfsbyname("ntfs"); - if(!vfc && vfsisloadable("ntfs")) { - if(vfsload("ntfs")) -#endif - err(EX_OSERR, "vfsload(ntfs)"); - endvfsent(); /* clear cache */ -#if __FreeBSD_version >= 300000 - error = getvfsbyname("ntfs", &vfc); -#else - vfc = getvfsbyname("ntfs"); -#endif - } -#if __FreeBSD_version >= 300000 - if (error) -#else - if (!vfc) -#endif - errx(EX_OSERR, "ntfs filesystem is not available"); - -#if __FreeBSD_version >= 300000 - if (mount(vfc.vfc_name, dir, mntflags, &args) < 0) -#else - if (mount(vfc->vfc_index, dir, mntflags, &args) < 0) -#endif - err(EX_OSERR, "%s", dev); - - exit (0); -} - -gid_t -a_gid(s) - char *s; -{ - struct group *gr; - char *gname; - gid_t gid; - - if ((gr = getgrnam(s)) != NULL) - gid = gr->gr_gid; - else { - for (gname = s; *s && isdigit(*s); ++s); - if (!*s) - gid = atoi(gname); - else - errx(EX_NOUSER, "unknown group id: %s", gname); - } - return (gid); -} - -uid_t -a_uid(s) - char *s; -{ - struct passwd *pw; - char *uname; - uid_t uid; - - if ((pw = getpwnam(s)) != NULL) - uid = pw->pw_uid; - else { - for (uname = s; *s && isdigit(*s); ++s); - if (!*s) - uid = atoi(uname); - else - errx(EX_NOUSER, "unknown user id: %s", uname); - } - return (uid); -} - -mode_t -a_mask(s) - char *s; -{ - int done, rv=0; - char *ep; - - done = 0; - if (*s >= '0' && *s <= '7') { - done = 1; - rv = strtol(optarg, &ep, 8); - } - if (!done || rv < 0 || *ep) - errx(EX_USAGE, "invalid file mode: %s", s); - return (rv); -} - -void -usage() -{ - fprintf(stderr, "usage: mount_ntfs [-a] [-i] [-u user] [-g group] [-m mask] bdev dir\n"); - exit(EX_USAGE); -} diff --git a/sbin/natd/README b/sbin/natd/README deleted file mode 100644 index 6c158d5e4ca15..0000000000000 --- a/sbin/natd/README +++ /dev/null @@ -1,53 +0,0 @@ - - A Network Address Translation Daemon for FreeBSD - - -1. WHAT IS NATD ? - - This is a simple daemon based on FreeBSD divert sockets - which performs network address translation (or masquerading) - for IP packets (see related RFCs 1631 and 1918). - It is based on packet aliasing package (see README.alias) - written by Charles Mott (cmott@srv.net). - - This package works with any network interface (doesn't have - to be ppp). I run it on a computer having two ethernet cards, - one connected to internet and the other one to local network. - -2. GETTING IT RUNNING - - 1) Get FreeBSD 2.2 - I think the divert sockets are - not available on earlier versions, - - 2) Compile this software by executing "make". - - 3) Install the software by executing "make install". - - 4) See man natd for further instructions. - -3. FTP SITES FOR NATD - - This package is available at ftp://ftp.suutari.iki.fi/pub/natd. - -4. AUTHORS - - This program is the result of the efforts of many people - at different times: - - Archie Cobbs <archie@whistle.com> Divert sockets - Charles Mott <cmott@srv.net> Packet aliasing engine - Eivind Eklund <eivind@dimaga.com> Packet aliasing engine - Ari Suutari <suutari@iki.fi> Natd - Brian Somers <brian@awfulhak.org> Manual page, glue and - bunch of good ideas. - - The original package written by Charles Mott - is available at http://www.srv.net/~cmott. - It is described in README.alias. - - Happy Networking - comments and fixes are welcome! - - Ari S. (suutari@iki.fi) - - - diff --git a/sbin/natd/samples/natd.cf.sample b/sbin/natd/samples/natd.cf.sample deleted file mode 100644 index df1018b7e2d34..0000000000000 --- a/sbin/natd/samples/natd.cf.sample +++ /dev/null @@ -1,94 +0,0 @@ -# -# $Id:$ -# -# -# Configuration file for natd. -# -# -# Enable logging to file /var/log/alias.log -# -log no -# -# Incoming connections. Should NEVER be set to "yes" if redirect_port, -# redirect_address, or permanent_link statements are activated in this file! -# -# Setting to yes provides additional anti-crack protection -# -deny_incoming no -# -# Use sockets to avoid port clashes. Uses additional system resources, but -# guarantees successful connections when port numbers conflict -# -use_sockets no -# -# Avoid port changes if possible when altering outbound packets. Makes rlogin -# work in most cases. -# -same_port yes -# -# Verbose mode. Enables dumping of packets and disables -# forking to background. Only set to yes for debugging. -# -verbose no -# -# Divert port. Can be a name in /etc/services or numeric value. -# -port 32000 -# -# Interface name or address being aliased. Either one, -# not both is required. -# -# Obtain interface name from the command output of "ifconfig -a" -# -# alias_address 192.168.0.1 -interface ep0 -# -# Alias unregistered addresses or all addresses. Set this to yes if -# the inside network is all RFC1918 addresses. -# -unregistered_only no -# -# Configure permanent links. If you use host names instead -# of addresses here, be sure that name server works BEFORE -# natd is up - this is usually not the case. So either use -# numeric addresses or hosts that are in /etc/hosts. -# -# Note: Current versions of FreeBSD all call /etc/rc.firewall -# BEFORE running named, so if the DNS server and NAT are on the same -# machine, the nameserver won't be up if natd is called from /etc/rc.firewall -# -# Map connections coming to port 30000 to telnet in my_private_host. -# Remember to allow the connection /etc/rc.firewall also. -# -# The following permanent_link and redirect_port statements are equivalent -#permanent_link tcp my_private_host:telnet 0.0.0.0:0 30000 -#redirect_port tcp my_private_host:telnet 30000 -# -# Map connections coming from host.xyz.com to port 30001 to -# telnet in another_host. -#permanent_link tcp another_host:telnet host.xyz.com:0 30001 -# -# Static NAT address mapping: -# -# ipconfig must apply any legal IP numbers that inside hosts -# will be known by to the outside interface. These are sometimes known as -# virtual IP numbers. It's suggested to use the "interface" directive -# instead of the "alias_address" directive to make it more clear what is -# going on. (although both will work) -# -# DNS in this situation can get hairy. For example, an inside host -# named aweb.company.com is located at 192.168.1.56, and needs to be -# accessible through a legal IP number like 198.105.232.1. If both -# 192.168.1.56 and 198.105.232.1 are set up as address records in the DNS -# for aweb.company.com, then external hosts attempting to access -# aweb.company.com may use address 192.168.1.56 which is inaccessible to them. -# -# The obvious solution is to use only a single address for the name, the -# outside address. However, this creates needless traffic through the -# NAT, because inside hosts will go through the NAT to get to the legal -# number, even when the inside number is on the same subnet as they are! -# -# It's probably not a good idea to use DNS names in redirect_address statements -# -#The following mapping points outside address 198.105.232.1 to 192.168.1.56 -#redirect_address 192.168.1.56 198.105.232.1 diff --git a/sbin/natd/samples/natd.test b/sbin/natd/samples/natd.test deleted file mode 100644 index cfdbd15aa6e28..0000000000000 --- a/sbin/natd/samples/natd.test +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - - if [ $# != 1 ] - then - echo "usage: natd.test ifname" - exit 1 - fi - - ipfw flush - ipfw add divert 32000 ip from any to any via $1 - ipfw add pass ip from any to any - - ./natd -port 32000 -interface $1 -verbose - diff --git a/sbin/sysctl/Makefile b/sbin/sysctl/Makefile deleted file mode 100644 index e0c6a2238d457..0000000000000 --- a/sbin/sysctl/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 6/6/93 -# $Id$ - -PROG= sysctl -MAN8= sysctl.8 - -BINDIR= /sbin -NOSHARED?= yes - -.include <bsd.prog.mk> diff --git a/sbin/sysctl/pathconf.c b/sbin/sysctl/pathconf.c deleted file mode 100644 index 07f786d820863..0000000000000 --- a/sbin/sysctl/pathconf.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pathconf.c 8.1 (Berkeley) 6/6/93"; -#endif -static const char rcsid[] = - "$Id$"; -#endif /* not lint */ - -#include <sys/param.h> -#include <sys/sysctl.h> -#include <sys/unistd.h> - -#include <err.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#define PC_NAMES { \ - { 0, 0 }, \ - { "link_max", CTLTYPE_INT }, \ - { "max_canon", CTLTYPE_INT }, \ - { "max_input", CTLTYPE_INT }, \ - { "name_max", CTLTYPE_INT }, \ - { "path_max", CTLTYPE_INT }, \ - { "pipe_buf", CTLTYPE_INT }, \ - { "chown_restricted", CTLTYPE_INT }, \ - { "no_trunc", CTLTYPE_INT }, \ - { "vdisable", CTLTYPE_INT }, \ -} -#define PC_MAXID 10 - -struct ctlname pcnames[] = PC_NAMES; -char names[BUFSIZ]; - -struct list { - struct ctlname *list; - int size; -}; -struct list pclist = { pcnames, PC_MAXID }; - -int Aflag, aflag, nflag, wflag, stdinflag; - -int findname __P((char *, char *, char**, struct list *)); -void listall __P((char *, struct list *)); -void parse __P((char *, char *, int)); -static void usage __P((void)); - -int -main(argc, argv) - int argc; - char *argv[]; -{ - char *path; - int ch; - - while ((ch = getopt(argc, argv, "Aan")) != -1) { - switch (ch) { - - case 'A': - Aflag = 1; - break; - - case 'a': - aflag = 1; - break; - - case 'n': - nflag = 1; - break; - - default: - usage(); - } - } - argc -= optind; - argv += optind; - - if (argc == 0) - usage(); - path = *argv++; - if (strcmp(path, "-") == 0) - stdinflag = 1; - argc--; - if (Aflag || aflag) { - listall(path, &pclist); - exit(0); - } - if (argc == 0) - usage(); - while (argc-- > 0) - parse(path, *argv, 1); - exit(0); -} - -/* - * List all variables known to the system. - */ -void -listall(path, lp) - char *path; - struct list *lp; -{ - int lvl2; - - if (lp->list == 0) - return; - for (lvl2 = 0; lvl2 < lp->size; lvl2++) { - if (lp->list[lvl2].ctl_name == 0) - continue; - parse(path, lp->list[lvl2].ctl_name, Aflag); - } -} - -/* - * Parse a name into an index. - * Lookup and print out the attribute if it exists. - */ -void -parse(pathname, string, flags) - char *pathname; - char *string; - int flags; -{ - int indx, value; - char *bufp, buf[BUFSIZ]; - - bufp = buf; - snprintf(buf, BUFSIZ, "%s", string); - if ((indx = findname(string, "top", &bufp, &pclist)) == -1) - return; - if (bufp) { - warnx("name %s in %s is unknown", *bufp, string); - return; - } - if (stdinflag) - value = fpathconf(0, indx); - else - value = pathconf(pathname, indx); - if (value == -1) { - if (flags == 0) - return; - switch (errno) { - case EOPNOTSUPP: - warnx("%s: value is not available", string); - return; - case ENOTDIR: - warnx("%s: specification is incomplete", string); - return; - case ENOMEM: - warnx("%s: type is unknown to this program", string); - return; - default: - warn("%s", string); - return; - } - } - if (!nflag) - fprintf(stdout, "%s = ", string); - fprintf(stdout, "%d\n", value); -} - -/* - * Scan a list of names searching for a particular name. - */ -int -findname(string, level, bufp, namelist) - char *string; - char *level; - char **bufp; - struct list *namelist; -{ - char *name; - int i; - - if (namelist->list == 0 || (name = strsep(bufp, ".")) == NULL) { - warnx("%s: incomplete specification", string); - return (-1); - } - for (i = 0; i < namelist->size; i++) - if (namelist->list[i].ctl_name != NULL && - strcmp(name, namelist->list[i].ctl_name) == 0) - break; - if (i == namelist->size) { - warnx("%s level name %s in %s is invalid", level, name, string); - return (-1); - } - return (i); -} - -static void -usage() -{ - - (void)fprintf(stderr, "%s\n%s\n%s\n", - "usage: pathname [-n] variable ...", - " pathname [-n] -a", - " pathname [-n] -A"); - exit(1); -} diff --git a/sbin/sysctl/sysctl.8 b/sbin/sysctl/sysctl.8 deleted file mode 100644 index e959ecd77aff2..0000000000000 --- a/sbin/sysctl/sysctl.8 +++ /dev/null @@ -1,243 +0,0 @@ -.\" Copyright (c) 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" From: @(#)sysctl.8 8.1 (Berkeley) 6/6/93 -.\" $Id: sysctl.8,v 1.17 1998/09/29 02:01:06 jkoshy Exp $ -.\" -.Dd September 23, 1994 -.Dt SYSCTL 8 -.Os -.Sh NAME -.Nm sysctl -.Nd get or set kernel state -.Sh SYNOPSIS -.Nm sysctl -.Op Fl bdn -.Ar name ... -.Nm sysctl -.Op Fl bn -.Fl w -.Ar name=value ... -.Nm sysctl -.Op Fl bdn -.Fl aAX -.Sh DESCRIPTION -The -.Nm -utility retrieves kernel state and allows processes with -appropriate privilege to set kernel state. -The state to be retrieved or set is described using a -``Management Information Base'' (``MIB'') style name, -described as a dotted set of components. -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl a -List all the currently available string or integer values. -.It Fl A -List all the known MIB names including opaques. -Those with string or integer values will be printed as with the -.Fl a -flag; for the opaque values, -information about the format and the length is printed in addition the first -few bytes is dumped in hex. -.It Fl X -Same as -.Fl A -except the entire value of opaque variables is hexdumped. -.It Fl n -Specify that the printing of the field name should be -suppressed and that only its value should be output. -This flag is useful for setting shell variables. -For example, to save the pagesize in variable psize, use: -.Bd -literal -offset indent -compact -set psize=`sysctl -n hw.pagesize` -.Ed -.It Fl b -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 d -Display the description rather than the value of the requested -variable(s). -.It Fl w Ar name=value ... -Set the MIB -.Ar name -to the new -.Ar value . -If just a MIB style -.Ar name -is given, -the corresponding value is retrieved. -.El -.Pp -The information available from -.Nm -consists of integers, strings, and opaques. -.Nm Sysctl -only knows about a couple of opaque types, and will resort to hexdumps -for the rest. -The opaque information is much more useful if retrieved by special -purpose programs such as -.Nm ps , -.Nm systat , -and -.Nm netstat . -.Pp -The string and integer information is summarized below. -For a detailed description of these variable see -.Xr sysctl 3 . -.Pp -The changeable column indicates whether a process with appropriate -privilege can change the value. -.Bl -column net.inet.ip.forwardingxxxxxx integerxxx -.It Sy Name Type Changeable -.It kern.ostype string no -.It kern.osrelease string no -.It kern.osrevision integer no -.It kern.version string no -.It kern.maxvnodes integer yes -.It kern.maxproc integer no -.It kern.maxprocperuid integer yes -.It kern.maxfiles integer yes -.It kern.maxfilesperproc integer yes -.It kern.argmax integer no -.It kern.securelevel integer raise only -.It kern.hostname string yes -.It kern.hostid integer yes -.It kern.clockrate struct no -.It kern.posix1version integer no -.It kern.ngroups integer no -.It kern.job_control integer no -.It kern.saved_ids integer no -.It kern.boottime struct no -.It kern.domainname string yes -.It kern.update integer yes -.It kern.osreldate string no -.It kern.bootfile string yes -.It kern.corefile string yes -.It kern.logsigexit integer yes -.It vm.loadavg struct no -.It hw.machine string no -.It hw.model string no -.It hw.ncpu integer no -.It hw.byteorder integer no -.It hw.physmem integer no -.It hw.usermem integer no -.It hw.pagesize integer no -.It hw.floatingpoint integer no -.It hw.machine_arch string no -.It machdep.console_device dev_t no -.It machdep.adjkerntz integer yes -.It machdep.disable_rtc_set integer yes -.It user.cs_path string no -.It user.bc_base_max integer no -.It user.bc_dim_max integer no -.It user.bc_scale_max integer no -.It user.bc_string_max integer no -.It user.coll_weights_max integer no -.It user.expr_nest_max integer no -.It user.line_max integer no -.It user.re_dup_max integer no -.It user.posix2_version integer no -.It user.posix2_c_bind integer no -.It user.posix2_c_dev integer no -.It user.posix2_char_term integer no -.It user.posix2_fort_dev integer no -.It user.posix2_fort_run integer no -.It user.posix2_localedef integer no -.It user.posix2_sw_dev integer no -.It user.posix2_upe integer no -.It user.stream_max integer no -.It user.tzname_max integer no -.El -.Sh EXAMPLES -For example, to retrieve the maximum number of processes allowed -in the system, one would use the follow request: -.Bd -literal -offset indent -compact -sysctl kern.maxproc -.Ed -.Pp -To set the maximum number of processes allowed -per uid to 1000, one would use the follow request: -.Bd -literal -offset indent -compact -sysctl -w kern.maxprocperuid=1000 -.Ed -.Pp -Information about the system clock rate may be obtained with: -.Bd -literal -offset indent -compact -sysctl kern.clockrate -.Ed -.Pp -Information about the load average history may be obtained with: -.Bd -literal -offset indent -compact -sysctl vm.loadavg -.Ed -.Pp -More variables than these exist, and the best and likely only place -to search for their deeper meaning is undoubtedly the source where -they are defined. -.Sh FILES -.Bl -tag -width <netinet/icmpXvar.h> -compact -.It Pa <sys/sysctl.h> -definitions for top level identifiers, second level kernel and hardware -identifiers, and user level identifiers -.It Pa <sys/socket.h> -definitions for second level network identifiers -.It Pa <sys/gmon.h> -definitions for third level profiling identifiers -.It Pa <vm/vm_param.h> -definitions for second level virtual memory identifiers -.It Pa <netinet/in.h> -definitions for third level Internet identifiers and -fourth level IP identifiers -.It Pa <netinet/icmp_var.h> -definitions for fourth level ICMP identifiers -.It Pa <netinet/udp_var.h> -definitions for fourth level UDP identifiers -.El -.Sh SEE ALSO -.Xr sysctl 3 -.Sh BUGS -.Nm Sysctl -presently exploits an undocumented interface to the kernel -sysctl facility to traverse the sysctl tree and to retrieve format -and name information. -This correct interface is being thought about for the time being. -.Sh HISTORY -.Nm Sysctl -first appeared in -.Bx 4.4 . -.Pp -In -.Fx 2.2 , -.Nm -was significantly remodeled. diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c deleted file mode 100644 index f264409d6b3d1..0000000000000 --- a/sbin/sysctl/sysctl.c +++ /dev/null @@ -1,502 +0,0 @@ -/* - * Copyright (c) 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)from: sysctl.c 8.1 (Berkeley) 6/6/93"; -#endif -static const char rcsid[] = - "$Id: sysctl.c,v 1.19 1998/11/08 19:27:43 phk Exp $"; -#endif /* not lint */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/sysctl.h> -#include <sys/resource.h> - -#include <ctype.h> -#include <err.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static int Aflag, aflag, bflag, dflag, nflag, wflag, Xflag; - -static int oidfmt(int *, int, char *, u_int *); -static void parse(char *); -static int show_var(int *, int); -static int sysctl_all (int *oid, int len); -static int name2oid(char *, int *); - -static void -usage(void) -{ - - (void)fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", - "usage: sysctl [-bdn] variable ...", - " sysctl [-bn] -w variable=value ...", - " sysctl [-bdn] -a", - " sysctl [-bdn] -A", - " sysctl [-bdn] -X"); - exit(1); -} - -int -main(int argc, char **argv) -{ - int ch; - setbuf(stdout,0); - setbuf(stderr,0); - - while ((ch = getopt(argc, argv, "AabdnwX")) != -1) { - switch (ch) { - case 'A': Aflag = 1; break; - case 'a': aflag = 1; break; - case 'b': bflag = 1; break; - case 'd': dflag = 1; break; - case 'n': nflag = 1; break; - case 'w': wflag = 1; break; - case 'X': Xflag = Aflag = 1; break; - default: usage(); - } - } - argc -= optind; - argv += optind; - - if (wflag && (Aflag || aflag || dflag)) - usage(); - if (Aflag || aflag) - exit (sysctl_all(0, 0)); - if (argc == 0) - usage(); - while (argc-- > 0) - parse(*argv++); - exit(0); -} - -/* - * Parse a name into a MIB entry. - * Lookup and print out the MIB entry if it exists. - * Set a new value if requested. - */ -static void -parse(char *string) -{ - int len, i, j; - void *newval = 0; - int intval, newsize = 0; - quad_t quadval; - int mib[CTL_MAXNAME]; - char *cp, *bufp, buf[BUFSIZ]; - u_int kind; - - bufp = buf; - snprintf(buf, BUFSIZ, "%s", string); - if ((cp = strchr(string, '=')) != NULL) { - if (!wflag) - errx(2, "must specify -w to set variables"); - *strchr(buf, '=') = '\0'; - *cp++ = '\0'; - while (isspace(*cp)) - cp++; - newval = cp; - newsize = strlen(cp); - } else { - if (wflag) - usage(); - } - len = name2oid(bufp, mib); - - if (len < 0) - errx(1, "unknown oid '%s'", bufp); - - if (oidfmt(mib, len, 0, &kind)) - err(1, "couldn't find format of oid '%s'", bufp); - - if (!wflag) { - if ((kind & CTLTYPE) == CTLTYPE_NODE) { - sysctl_all(mib, len); - } else { - i = show_var(mib, len); - if (!i && !bflag) - putchar('\n'); - } - } else { - if ((kind & CTLTYPE) == CTLTYPE_NODE) - errx(1, "oid '%s' isn't a leaf node", bufp); - - if (!(kind&CTLFLAG_WR)) - errx(1, "oid '%s' is read only", bufp); - - switch (kind & CTLTYPE) { - case CTLTYPE_INT: - intval = atoi(newval); - newval = &intval; - newsize = sizeof intval; - break; - break; - case CTLTYPE_STRING: - break; - case CTLTYPE_QUAD: - break; - sscanf(newval, "%qd", &quadval); - newval = &quadval; - newsize = sizeof quadval; - break; - default: - errx(1, "oid '%s' is type %d," - " cannot set that", bufp, - kind & CTLTYPE); - } - - i = show_var(mib, len); - if (sysctl(mib, len, 0, 0, newval, newsize) == -1) { - if (!i && !bflag) - putchar('\n'); - switch (errno) { - case EOPNOTSUPP: - errx(1, "%s: value is not available", - string); - case ENOTDIR: - errx(1, "%s: specification is incomplete", - string); - case ENOMEM: - errx(1, "%s: type is unknown to this program", - string); - default: - warn("%s", string); - return; - } - } - if (!bflag) - printf(" -> "); - i = nflag; - nflag = 1; - j = show_var(mib, len); - if (!j && !bflag) - putchar('\n'); - nflag = i; - } -} - -/* These functions will dump out various interesting structures. */ - -static int -S_clockinfo(int l2, void *p) -{ - struct clockinfo *ci = (struct clockinfo*)p; - if (l2 != sizeof *ci) - err(1, "S_clockinfo %d != %d", l2, sizeof *ci); - printf("{ hz = %d, tick = %d, tickadj = %d, profhz = %d, stathz = %d }", - ci->hz, ci->tick, ci->tickadj, ci->profhz, ci->stathz); - return (0); -} - -static int -S_loadavg(int l2, void *p) -{ - struct loadavg *tv = (struct loadavg*)p; - - if (l2 != sizeof *tv) - err(1, "S_loadavg %d != %d", l2, sizeof *tv); - - printf("{ %.2f %.2f %.2f }", - (double)tv->ldavg[0]/(double)tv->fscale, - (double)tv->ldavg[1]/(double)tv->fscale, - (double)tv->ldavg[2]/(double)tv->fscale); - return (0); -} - -static int -S_timeval(int l2, void *p) -{ - struct timeval *tv = (struct timeval*)p; - time_t tv_sec; - char *p1, *p2; - - if (l2 != sizeof *tv) - err(1, "S_timeval %d != %d", l2, sizeof *tv); - printf("{ sec = %ld, usec = %ld } ", - tv->tv_sec, tv->tv_usec); - tv_sec = tv->tv_sec; - p1 = strdup(ctime(&tv_sec)); - for (p2=p1; *p2 ; p2++) - if (*p2 == '\n') - *p2 = '\0'; - fputs(p1, stdout); - return (0); -} - -static int -T_dev_t(int l2, void *p) -{ - dev_t *d = (dev_t *)p; - if (l2 != sizeof *d) - err(1, "T_dev_T %d != %d", l2, sizeof *d); - printf("{ major = %d, minor = %d }", - major(*d), minor(*d)); - return (0); -} - -/* - * These functions uses a presently undocumented interface to the kernel - * to walk the tree and get the type so it can print the value. - * This interface is under work and consideration, and should probably - * be killed with a big axe by the first person who can find the time. - * (be aware though, that the proper interface isn't as obvious as it - * may seem, there are various conflicting requirements. - */ - -static int -name2oid(char *name, int *oidp) -{ - int oid[2]; - int i; - size_t j; - - oid[0] = 0; - oid[1] = 3; - - j = CTL_MAXNAME * sizeof (int); - i = sysctl(oid, 2, oidp, &j, name, strlen(name)); - if (i < 0) - return i; - j /= sizeof (int); - return (j); -} - -static int -oidfmt(int *oid, int len, char *fmt, u_int *kind) -{ - int qoid[CTL_MAXNAME+2]; - u_char buf[BUFSIZ]; - int i; - size_t j; - - qoid[0] = 0; - qoid[1] = 4; - memcpy(qoid + 2, oid, len * sizeof(int)); - - j = sizeof buf; - i = sysctl(qoid, len + 2, buf, &j, 0, 0); - if (i) - err(1, "sysctl fmt %d %d %d", i, j, errno); - - if (kind) - *kind = *(u_int *)buf; - - if (fmt) - strcpy(fmt, (char *)(buf + sizeof(u_int))); - return 0; -} - -/* - * This formats and outputs the value of one variable - * - * Returns zero if anything was actually output. - * Returns one if didn't know what to do with this. - * Return minus one if we had errors. - */ - -static int -show_var(int *oid, int nlen) -{ - u_char buf[BUFSIZ], *val, *p; - char name[BUFSIZ], descr[BUFSIZ], *fmt; - int qoid[CTL_MAXNAME+2]; - int i; - size_t j, len; - u_int kind; - int (*func)(int, void *) = 0; - - qoid[0] = 0; - memcpy(qoid + 2, oid, nlen * sizeof(int)); - - qoid[1] = 1; - j = sizeof name; - i = sysctl(qoid, nlen + 2, name, &j, 0, 0); - if (i || !j) - err(1, "sysctl name %d %d %d", i, j, errno); - - if (dflag) { - qoid[1] = 5; - j = sizeof descr; - i = sysctl(qoid, nlen + 2, descr, &j, 0, 0); - if (i || !j) - err(1, "sysctl name %d %d %d", i, j, errno); - if (!nflag) - printf("%s: ", name); - printf("%s", descr[0] ? descr : "[no description]"); - return (0); - } - - /* find an estimate of how much we need for this var */ - j = 0; - i = sysctl(oid, nlen, 0, &j, 0, 0); - j += j; /* we want to be sure :-) */ - - val = alloca(j); - len = j; - i = sysctl(oid, nlen, val, &len, 0, 0); - if (i || !len) - return (1); - - if (bflag) { - fwrite(val, 1, len, stdout); - return (0); - } - - qoid[1] = 4; - j = sizeof buf; - i = sysctl(qoid, nlen + 2, buf, &j, 0, 0); - if (i || !j) - err(1, "sysctl fmt %d %d %d", i, j, errno); - - kind = *(u_int *)buf; - - fmt = (char *)(buf + sizeof(u_int)); - - p = val; - switch (*fmt) { - case 'A': - if (!nflag) - printf("%s: ", name); - printf("%s", p); - return (0); - - case 'I': - if (!nflag) - printf("%s: ", name); - val = ""; - while (len >= sizeof(int)) { - printf("%s%d", val, *(int *)p); - val = " "; - len -= sizeof (int); - p += sizeof (int); - } - return (0); - - case 'L': - if (!nflag) - printf("%s: ", name); - printf("%ld", *(long *)p); - return (0); - - case 'P': - if (!nflag) - printf("%s: ", name); - printf("%p", *(void **)p); - return (0); - - case 'T': - case 'S': - i = 0; - if (!strcmp(fmt, "S,clockinfo")) func = S_clockinfo; - else if (!strcmp(fmt, "S,timeval")) func = S_timeval; - else if (!strcmp(fmt, "S,loadavg")) func = S_loadavg; - else if (!strcmp(fmt, "T,dev_t")) func = T_dev_t; - if (func) { - if (!nflag) - printf("%s: ", name); - return ((*func)(len, p)); - } - /* FALL THROUGH */ - default: - if (!Aflag) - return (1); - if (!nflag) - printf("%s: ", name); - printf("Format:%s Length:%d Dump:0x", fmt, len); - while (len--) { - printf("%02x", *p++); - if (Xflag || p < val+16) - continue; - printf("..."); - break; - } - return (0); - } - return (1); -} - -static int -sysctl_all (int *oid, int len) -{ - int name1[22], name2[22]; - int i, j; - size_t l1, l2; - - name1[0] = 0; - name1[1] = 2; - l1 = 2; - if (len) { - memcpy(name1+2, oid, len*sizeof (int)); - l1 += len; - } else { - name1[2] = 1; - l1++; - } - while (1) { - l2 = sizeof name2; - j = sysctl(name1, l1, name2, &l2, 0, 0); - if (j < 0) - if (errno == ENOENT) - return 0; - else - err(1, "sysctl(getnext) %d %d", j, l2); - - l2 /= sizeof (int); - - if (l2 < len) - return 0; - - for (i = 0; i < len; i++) - if (name2[i] != oid[i]) - return 0; - - i = show_var(name2, l2); - if (!i && !bflag) - putchar('\n'); - - memcpy(name1+2, name2, l2*sizeof (int)); - l1 = 2 + l2; - } -} |