NOM
rcmd, rresvport, iruserok, ruserok - Routines renvoyant un flux de
données pour une commande invoquée à distance
SYNOPSIS
#include <netdb.h> /* Ou <unistd.h> sur certains systèmes */
int rcmd(char **ahost, int inport, const char *locuser,
const char *remuser, const char *cmd, int *fd2p);
int rresvport(int *port);
int iruserok(uint32_t raddr, int superuser,
const char *ruser, const char *luser);
int ruserok(const char *rhost, int superuser,
const char *ruser, const char *luser);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
rcmd(), rresvport(), ruserok() : _BSD_SOURCE
La fonction rcmd() est utilisée par le superutilisateur pour exécuter
une commande sur une machine distante, en utilisant un schéma
d’identification basé sur des numéros de ports privilégié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 rcmd(). Les quatre 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 Internet 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
diagnostic (numéro 2) sur ce canal, et acceptera également des octets
qu’il considérera comme des numéros 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).
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 fonctions. Les numéros de ports Internet
privilégiés se trouvent dans l’intervalle 0 à 1023. Seul le
superutilisateur 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’utilisateur local est
superutilisateur « superuser ». Ainsi, si l’utilisateur n’est pas le
superutilisateur, 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 superutilisateur, 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, iruserok() et ruserok() 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.
VALEUR RENVOYÉE
La fonction rcmd() renvoie un descripteur de socket valide si elle
réussit, sinon elle renvoie -1 et affiche un message de diagnostic 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 ».
CONFORMITÉ
Pas dans POSIX.1-2001. Présentes sur les BSD, Solaris et beaucoup
d’autres systèmes. Ces fonctions sont apparues dans BSD 4.2.
BOGUES
iruserok() n’est pas déclarée dans les fichiers d’en-tête de la glibc.
VOIR AUSSI
rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Nicolas François
<nicolas.francois@centraliens.net> et l’équipe francophone de
traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».