Provided by:
manpages-es_1.55-10_all 
NOMBRE
rcmd, rresvport, iruserok, ruserok - Funciones que devuelven un flujo
(stream) hacia una orden remota
SINOPSIS
#include <unistd.h>
int rcmd(char **ahost, int inport, const char *locuser, const char
*remuser, const char *cmd, int *fd2p)
int rresvport(int *port)
int iruserok(u_int32_t raddr, int superuser, const char *ruser, const
char *luser)
int ruserok(const char *rhost, int superuser, const char *ruser, const
char *luser)
DESCRIPCI'ON
La funcion rcmd es utilizada por el superusuario para ejecutar una
orden en una maquina remota usando un esquema de autenticacion basado
en numeros de puertos reservados. La funcion rresvport devuelve el
descriptor de un enchufe (socket) cuya direccion cae dentro del espacio
de puertos privilegidados. Los servidores utilizan las funciones
iruserok y ruserok para autenticar a los clientes que solicitan
servicios mediante rcmd. Estas cuatro funciones se encuentran en el
mismo fichero y son usadas por el servidor rshd(8) (entre otros).
La funcion rcmd busca al anfitrion (host) *ahost usando
gethostbyname(3), devolviendo -1 si el anfitrion no existe. En caso
contrario, se asigna a *ahost el nombre estandar del anfitrion y se
establece una conexion con el servidor que reside en el, bien definido,
puerto de Internet inport.
Si la conexion tiene exito, se devuelve al invocador un socket dentro
del dominio de Internet del tipo SOCK_STREAM, y dicho socket se
convierte en la entrada est'andar (stdin) y la salida est'andar (stdout)
de la orden remota. Si fd2p no es cero, se creara un canal auxiliar
hacia un proceso de control y en *fd2p se colocara un descriptor para
dicho canal. El proceso de control devolvera la salida de error
(descriptor de fichero numero 2) de la orden remota sobre este canal, y
tambien aceptara sobre este canal el envio de bytes que se comportaran
como numeros de senal de UNIX para ser enviados al grupo de procesos de
la orden. Si fd2p es 0, entonces la salida de error est'andar (stderr)
(descriptor de fichero numero 2 de la orden remota) coincidiran con la
salida est'andar (stdout) y no habra forma de enviar senales arbitrarias
al proceso remoto, aunque podra llamar su atencion usando datos "fuera
de orden" (out-of-band).
El protocolo se describe con detalle en rshd(8).
La funcion rresvport se utiliza para obtener un socket que tenga una
direccion privilegiada ligada a el. Este socket es adecuado para ser
usado por rcmd y otras funciones diversas. Los puertos de Internet
privilegiados son aquellos que van de 0 a 1023. Solo el superusuario
puede ligar una direccion de este tipo a un socket.
Las funciones iruserok y ruserok toman la direccion IP o el nombre de
un anfitrion remoto, respectivamente, dos nombres de usuario y una
bandera que indica si el nombre del usuario local es o no el del
superusuario. A continuacion, si el usuario NO es el superusuario,
comprueba el fichero /etc/hosts.equiv. Si dicha busqueda no se realiza
o no tiene exito, se comprueba el fichero .rhosts en el directorio raiz
(home) del usuario local para ver si se permite la peticion de
servicio.
Si el fichero no existe, no es un fichero regular, pertenece a alguien
que no es el usuario ni el superusuario, o puede ser escrito por
alguien que no sea el propietario, la comprobacion fracasa
automaticamente. Si el nombre de la maquina aparece en el fichero
hosts.equiv o si el anfitrion y el nombre del usuario remoto se
encuentran en el fichero .rhosts, se devuelve un 0; en caso contrario
iruserok y ruserok devuelven -1. Si el dominio local (como se obtiene
de gethostname(2)) es el mismo que el dominio remoto, solo se necesita
especificar el nombre de la maquina.
Si se conoce la direccion IP del anfitrion remoto, preferentemente se
debe usar iruserok en lugar de ruserok, ya que no necesita consultar al
servidor DNS para el dominio del anfitrion remoto.
ERRORES
La funcion rcmd devuelve un descriptor valido de socket en caso de
exito. Devuelve -1 en caso de error y muestra un mensaje de error en la
salida de error estandar.
La funcion rresvport devuelve un descriptor de socket valido, y ya
ligado, en caso de exito. Devuelve -1 en caso de error y asigna a
errno un valor que indica la razon del fallo. Se sobrecarga el
significado del codigo de error EAGAIN para indicar que ``Todos los
puertos de red estan en uso.''
V'EASE TAMBI'EN
rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8)
HISTORIA
Estas funciones aparecieron en 4.2BSD.