Provided by:
manpages-es_1.55-3_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ÓN
La función rcmd es utilizada por el superusuario para ejecutar una
orden en una máquina remota usando un esquema de autenticación basado
en números de puertos reservados. La función rresvport devuelve el
descriptor de un enchufe (socket) cuya dirección 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 función rcmd busca al anfitrión (host) *ahost usando
gethostbyname(3), devolviendo -1 si el anfitrión no existe. En caso
contrario, se asigna a *ahost el nombre estándar del anfitrión y se
establece una conexión con el servidor que reside en el, bien definido,
puerto de Internet inport.
Si la conexión tiene éxito, se devuelve al invocador un socket dentro
del dominio de Internet del tipo SOCK_STREAM, y dicho socket se
convierte en la entrada estándar (stdin) y la salida estándar (stdout)
de la orden remota. Si fd2p no es cero, se creará un canal auxiliar
hacia un proceso de control y en *fd2p se colocará un descriptor para
dicho canal. El proceso de control devolverá la salida de error
(descriptor de fichero número 2) de la orden remota sobre este canal, y
también aceptará sobre este canal el envío de bytes que se comportarán
como números de señal de UNIX para ser enviados al grupo de procesos de
la orden. Si fd2p es 0, entonces la salida de error estándar (stderr)
(descriptor de fichero número 2 de la orden remota) coincidirán con la
salida estándar (stdout) y no habrá forma de enviar señales arbitrarias
al proceso remoto, aunque podrá llamar su atención usando datos "fuera
de orden" (out-of-band).
El protocolo se describe con detalle en rshd(8).
La función rresvport se utiliza para obtener un socket que tenga una
dirección privilegiada ligada a él. 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. Sólo el superusuario
puede ligar una dirección de este tipo a un socket.
Las funciones iruserok y ruserok toman la dirección IP o el nombre de
un anfitrión remoto, respectivamente, dos nombres de usuario y una
bandera que indica si el nombre del usuario local es o no el del
superusuario. A continuación, si el usuario NO es el superusuario,
comprueba el fichero /etc/hosts.equiv. Si dicha búsqueda no se realiza
o no tiene éxito, se comprueba el fichero .rhosts en el directorio raíz
(home) del usuario local para ver si se permite la petición 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 comprobación fracasa
automáticamente. Si el nombre de la máquina aparece en el fichero
hosts.equiv o si el anfitrión 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, sólo se necesita
especificar el nombre de la máquina.
Si se conoce la dirección IP del anfitrión remoto, preferentemente se
debe usar iruserok en lugar de ruserok, ya que no necesita consultar al
servidor DNS para el dominio del anfitrión remoto.
ERRORES
La función rcmd devuelve un descriptor válido de socket en caso de
éxito. Devuelve -1 en caso de error y muestra un mensaje de error en la
salida de error estándar.
La función rresvport devuelve un descriptor de socket válido, y ya
ligado, en caso de éxito. Devuelve -1 en caso de error y asigna a
errno un valor que indica la razón del fallo. Se sobrecarga el
significado del código de error EAGAIN para indicar que ‘‘Todos los
puertos de red están en uso.’’
VÉASE TAMBIÉN
rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8)
HISTORIA
Estas funciones aparecieron en 4.2BSD.