|
|
1.1 ! root 1: .\" Copyright (c) 1983 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)rcmd.3 6.8 (Berkeley) 9/30/87 ! 6: .\" ! 7: .TH RCMD 3 "September 30, 1987" ! 8: .UC 5 ! 9: .SH NAME ! 10: rcmd, rresvport, ruserok \- routines for returning a stream to a remote command ! 11: .SH SYNOPSIS ! 12: .nf ! 13: .PP ! 14: .B "rem = rcmd(ahost, inport, locuser, remuser, cmd, fd2p);" ! 15: .B char **ahost; ! 16: .B int inport; ! 17: .B "char *locuser, *remuser, *cmd;" ! 18: .B int *fd2p; ! 19: .PP ! 20: .B s = rresvport(port); ! 21: .B int *port; ! 22: .PP ! 23: .B "ruserok(rhost, superuser, ruser, luser);" ! 24: .B char *rhost; ! 25: .B int superuser; ! 26: .B char *ruser, *luser; ! 27: .fi ! 28: .SH DESCRIPTION ! 29: .I Rcmd ! 30: is a routine used by the super-user to execute a command on ! 31: a remote machine using an authentication scheme based ! 32: on reserved port numbers. ! 33: .I Rresvport ! 34: is a routine which returns a descriptor to a socket ! 35: with an address in the privileged port space. ! 36: .I Ruserok ! 37: is a routine used by servers ! 38: to authenticate clients requesting service with ! 39: .IR rcmd . ! 40: All three functions are present in the same file and are used ! 41: by the ! 42: .IR rshd (8C) ! 43: server (among others). ! 44: .PP ! 45: .I Rcmd ! 46: looks up the host ! 47: .I *ahost ! 48: using ! 49: .IR gethostbyname (3N), ! 50: returning \-1 if the host does not exist. ! 51: Otherwise ! 52: .I *ahost ! 53: is set to the standard name of the host ! 54: and a connection is established to a server ! 55: residing at the well-known Internet port ! 56: .IR inport . ! 57: .PP ! 58: If the connection succeeds, ! 59: a socket in the Internet domain of type SOCK_STREAM ! 60: is returned to the caller, and given to the remote ! 61: command as ! 62: .B stdin ! 63: and ! 64: .BR stdout . ! 65: If ! 66: .I fd2p ! 67: is non-zero, then an auxiliary channel to a control ! 68: process will be set up, and a descriptor for it will be placed ! 69: in ! 70: .IR *fd2p . ! 71: The control process will return diagnostic ! 72: output from the command (unit 2) on this channel, and will also ! 73: accept bytes on this channel as being UNIX signal numbers, to be ! 74: forwarded to the process group of the command. ! 75: If ! 76: .I fd2p ! 77: is 0, then the ! 78: .B stderr ! 79: (unit 2 of the remote ! 80: command) will be made the same as the ! 81: .B stdout ! 82: and no ! 83: provision is made for sending arbitrary signals to the remote process, ! 84: although you may be able to get its attention by using out-of-band data. ! 85: .PP ! 86: The protocol is described in detail in ! 87: .IR rshd (8C). ! 88: .PP ! 89: The ! 90: .I rresvport ! 91: routine is used to obtain a socket with a privileged ! 92: address bound to it. This socket is suitable for use ! 93: by ! 94: .I rcmd ! 95: and several other routines. Privileged Internet ports are those ! 96: in the range 0 to 1023. Only the super-user ! 97: is allowed to bind an address of this sort to a socket. ! 98: .PP ! 99: .I Ruserok ! 100: takes a remote host's name, as returned by a ! 101: .IR gethostbyaddr (3N) ! 102: routine, two user names and a flag indicating whether ! 103: the local user's name is that of the super-user. It then ! 104: checks the files ! 105: .I /etc/hosts.equiv ! 106: and, possibly, ! 107: .I .rhosts ! 108: in the local user's home directory to see if the request for ! 109: service is allowed. A 0 is returned if the machine ! 110: name is listed in the ``hosts.equiv'' file, or the ! 111: host and remote user name are found in the ``.rhosts'' ! 112: file; otherwise ! 113: .I ruserok ! 114: returns \-1. If the ! 115: .I superuser ! 116: flag is 1, the checking of the ``hosts.equiv'' file is ! 117: bypassed. ! 118: If the local domain (as obtained from \fIgethostname\fP\|(2)) ! 119: is the same as the remote domain, only the machine name need be specified. ! 120: .SH SEE ALSO ! 121: rlogin(1C), ! 122: rsh(1C), ! 123: intro(2), ! 124: rexec(3), ! 125: rexecd(8C), ! 126: rlogind(8C), ! 127: rshd(8C) ! 128: .SH DIAGNOSTICS ! 129: .I Rcmd ! 130: returns a valid socket descriptor on success. ! 131: It returns -1 on error and prints a diagnostic message on the standard error. ! 132: .PP ! 133: .I Rresvport ! 134: returns a valid, bound socket descriptor on success. ! 135: It returns -1 on error with the global value ! 136: .I errno ! 137: set according to the reason for failure. ! 138: The error code EAGAIN is overloaded to mean ``All network ports in use.''
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.