rcmd, rresvport, iruserok, ruserok — routines for returning a stream to a remote command
#include <netdb.h> /* Or <unistd.h> on some systems */
int
rcmd( |
char ** | ahost, |
int | inport, | |
const char * | locuser, | |
const char * | remuser, | |
const char * | cmd, | |
int * | fd2p) ; |
int
rresvport( |
int * | port) ; |
int
iruserok( |
uint32_t | raddr, |
int | superuser, | |
const char * | ruser, | |
const char * | luser) ; |
int
ruserok( |
const char * | rhost, |
int | superuser, | |
const char * | ruser, | |
const char * | luser) ; |
Note | |||
---|---|---|---|
|
The rcmd
() function is used
by the superuser to execute a command on a remote machine
using an authentication scheme based on reserved port
numbers. The rresvport
()
function returns a descriptor to a socket with an address in
the privileged port space. The iruserok
() and ruserok
() functions are used by servers to
authenticate clients requesting service with rcmd
(). All four functions are present in
the same file and are used by the rshd(8) server (among
others).
The rcmd
() function looks up
the host *ahost
using
gethostbyname(3), returning
−1 if the host does not exist. Otherwise *ahost
is set to the standard
name of the host and a connection is established to a server
residing at the well-known Internet port inport
.
If the connection succeeds, a socket in the Internet
domain of type SOCK_STREAM
is
returned to the caller, and given to the remote command as
stdin
and stdout
. If fd2p
is nonzero, then an
auxiliary channel to a control process will be set up, and a
descriptor for it will be placed in *fd2p
. The control process will
return diagnostic output from the command (unit 2) on this
channel, and will also accept bytes on this channel as being
Unix signal numbers, to be forwarded to the process group of
the command. If fd2p
is 0, then the stderr
(unit 2 of
the remote command) will be made the same as the stdout
and no provision is made for sending
arbitrary signals to the remote process, although you may be
able to get its attention by using out-of-band data.
The protocol is described in detail in rshd(8).
The rresvport
() function is
used to obtain a socket with a privileged address bound to
it. This socket is suitable for use by rcmd
() and several other functions.
Privileged Internet ports are those in the range 0 to 1023.
Only the superuser is allowed to bind an address of this sort
to a socket.
The iruserok
() and
ruserok
() functions take a
remote host's IP address or name, respectively, two user
names and a flag indicating whether the local user's name is
that of the superuser. Then, if the user is not the superuser, it checks the
/etc/hosts.equiv
file. If that
lookup is not done, or is unsuccessful, the .rhosts
in the local user's
home directory is checked to see if the request for service
is allowed.
If this file does not exist, is not a regular file, is
owned by anyone other than the user or the superuser, or is
writable by anyone other than the owner, the check
automatically fails. Zero is returned if the machine name is
listed in the hosts.equiv
file, or the host
and remote user name are found in the .rhosts
file; otherwise
iruserok
() and ruserok
() return −1. If the local
domain (as obtained from gethostname(2) is the same
as the remote domain, only the machine name need be
specified.
If the IP address of the remote host is known,
iruserok
() should be used in
preference to ruserok
(), as it
does not require trusting the DNS server for the remote
host's domain.
The rcmd
() function returns
a valid socket descriptor on success. It returns −1 on
error and prints a diagnostic message on the standard
error.
The rresvport
() function
returns a valid, bound socket descriptor on success. It
returns −1 on error with the global value errno
set according to the reason for
failure. The error code EAGAIN
is overloaded to mean "All network ports in use."
Not in POSIX.1-2001. Present on the BSDs, Solaris, and many other systems. These functions appeared in 4.2BSD.
This page is part of release 2.79 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
$NetBSD: rcmd.3,v 1.9 1996/05/28 02:07:39 mrg Exp $ Copyright (c) 1983, 1991, 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. (#)rcmd.3 8.1 (Berkeley) 6/4/93 Contributed as Linux man page by David A. Holland, 970908 I have not checked whether the Linux situation is exactly the same. 2007-12-08, mtk, Converted from mdoc to man macros |