142 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" Copyright (c) 1983 Regents of the University of California.
 | |
| .\" All rights reserved.  The Berkeley software License Agreement
 | |
| .\" specifies the terms and conditions for redistribution.
 | |
| .\"
 | |
| .\"	@(#)rcmd.3	6.7 (Berkeley) 5/14/86
 | |
| .\"
 | |
| .TH RCMD 3 "May 14, 1986"
 | |
| .UC 5
 | |
| .SH NAME
 | |
| rcmd, rresvport, ruserok \- routines for returning a stream to a remote command
 | |
| .SH SYNOPSIS
 | |
| .nf
 | |
| .B "#include <sys/types.h>"
 | |
| .B "#include <net/netlib.h>"
 | |
| .PP
 | |
| .B "rem = rcmd(ahost, inport, locuser, remuser, cmd, fd2p);"
 | |
| .B char **ahost;
 | |
| .B int inport;
 | |
| .B "char *locuser, *remuser, *cmd;"
 | |
| .B int *fd2p;
 | |
| .PP
 | |
| .B s = rresvport(port);
 | |
| .B int *port;
 | |
| .PP
 | |
| .B "ruserok(rhost, superuser, ruser, luser);"
 | |
| .B char *rhost;
 | |
| .B int superuser;
 | |
| .B char *ruser, *luser;
 | |
| .fi
 | |
| .SH DESCRIPTION
 | |
| .I 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.
 | |
| .I Rresvport
 | |
| is a routine which returns a descriptor to a socket
 | |
| with an address in the privileged port space.
 | |
| .I Ruserok
 | |
| is a routine used by servers
 | |
| to authenticate clients requesting service with
 | |
| .IR rcmd .
 | |
| All three functions are present in the same file and are used
 | |
| by the
 | |
| .IR rshd (8)
 | |
| server (among others).
 | |
| .PP
 | |
| .I Rcmd
 | |
| looks up the host
 | |
| .I *ahost
 | |
| using
 | |
| .IR gethostbyname (3),
 | |
| returning \-1 if the host does not exist.
 | |
| Otherwise
 | |
| .I *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
 | |
| .IR inport .
 | |
| .PP
 | |
| 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 
 | |
| .B stdin
 | |
| and
 | |
| .BR stdout .
 | |
| If
 | |
| .I fd2p
 | |
| is non-zero, then an auxiliary channel to a control
 | |
| process will be set up, and a 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.
 | |
| If
 | |
| .I fd2p
 | |
| is 0, then the 
 | |
| .B stderr
 | |
| (unit 2 of the remote
 | |
| command) will be made the same as the 
 | |
| .B 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.
 | |
| .PP
 | |
| The protocol is described in detail in
 | |
| .IR rshd (8).
 | |
| .PP
 | |
| The
 | |
| .I rresvport
 | |
| routine is used to obtain a socket with a privileged
 | |
| address bound to it.  This socket is suitable for use
 | |
| by 
 | |
| .I 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.
 | |
| .PP
 | |
| .I Ruserok
 | |
| takes a remote host's name, as returned by a
 | |
| .IR gethostbyaddr (3)
 | |
| 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 
 | |
| .I /etc/hosts.equiv
 | |
| and, possibly, 
 | |
| .I .rhosts
 | |
| in the current working directory (normally 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 ``hosts.equiv'' file, or the
 | |
| host and remote user name are found in the ``.rhosts''
 | |
| file; otherwise 
 | |
| .I ruserok
 | |
| returns \-1.  If the
 | |
| .I superuser
 | |
| flag is 1, the checking of the ``host.equiv'' file is
 | |
| bypassed.
 | |
| If the local domain (as obtained from \fIgethostname\fP\|(3))
 | |
| is the same as the remote domain, only the machine name need be specified.
 | |
| .SH SEE ALSO
 | |
| rlogin(1),
 | |
| rsh(1),
 | |
| intro(2),
 | |
| rexec(3),
 | |
| rexecd(8),
 | |
| rlogind(8),
 | |
| rshd(8)
 | |
| .SH DIAGNOSTICS
 | |
| .I Rcmd
 | |
| returns a valid socket descriptor on success.
 | |
| It returns -1 on error and prints a diagnostic message on the standard error.
 | |
| .PP
 | |
| .I Rresvport
 | |
| returns a valid, bound socket descriptor on success.
 | |
| It returns -1 on error with the global value
 | |
| .I errno
 | |
| set according to the reason for failure.
 | |
| The error code EAGAIN is overloaded to mean ``All network ports in use.''
 | 
