.\" Copyright (c) 1983, 1991, 1993
.\"     The Regents of the University of California.  All rights reserved.
.\"
.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
.\" 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.
.\" %%%LICENSE_END
.\"
.\"     @(#)rexec.3     8.1 (Berkeley) 6/4/93
.\" $FreeBSD: src/lib/libcompat/4.3/rexec.3,v 1.12 2004/07/02 23:52:14 ru Exp $
.\"
.\" Taken from FreeBSD 5.4; not checked against Linux reality (mtk)
.\"
.\" 2013-06-21, mtk, Converted from mdoc to man macros
.\"
.TH REXEC 3 2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
rexec, rexec_af \- return stream to a remote command
.SH SYNOPSIS
.nf
.B #include <netdb.h>
.PP
.BI "int rexec(char **restrict " ahost ", int " inport ,
.BI "          const char *restrict " user ", const char *restrict " passwd ,
.BI "          const char *restrict " cmd ", int *restrict " fd2p );
.BI "int rexec_af(char **restrict " ahost ", int " inport ,
.BI "          const char *restrict " user ", const char *restrict " passwd ,
.BI "          const char *restrict " cmd ", int *restrict " fd2p ,
.BI "          sa_family_t " af  );
.fi
.PP
.BR rexec (),
.BR rexec_af ():
.nf
    Since glibc 2.19:
        _DEFAULT_SOURCE
    In glibc up to and including 2.19:
        _BSD_SOURCE
.fi
.SH DESCRIPTION
This interface is obsoleted by
.BR rcmd (3).
.PP
The
.BR rexec ()
function
looks up the host
.IR *ahost
using
.BR gethostbyname (3),
returning \-1 if the host does not exist.
Otherwise,
.IR *ahost
is set to the standard name of the host.
If a username and password are both specified, then these
are used to authenticate to the foreign host; otherwise
the environment and then the
.I .netrc
file in user's
home directory are searched for appropriate information.
If all this fails, the user is prompted for the information.
.PP
The port
.I inport
specifies which well-known DARPA Internet port to use for
the connection; the call
.I "getservbyname(""exec"", ""tcp"")"
(see
.BR getservent (3))
will return a pointer to a structure that contains the necessary port.
The protocol for connection is described in detail in
.BR rexecd (8).
.PP
If the connection succeeds,
a socket in the Internet domain of type
.BR SOCK_STREAM
is returned to
the caller, and given to the remote command as
.IR stdin
and
.IR stdout .
If
.I fd2p
is nonzero, then an auxiliary channel to a control
process will be setup, and a file descriptor for it will be placed
in
.IR *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.
The diagnostic
information returned does not include remote authorization failure,
as the secondary connection is set up after authorization has been
verified.
If
.I fd2p
is 0, then the
.IR stderr
(unit 2 of the remote
command) will be made the same as the
.IR 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.
.SS rexec_af()
The
.BR rexec ()
function works over IPv4
.RB ( AF_INET ).
By contrast, the
.BR rexec_af ()
function provides an extra argument,
.IR af ,
that allows the caller to select the protocol.
This argument can be specified as
.BR AF_INET ,
.BR AF_INET6 ,
or
.BR AF_UNSPEC
(to allow the implementation to select the protocol).
.SH VERSIONS
The
.BR rexec_af ()
function was added to glibc in version 2.2.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR rexec (),
.BR rexec_af ()
T}	Thread safety	MT-Unsafe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
These functions are not in POSIX.1.
The
.BR rexec ()
function first appeared in
4.2BSD, and is present on the BSDs, Solaris, and many other systems.
The
.BR rexec_af ()
function is more recent, and less widespread.
.SH BUGS
The
.BR rexec ()
function sends the unencrypted password across the network.
.PP
The underlying service is considered a big security hole and therefore
not enabled on many sites; see
.BR rexecd (8)
for explanations.
.SH SEE ALSO
.BR rcmd (3),
.BR rexecd (8)
