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