RCMD(3) Manuel du programmeur Linux RCMD(3)
NOM
rcmd, rresvport, iruserok, ruserok - Routines renvoyant un
flux de données pour une commande invoquée à distance.
SYNOPSIS
#include <unistd.h>
int rcmd (char ** ahost, int inport, const char *locuser, c
int rresvport ( int *port);
int iruserok (u_int32_t raddr, int superuser, const char *ruser, const
int ruserok (const char *rhost, int superuser, const char *ruser, const
DESCRIPTION
La fonction rcmd est utilisée par le Super-Utilisateur
pour éxécuter une commande sur une machine distante, en
utilisant un shéma d'identification basé sur des numéros
de ports réservés.
La fonction rresvport renvoie un descripteur sur une
socket se trouvant dans l'espace des numéros de ports
privilégiés.
Les fonctions iruserok et ruserok sont utilisées par les
serveurs pour identifier les clients demandant un service
avec
Les 4 fonctions sont déclarées dans le même fichier et
sont utilisées par le serveur rshd(8) entre autres.
La fonction rcmd recherche l'hôte *ahost en utilisant
gethostbyname(3), puis renvoie -1 si cet hôte n'existe
pas. Sinon *ahost est rempli avec le nom standard de cet
hôte, et une connexion est établie avec un serveur se
trouvant sur l'un des ports bien connus inport .
Si la connexion réussit, une socket dans le domaine Inter
net, et de type SOCK_STREAM est renvoyée à l'appelant, et
est fournie à la commande distante en guise de stdin et
stdout . Si fd2p est non-nul, un canal auxiliaire est
créé pour un processus de contrôle, et son descripteur
sera placé dans *fd2p. Le processus de contrôle renverra
les sorties de diagnostique (numéro 2) sur ce canal, et
acceptera également des octets qu'il considérera comme des
numéro de signal UNIX à envoyer au groupe de processus de
la commande. Si fd2p est nul, alors stderr (sortie numéro
2 de la commande distante) sera renvoyée sur stdout et
rien n'est prévu pour l'envoi de signaux arbitraires au
processus distant, bien que vous puissiez y parvenir en
utilisant des données hors-bande.
Le protocole est décrit en détail dans rshd(8).
BSD 31 Mai 1998 1
RCMD(3) Manuel du programmeur Linux RCMD(3)
La fonction rresvport est utilisée pour obtenir une socket
attachée à une adresse privilégiée. Cette socket est
utilisable ensuite pour rcmd et plusieurs autres fonc
tions. Les numéros de ports Internet privilégiés se trou
vent dans l'intervalle 0 à 1023. Seul le Super-Utilisa
teur est autorisé à attacher une adresse de ce type à une
socket.
Les fonctions iruserok et ruserok prennent respectivement
en argument une adresse IP et un nom d'hôte distant, deux
noms d'utilisateurs et un drapeau indiquant si l'utilisa
teur local est Super-utilisateur. Ainsi, si l'utilisateur
n'est PAS le Super-Utilisateur, elles vérifient le fichier
/etc/hosts.equiv. Si ceci échoue, le fichier .rhosts est
recherché dans le répertoire personnel de l'utilisateur
local, afin de voir si la requête est autorisée.
Si ce fichier n'existe pas, ou s'il ne s'agit pas d'un
fichier régulier, ou s'il appartient à quelqu'un d'autre
que l'utilisateur local ou le super-utilisateur, ou encore
s'il est accessible en écriture par quelqu'un d'autre que
son propriétaire, le test échoue automatiquement.
Si la machine est listée dans le fichier hosts.equiv, ou
si les noms d'hôte et d'utilisateur distants sont trouvés
dans le fichier .rhosts et renvoient zéro. Sinon elles
renvoient -1. Si le domaine local (obtenu par
l'intermédiaire de gethostname(2)) est le même que le
domaine distant, seul le nom de machine a besoin d'être
indiqué.
Si l'adresse IP de l'hôte distant est connue, on utilisera
de préférence iruserok plutôt que ruserok qui nécessitent
d'avoir un serveur DNS digne de confiance pour le domaine
distant.
DIAGNOSTIQUE
La fonction rcmd renvoie un descripteur de socket valide
si elle réussit, sinon elle renvoie -1 et affiche un mes
sage de diagnostique sur sa sortie d'erreur standard.
La fonction rresvport renvoie un descripteur de socket
valide, attaché à une adresse privilégiée si elle réussit.
Elle renvoie -1 sinon, et errno contient le code d'erreur.
Le code d'erreur EAGAIN signifie en réalité ``Tous les
ports réseau sont déjà utilisés''.
VOIR AUSSI
rlogin(1), rsh(1), rexec(3), rexecd(8), rlogind(8),
rshd(8).
HISTORIQUE
Ces fonctions sont apparues dans BSD 4.2.
BSD 31 Mai 1998 2
RCMD(3) Manuel du programmeur Linux RCMD(3)
TRADUCTION
Christophe Blaess, 1998.
BSD 31 Mai 1998 3