Update README.

This commit is contained in:
Nicholas J. Kain 2010-12-01 12:24:47 -05:00
parent f2b4527179
commit 712c8446d6

23
README
View File

@ -26,7 +26,7 @@ only the minimum necessary set of privileges required to perform its duties.
These powers include the ability to bind to a low port, the ability to open a These powers include the ability to bind to a low port, the ability to open a
raw socket, and the ability to communicate on broadcast channels. ndhc holds raw socket, and the ability to communicate on broadcast channels. ndhc holds
no other powers and is restricted to a chroot that contains nothing more than a no other powers and is restricted to a chroot that contains nothing more than a
domain socket filesystem object and (at least on Linux) a urandom device node. domain socket filesystem object and a urandom device node.
ifchd handles interface change requests. It listens on a UNIX domain socket ifchd handles interface change requests. It listens on a UNIX domain socket
for such requests, and denies any client that does not match an authorized gid, for such requests, and denies any client that does not match an authorized gid,
@ -40,18 +40,6 @@ Note that ndhc does not support the entire DHCP client protocol. Only the
minimum necessary featureset is implemented. This behavior should be familiar minimum necessary featureset is implemented. This behavior should be familiar
to anyone who has used software that purports to be be secure. to anyone who has used software that purports to be be secure.
Many of the features that ndhc depends upon are not entirely standard and vary
between UNIX systems. It is likely that some effort will be required in order
to port ndhc to new systems. The ndhc daemon should be entirely portable aside
from its use of Linux-style POSIX capabilities.
ifchd is necessarily less portable, since it must use system-specific ioctls in
order to configure network interfaces. Additionally, ifchd uses extensions to
the UNIX domain socket family to limit connections to user defined subsets of
possible uids, gids, and pids. These extensions are present in Linux and BSD,
although both Linux and BSD have different interfaces for the functionality.
Patches that provide support for new systems are welcome.
USAGE USAGE
----- -----
@ -152,11 +140,7 @@ when it chroots.
PORTING NOTES PORTING NOTES
------------- -------------
Unportable functions are isolated to linux.c. Any attempts to port ifchd to There are six major functions that ifchd depends upon that are not generally
other platforms should isolate platform-dependent code to similarly named
compilation units (eg: for FreeBSD, freebsd.[ch]).
There are four major functions that ifchd depends upon that are not generally
portable. First, it uses the SO_PEERCRED flag of getsockopt() to discriminate portable. First, it uses the SO_PEERCRED flag of getsockopt() to discriminate
authorized connections by uid, gid, and pid. Similar functionality exists in authorized connections by uid, gid, and pid. Similar functionality exists in
at least the BSDs; however, it has a different API. Second, ifchd takes at least the BSDs; however, it has a different API. Second, ifchd takes
@ -165,7 +149,8 @@ Capabilities are supposedly a POSIX feature, but in practice, they vary greatly
from system to system. Third and fourth, ifchd configures network interfaces from system to system. Third and fourth, ifchd configures network interfaces
and routes. Interface and route configuration is entirely non-portable, and routes. Interface and route configuration is entirely non-portable,
usually requiring calls to the catch-all ioctl(), and will almost certainly usually requiring calls to the catch-all ioctl(), and will almost certainly
require platform-dependent code. require platform-dependent code. Fifth and sixth, both ifchd and ndhc use
epoll() and signalfd(), which are Linux-specific.
Some standard C libraries include a native implementation of strlcpy() and Some standard C libraries include a native implementation of strlcpy() and
strlcat(). Such defines may conflict with my implementations in strl.c/strl.h. strlcat(). Such defines may conflict with my implementations in strl.c/strl.h.