summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/examples/tests/Makefile4
-rw-r--r--share/man/man4/alc.42
-rw-r--r--share/man/man4/unix.481
-rw-r--r--share/man/man7/build.713
-rw-r--r--share/mk/bsd.README21
-rw-r--r--share/mk/bsd.subdir.mk15
-rw-r--r--share/mk/bsd.sys.mk4
-rw-r--r--share/mk/bsd.test.mk20
-rw-r--r--share/mk/suite.test.mk77
-rw-r--r--share/tests/Makefile2
10 files changed, 155 insertions, 84 deletions
diff --git a/share/examples/tests/Makefile b/share/examples/tests/Makefile
index 387b806..a091b2d 100644
--- a/share/examples/tests/Makefile
+++ b/share/examples/tests/Makefile
@@ -2,11 +2,9 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/share/examples
-
SUBDIR= tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
-.PATH: ${.CURDIR:H:H:H}/tests
.include <bsd.test.mk>
diff --git a/share/man/man4/alc.4 b/share/man/man4/alc.4
index 1fff8ba..b1feab5 100644
--- a/share/man/man4/alc.4
+++ b/share/man/man4/alc.4
@@ -124,6 +124,8 @@ Atheros AR8172 PCI Express Fast Ethernet controller
Killer E2200 Gigabit Ethernet controller
.It
Killer E2400 Gigabit Ethernet controller
+.It
+Killer E2500 Gigabit Ethernet controller
.El
.Sh LOADER TUNABLES
Tunables can be set at the
diff --git a/share/man/man4/unix.4 b/share/man/man4/unix.4
index c53cc42..0e8470f 100644
--- a/share/man/man4/unix.4
+++ b/share/man/man4/unix.4
@@ -32,7 +32,7 @@
.\" @(#)unix.4 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd March 19, 2013
+.Dd February 3, 2017
.Dt UNIX 4
.Os
.Sh NAME
@@ -123,12 +123,12 @@ of a
or
.Xr sendto 2
must be writable.
-.Sh PASSING FILE DESCRIPTORS
+.Sh CONTROL MESSAGES
The
.Ux Ns -domain
sockets support the communication of
.Ux
-file descriptors through the use of the
+file descriptors and process credentials through the use of the
.Va msg_control
field in the
.Fa msg
@@ -136,13 +136,12 @@ argument to
.Xr sendmsg 2
and
.Xr recvmsg 2 .
-.Pp
-Any valid descriptor may be sent in a message.
-The file descriptor(s) to be passed are described using a
+The items to be passed are described using a
.Vt "struct cmsghdr"
that is defined in the include file
.In sys/socket.h .
-The type of the message is
+.Pp
+To send file descriptors, the type of the message is
.Dv SCM_RIGHTS ,
and the data portion of the messages is an array of integers
representing the file descriptors to be passed.
@@ -165,6 +164,39 @@ call.
Descriptors that are awaiting delivery, or that are
purposely not received, are automatically closed by the system
when the destination socket is closed.
+.Pp
+Credentials of the sending process can be transmitted explicitly using a
+control message of type
+.Dv SCM_CREDS
+with a data portion of type
+.Vt "struct cmsgcred" ,
+defined in
+.In sys/socket.h
+as follows:
+.Bd -literal
+struct cmsgcred {
+ pid_t cmcred_pid; /* PID of sending process */
+ uid_t cmcred_uid; /* real UID of sending process */
+ uid_t cmcred_euid; /* effective UID of sending process */
+ gid_t cmcred_gid; /* real GID of sending process */
+ short cmcred_ngroups; /* number of groups */
+ gid_t cmcred_groups[CMGROUP_MAX]; /* groups */
+};
+.Ed
+.Pp
+The sender should pass a zeroed buffer which will be filled in by the system.
+.Pp
+The group list is truncated to at most
+.Dv CMGROUP_MAX
+GIDs.
+.Pp
+The process ID
+.Fa cmcred_pid
+should not be looked up (such as via the
+.Dv KERN_PROC_PID
+sysctl) for making security decisions.
+The sending process could have exited and its process ID already been
+reused for a new process.
.Sh SOCKET OPTIONS
.Tn UNIX
domain sockets support a number of socket options which can be set with
@@ -180,7 +212,13 @@ or a
.Dv SOCK_STREAM
socket.
This option provides a mechanism for the receiver to
-receive the credentials of the process as a
+receive the credentials of the process calling
+.Xr write 2 ,
+.Xr send 2 ,
+.Xr sendto 2
+or
+.Xr sendmsg 2
+as a
.Xr recvmsg 2
control message.
The
@@ -205,6 +243,10 @@ struct sockcred {
};
.Ed
.Pp
+The current implementation truncates the group list to at most
+.Dv CMGROUP_MAX
+groups.
+.Pp
The
.Fn SOCKCREDSIZE
macro computes the size of the
@@ -225,7 +267,28 @@ On
and
.Dv SOCK_SEQPACKET
sockets credentials are passed only on the first read from a socket,
-then system clears the option on socket.
+then the system clears the option on the socket.
+.Pp
+This option and the above explicit
+.Vt "struct cmsgcred"
+both use the same value
+.Dv SCM_CREDS
+but incompatible control messages.
+If this option is enabled and the sender attached a
+.Dv SCM_CREDS
+control message with a
+.Vt "struct cmsgcred" ,
+it will be discarded and a
+.Vt "struct sockcred"
+will be included.
+.Pp
+Many setuid programs will
+.Xr write 2
+data at least partially controlled by the invoker,
+such as error messages.
+Therefore, a message accompanied by a particular
+.Fa sc_euid
+value should not be trusted as being from that user.
.It Dv LOCAL_CONNWAIT
Used with
.Dv SOCK_STREAM
diff --git a/share/man/man7/build.7 b/share/man/man7/build.7
index 912d146..d405e17 100644
--- a/share/man/man7/build.7
+++ b/share/man/man7/build.7
@@ -107,6 +107,16 @@ section below, and by the variables documented in
The following list provides the names and actions for the targets
supported by the build system:
.Bl -tag -width ".Cm cleandepend"
+.It Cm check
+Run tests for a given subdirectory.
+The default directory used is
+.Pa ${.OBJDIR} ,
+but the check directory can be changed with
+.Pa ${CHECKDIR} .
+.It Cm checkworld
+Run the
+.Fx
+test suite on installed world.
.It Cm clean
Remove any files created during the build process.
.It Cm cleandepend
@@ -653,6 +663,7 @@ make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
.Xr mergemaster 8 ,
.Xr portsnap 8 ,
.Xr reboot 8 ,
-.Xr shutdown 8
+.Xr shutdown 8 ,
+.Xr tests 7
.Sh AUTHORS
.An Mike W. Meyer Aq mwm@mired.org .
diff --git a/share/mk/bsd.README b/share/mk/bsd.README
index ea46202..6ec9716 100644
--- a/share/mk/bsd.README
+++ b/share/mk/bsd.README
@@ -492,6 +492,17 @@ It has seven targets:
all:
build the test programs.
+ check:
+ runs the test programs from CHECKDIR with kyua test.
+
+ The beforecheck and aftercheck targets will be invoked, if
+ defined, to execute commands before and after the realcheck
+ target has been executed, respectively.
+
+ The devel/kyua package must be installed before invoking this
+ target.
+
+ See CHECKDIR for more details.
clean:
remove the test programs and any object files.
cleandir:
@@ -510,12 +521,6 @@ It has seven targets:
run lint on the source files.
tags:
create a tags file for the source files.
- test:
- runs the test programs from the object directory; if the
- Makefile does not itself define the target test, the
- targets beforetest and aftertest may also be used to
- cause actions immediately before and after the test
- target is executed.
It sets/uses the following variables, among many others:
@@ -529,6 +534,10 @@ TESTSDIR Path to the installed tests. Must be a subdirectory of
${TESTSBASE}/${RELDIR:H} , e.g. /usr/tests/bin/ls when
included from bin/ls/tests .
+CHECKDIR The directory that 'make check' executes tests from.
+
+ The value of CHECKDIR defaults to .OBJDIR.
+
KYUAFILE If 'auto' (the default), generate a Kyuafile out of the
test programs defined in the Makefile. If 'yes', then a
manually-crafted Kyuafile must be supplied with the
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index 9d2eb17..82ff2e3 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -24,9 +24,9 @@
# This is a variant of install, which will
# put the stuff into the right "distribution".
#
-# afterinstall, all, all-man, beforeinstall, checkdpadd, clean,
+# afterinstall, all, all-man, beforeinstall, check, checkdpadd, clean,
# cleandepend, cleandir, cleanilinks depend, install, lint,
-# maninstall, manlint, obj, objlink, realinstall, regress, tags
+# maninstall, manlint, obj, objlink, realinstall, tags
#
.if !target(__<bsd.subdir.mk>__)
@@ -45,7 +45,7 @@ distribute: .MAKE
_SUBDIR: .USE .MAKE
.if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
- @${_+_}set -e; for entry in ${SUBDIR:N.WAIT}; do \
+ @${_+_}for entry in ${SUBDIR:N.WAIT}; do \
if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \
${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
edir=$${entry}.${MACHINE_ARCH}; \
@@ -70,9 +70,9 @@ ${SUBDIR:N.WAIT}: .PHONY .MAKE
# Work around parsing of .if nested in .for by putting .WAIT string into a var.
__wait= .WAIT
-.for __target in all all-man checkdpadd clean cleandepend cleandir \
+.for __target in all all-man check checkdpadd clean cleandepend cleandir \
cleanilinks depend distribute lint maninstall manlint obj objlink \
- realinstall regress tags ${SUBDIR_TARGETS}
+ realinstall tags ${SUBDIR_TARGETS}
.ifdef SUBDIR_PARALLEL
__subdir_targets=
.for __dir in ${SUBDIR}
@@ -86,8 +86,7 @@ __deps+= ${__target}_subdir_${__dep}
.endfor
${__target}_subdir_${__dir}: .PHONY .MAKE ${__deps}
.if !defined(NO_SUBDIR)
- @${_+_}set -e; \
- if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
+ @${_+_}if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
edir=${__dir}.${MACHINE_ARCH}; \
cd ${.CURDIR}/$${edir}; \
@@ -118,7 +117,7 @@ _sub.${__stage}${__target}: _SUBDIR
.endfor
.if !target(${__target})
${__target}: .MAKE
- ${_+_}set -e; cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
+ ${_+_}cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
.endif
.endfor
diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk
index b36e1ba..6a2db01 100644
--- a/share/mk/bsd.sys.mk
+++ b/share/mk/bsd.sys.mk
@@ -158,11 +158,11 @@ CFLAGS+= ${CWARNFLAGS} ${CWARNFLAGS.${.IMPSRC:T}}
# or expect to ever be up-to-date.
PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \
beforelinking build build-tools buildfiles buildincludes \
- checkdpadd clean cleandepend cleandir cleanobj configure \
+ check checkdpadd clean cleandepend cleandir cleanobj configure \
depend dependall distclean distribute exe extract \
html includes install installfiles installincludes lint \
obj objlink objs objwarn realall realdepend \
- realinstall regress subdir-all subdir-depend subdir-install \
+ realinstall subdir-all subdir-depend subdir-install \
tags whereobj
.if defined(PORTNAME)
diff --git a/share/mk/bsd.test.mk b/share/mk/bsd.test.mk
index 0809803..b2c8f91 100644
--- a/share/mk/bsd.test.mk
+++ b/share/mk/bsd.test.mk
@@ -68,11 +68,16 @@ _TESTS=
.include <plain.test.mk>
.include <tap.test.mk>
+# kyua automatically descends directories; only run make check on the
+# top-level directory
+.if !make(check)
.for ts in ${TESTS_SUBDIRS}
.if empty(SUBDIR:M${ts})
SUBDIR+= ${ts}
.endif
.endfor
+SUBDIR_PARALLEL= t
+.endif
# it is rare for test cases to have man pages
.if !defined(MAN)
@@ -83,18 +88,13 @@ MAN=
.include <suite.test.mk>
.endif
-.if !target(realtest)
-realtest: .PHONY
+.if !target(realcheck)
+realcheck: .PHONY
@echo "$@ not defined; skipping"
.endif
-test: .PHONY
-.ORDER: beforetest realtest
-test: beforetest realtest
-
-.if target(aftertest)
-.ORDER: realtest aftertest
-test: aftertest
-.endif
+beforecheck realcheck aftercheck check: .PHONY
+.ORDER: beforecheck realcheck aftercheck
+check: beforecheck realcheck aftercheck
.include <bsd.progs.mk>
diff --git a/share/mk/suite.test.mk b/share/mk/suite.test.mk
index 0d48950..90e1687 100644
--- a/share/mk/suite.test.mk
+++ b/share/mk/suite.test.mk
@@ -30,12 +30,19 @@ KYUAFILE?= auto
# Kyua as this is later encoded in the Kyuafile test program definitions.
#TEST_INTERFACE.<test-program>= interface-name
+# Metadata properties applicable to all test programs.
+#
+# All the variables for a test program defined in the Makefile are appended
+# to the test program's definition in the Kyuafile. This feature can be
+# used to avoid having to explicitly supply a Kyuafile in the source
+# directory, allowing the caller Makefile to rely on the KYUAFILE=auto
+# behavior defined here.
+#TEST_METADATA+= key="value"
+
# Per-test program metadata properties as a list of key/value pairs.
#
-# All the variables for a particular program are appended to the program's
-# definition in the Kyuafile. This feature can be used to avoid having to
-# explicitly supply a Kyuafile in the source directory, allowing the caller
-# Makefile to rely on the KYUAFILE=auto behavior defined here.
+# These per-test program settings _extend_ the values provided in the
+# unqualified TEST_METADATA variable.
#TEST_METADATA.<test-program>+= key="value"
.if ${KYUAFILE:tl} != "no"
@@ -43,11 +50,12 @@ FILES+= Kyuafile
FILESDIR_Kyuafile= ${TESTSDIR}
.endif
-.if ${KYUAFILE:tl} == "auto"
-CLEANFILES+= Kyuafile Kyuafile.tmp
-.endif
+.for _T in ${_TESTS}
+_TEST_METADATA.${_T}= ${TEST_METADATA} ${TEST_METADATA.${_T}}
+.endfor
.if ${KYUAFILE:tl} == "auto"
+CLEANFILES+= Kyuafile Kyuafile.tmp
Kyuafile: Makefile
@{ \
echo '-- Automatically generated by bsd.test.mk.'; \
@@ -59,11 +67,11 @@ Kyuafile: Makefile
} > ${.TARGET}.tmp
.for _T in ${_TESTS}
.if defined(.PARSEDIR)
- @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \
+ @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${_TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \
>>${.TARGET}.tmp
.else
- @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/^/, /:Q:S/\\ ,/,/g:S,\\,,g}}' \
- >>Kyuafile.auto.tmp
+ @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${_TEST_METADATA.${_T}:C/^/, /:Q:S/\\ ,/,/g:S,\\,,g}}' \
+ >>${.TARGET}.tmp
.endif
.endfor
.for _T in ${TESTS_SUBDIRS:N.WAIT}
@@ -72,9 +80,11 @@ Kyuafile: Makefile
@mv ${.TARGET}.tmp ${.TARGET}
.endif
+CHECKDIR?= ${DESTDIR}${TESTSDIR}
+
KYUA= ${LOCALBASE}/bin/kyua
-.if exists(${KYUA})
-# Definition of the "make test" target and supporting variables.
+
+# Definition of the "make check" target and supporting variables.
#
# This target, by necessity, can only work for native builds (i.e. a FreeBSD
# host building a release for the same system). The target runs Kyua, which is
@@ -83,36 +93,15 @@ KYUA= ${LOCALBASE}/bin/kyua
# Due to the dependencies of the binaries built by the source tree and how they
# are used by tests, it is highly possible for a execution of "make test" to
# report bogus results unless the new binaries are put in place.
-realtest: .PHONY
- @echo "*** WARNING: make test is experimental"
- @echo "***"
- @echo "*** Using this test does not preclude you from running the tests"
- @echo "*** installed in ${TESTSBASE}. This test run may raise false"
- @echo "*** positives and/or false negatives."
- @echo
- @set -e; \
- ${KYUA} test -k ${DESTDIR}${TESTSDIR}/Kyuafile; \
- result=0; \
- echo; \
- echo "*** Once again, note that "make test" is unsupported."; \
- test $${result} -eq 0
-.endif
-beforetest: .PHONY
-.if defined(TESTSDIR)
-.if ${TESTSDIR} == ${TESTSBASE}
-# Forbid running from ${TESTSBASE}. It can cause false positives/negatives and
-# it does not cover all the tests (e.g. it misses testing software in external).
- @echo "*** Sorry, you cannot use make test from src/tests. Install the"
- @echo "*** tests into their final location and run them from ${TESTSBASE}"
- @false
-.else
- @echo "*** Using this test does not preclude you from running the tests"
- @echo "*** installed in ${TESTSBASE}. This test run may raise false"
- @echo "*** positives and/or false negatives."
-.endif
-.else
- @echo "*** No TESTSDIR defined; nothing to do."
- @false
-.endif
- @echo
+realcheck: .PHONY
+ @if [ ! -x ${KYUA} ]; then \
+ echo; \
+ echo "kyua binary not installed at expected location (${.TARGET})"; \
+ echo; \
+ echo "Please install via pkg install, or specify the path to the kyua"; \
+ echo "package via the \$${LOCALBASE} variable, e.g. "; \
+ echo "LOCALBASE=\"${LOCALBASE}\""; \
+ false; \
+ fi
+ @${KYUA} test -k ${CHECKDIR}/Kyuafile
diff --git a/share/tests/Makefile b/share/tests/Makefile
index 2c63621..e070571 100644
--- a/share/tests/Makefile
+++ b/share/tests/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/share
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
OpenPOWER on IntegriCloud