unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

RCMD(3N)                                                              RCMD(3N)



NAME
       rcmd,  rresvport, ruserok - routines for returning a stream to a remote
       command

SYNOPSIS
       int rcmd(ahost, inport, locuser, remuser, cmd, fd2p)
       char **ahost;
       unsigned short inport;
       char *locuser, *remuser, *cmd;
       int *fd2p

       int rresvport(port)
       int *port;

       ruserok(rhost, super-user, ruser, luser)
       char *rhost;
       int super-user;
       char *ruser, *luser;

DESCRIPTION
       rcmd() is a routine used by the super-user to execute a  command  on  a
       remote  machine  using  an authentication scheme based on reserved port
       numbers.  rresvport() is a routine which  returns  a  descriptor  to  a
       socket  with  an  address in the privileged port space.  ruserok() is a
       routine used by servers to authenticate clients requesting service with
       rcmd.  All three functions are present in the same file and are used by
       the rshd(8C) server (among others).

       rcmd() looks up  the  host  *ahost  using  gethostbyname  (see  gethos-
       tent(3N)),  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  its  standard  input  (file descriptor 0) and standard output (file
       descriptor 1). If fd2p is non-zero, then an auxiliary channel to a con-
       trol  process will be set up, and a descriptor for it will be placed in
       *fd2p.  The control process will return diagnostic output from the com-
       mand (file descriptor 2) on this channel, and will also accept bytes on
       this channel as signal numbers, to be forwarded to the process group of
       the command.  If fd2p is 0, then the standard error (file descriptor 2)
       of the remote command will be made the same as its standard output  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(8C).

       The  rresvport()  routine  is used to obtain a socket with a privileged
       address bound to it.  This socket is suitable for  use  by  rcmd()  and
       several  other  routines.   Privileged  Internet ports are those in the
       range 0 to 1023.  Only the super-user is allowed to bind an address  of
       this sort to a socket.

       ruserok()  takes  a  remote host's name, as returned by a gethostbyaddr
       (see gethostent(3N)) routine, two user  names  and  a  flag  indicating
       whether  the  local  user's  name  is  that of the super-user.  It then
       checks the files /etc/hosts.equiv and, possibly, .rhosts in  the  local
       user's  home directory to see if the request for service is allowed.  A
       0 is returned if the machine name is  listed  in  the  /etc/hosts.equiv
       file,  or  the host and remote user name are found in the .rhosts file;
       otherwise ruserok() returns -1.  If  the  super-user  flag  is  1,  the
       checking of the /etc/hosts.equiv file is bypassed.

FILES
       /etc/hosts.equiv
       .rhosts

SEE ALSO
       rlogin(1C),  rsh(1C),  intro(2), gethostent(3N), rexec(3N), rexecd(8C),
       rlogind(8C), rshd(8C)

DIAGNOSTICS
       rcmd() returns a valid socket descriptor on success.  It returns -1  on
       error and prints a diagnostic message on the standard error.

       rresvport()  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."



                               22 November 1987                       RCMD(3N)