mirror of
git://slackware.nl/current.git
synced 2024-12-30 10:24:23 +01:00
129 lines
5.4 KiB
Text
129 lines
5.4 KiB
Text
|
/* $Slackware: inetd.c 1.79s 2001/02/06 13:18:00 volkerdi Exp $ */
|
||
|
/* $OpenBSD: inetd.c,v 1.79 2001/01/30 08:30:57 deraadt Exp $ */
|
||
|
/* $NetBSD: inetd.c,v 1.11 1996/02/22 11:14:41 mycroft Exp $ */
|
||
|
/*
|
||
|
* Copyright (c) 1983,1991 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.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Inetd - Internet super-server
|
||
|
*
|
||
|
* This program invokes all internet services as needed.
|
||
|
* connection-oriented services are invoked each time a
|
||
|
* connection is made, by creating a process. This process
|
||
|
* is passed the connection as file descriptor 0 and is
|
||
|
* expected to do a getpeername to find out the source host
|
||
|
* and port.
|
||
|
*
|
||
|
* Datagram oriented services are invoked when a datagram
|
||
|
* arrives; a process is created and passed a pending message
|
||
|
* on file descriptor 0. Datagram servers may either connect
|
||
|
* to their peer, freeing up the original socket for inetd
|
||
|
* to receive further messages on, or ``take over the socket'',
|
||
|
* processing all arriving datagrams and, eventually, timing
|
||
|
* out. The first type of server is said to be ``multi-threaded'';
|
||
|
* the second type of server ``single-threaded''.
|
||
|
*
|
||
|
* Inetd uses a configuration file which is read at startup
|
||
|
* and, possibly, at some later time in response to a hangup signal.
|
||
|
* The configuration file is ``free format'' with fields given in the
|
||
|
* order shown below. Continuation lines for an entry must begin with
|
||
|
* a space or tab. All fields must be present in each entry.
|
||
|
*
|
||
|
* service name must be in /etc/services
|
||
|
* socket type stream/dgram/raw/rdm/seqpacket
|
||
|
* protocol must be in /etc/protocols
|
||
|
* wait/nowait[.max] single-threaded/multi-threaded, max #
|
||
|
* user[.group] or user[:group] user/group to run daemon as
|
||
|
* server program full path name
|
||
|
* server program arguments maximum of MAXARGS (20)
|
||
|
*
|
||
|
* For RPC services
|
||
|
* service name/version must be in /etc/rpc
|
||
|
* socket type stream/dgram/raw/rdm/seqpacket
|
||
|
* protocol must be in /etc/protocols
|
||
|
* wait/nowait[.max] single-threaded/multi-threaded
|
||
|
* user[.group] or user[:group] user to run daemon as
|
||
|
* server program full path name
|
||
|
* server program arguments maximum of MAXARGS (20)
|
||
|
*
|
||
|
* For non-RPC services, the "service name" can be of the form
|
||
|
* hostaddress:servicename, in which case the hostaddress is used
|
||
|
* as the host portion of the address to listen on. If hostaddress
|
||
|
* consists of a single `*' character, INADDR_ANY is used.
|
||
|
*
|
||
|
* A line can also consist of just
|
||
|
* hostaddress:
|
||
|
* where hostaddress is as in the preceding paragraph. Such a line must
|
||
|
* have no further fields; the specified hostaddress is remembered and
|
||
|
* used for all further lines that have no hostaddress specified,
|
||
|
* until the next such line (or EOF). (This is why * is provided to
|
||
|
* allow explicit specification of INADDR_ANY.) A line
|
||
|
* *:
|
||
|
* is implicitly in effect at the beginning of the file.
|
||
|
*
|
||
|
* The hostaddress specifier may (and often will) contain dots;
|
||
|
* the service name must not.
|
||
|
*
|
||
|
* For RPC services, host-address specifiers are accepted and will
|
||
|
* work to some extent; however, because of limitations in the
|
||
|
* portmapper interface, it will not work to try to give more than
|
||
|
* one line for any given RPC service, even if the host-address
|
||
|
* specifiers are different.
|
||
|
*
|
||
|
* Comment lines are indicated by a `#' in column 1.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Here's the scoop concerning the user[.:]group feature:
|
||
|
*
|
||
|
* 1) set-group-option off.
|
||
|
*
|
||
|
* a) user = root: NO setuid() or setgid() is done
|
||
|
*
|
||
|
* b) other: setgid(primary group as found in passwd)
|
||
|
* initgroups(name, primary group)
|
||
|
* setuid()
|
||
|
*
|
||
|
* 2) set-group-option on.
|
||
|
*
|
||
|
* a) user = root: setgid(specified group)
|
||
|
* NO initgroups()
|
||
|
* NO setuid()
|
||
|
*
|
||
|
* b) other: setgid(specified group)
|
||
|
* initgroups(name, specified group)
|
||
|
* setuid()
|
||
|
*
|
||
|
*/
|
||
|
|