RCMD(3)

NOME
rcmd, rresvport, iruserok, ruserok - rotina para o retorno de fluxo para um comando remoto

SINÓPSE
#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)

DESCRIÇÃO
A função rcmd() é usada pelo super-usuário para executar um comando em uma maquina remota usando um esquema de autenticação baseado em números de portas reservados. A função rresvport() retorna um descritor para um 'socket' com um endereço no espaço priveligiado. As funções iruserok() e ruserok() são usadas por servidores para autenticar clientes solicitando serviço com rcmd(). Todas as quatro funções estão presentes no mesmo arquivo e são usadas pelo servidor rshd(8) (entre outros).

A função rcmd() procura pelo host *ahost usando gethostbyname(3), retornando -1 se o host não existir. De outro modo *ahost é colocado para o nome padrão do host e a conexão é estabelecida para um servidor residindo em uma porta da Internet bem conhecida inport.

Se a conexão for bem sucedida, um 'socket' em um tipo de domínio na Internet SOCK_STREAM é retornado ao solicitante, e dado ao comando remoto como stdin e stdout. Se fd2p mão for zero, então um canal auxiliar para controlar o processo será iniciado, e um descritor para ele será colocado em *fd2p. O controle de processo retornará saída de diagnóstico da comando (unidade 2) neste canal, e também serão aceitados bytes neste canal como sendo UNIX números de sinais, para serem enviados ao processo de grupo do comando. Se fd2p for 0, então stderr (unidade 2 do comando remoto) será feito o mesmo como o stdout e nenhuma provisão é feita para enviar sinais arbitrários para o processo remoto, apesar que você pode conseguir a atenção dele usando dados fora da faixa.

O protocolo é descrito em detalhes em rshd(8).

A função rresvport() é usada para obter um 'socket' com o endereço privilegiado ligado à ele. Este 'socket' é adequado para ser utilizado por rcmd() e diversar outras funções. Postas de Internet Privilegiadas são aquelas entre 0 e 1023. Somente o super-usuário tem permissão para conectar um endereço deste tipo à um 'socket'.

A funções iruserok() e ruserok() tomam um enderaçe IP ou nome do 'host' remoto, respectivamente, dois nomes de usuário e um sinalizador indicando se o nome do usuário local é aquele do super-usuário. Então, se o usuário NÃO é o super-usuário, ele irá checar o arquivo /etc/hosts.equiv Se esta procura não for feita, ou não é bem sucedida, o .rhosts no diretório 'home' do usuário local será examinado para ver se o serviço solicitado é permitido.

Se este arquivo não existir, ele não é um arquivo normal, ele pertence à alguem que não é o usuário ou o super-usuário, ou se ele tem permissão de escrita por alguém além do proprietário, a verificação falha automaticamente. Zero é retornado se o nome da máquina no arquivo, “hosts.equiv” ou o 'host' e o usuário remoto são encontrados no arquivo; “.rhosts” de outro modo iruserok() e ruserok() retornam -1. Se o domínio local (como o obtido de gethostname(2)) é o mesmo do que o domínio remoto, somente o nome da máquina precisa ser especificado.

Se o endereço IP do 'host' remoto é conhecido, iruserok() deveria ser utilizado, preferencialmente à ruserok(), já que ele não requer verificação do servidor de DNS para o domínio do 'host' do servidor remoto.

DIAGNÓSTICOS
A função rcmd() retorna um descritor de 'socket' válido no caso de sucesso. Ele retorna -1 no caso de erro e imprime uma mensagem de diagnóstico na saída de erro padrão.

A função rresvport() retorna um descritor de conexão de 'socket' valido, no caso de sucesso. Ela retorna -1 no erro de um valor global errno ajustado de acordo com a razão da falha. O código de erro EAGAIN é sobrecarregado para significar ``Todas as portas da rede estão em uso.''

VEJA TAMBÉM
rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8).

HISTÓRICO
Estas funções aparecerão no BSDBSD 4.2.

  Tradução:
Ricardo C.O.Freitas <english.quest@best-service.com>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>