Provided by: manpages-fr-dev_3.65d1p1-1_all 

NOM
rcmd, rresvport, iruserok, ruserok, rcmd_af, rresvport_af, iruserok_af, ruserok_af - 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);
int rcmd_af(char **ahost, int inport, const char *locuser,
const char *remuser, const char *cmd, int *fd2p,
sa_family_t af);
int rresvport_af(int *port, sa_family_t af);
int iruserok_af(uint32_t raddr, int superuser,
const char *ruser, const char *luser, sa_family_t af);
int ruserok_af(const char *rhost, int superuser,
const char *ruser, const char *luser, sa_family_t af);
Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :
rcmd(), rcmd_af(), rresvport(), rresvport_af(), iruserok(), iruserok_af(), ruserok(), ruserok_af() :
_BSD_SOURCE
DESCRIPTION
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 utilisées (entre autres) par le
serveur rshd(8).
rcmd()
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).
rresvport()
La fonction rresvport() est utilisée pour obtenir une socket attachée à un port privilégié. Cette socket
est utilisable ensuite pour rcmd() et plusieurs autres fonctions. Les numéros de ports privilégiés se
trouvent dans l'intervalle 0 à 1023. Seul un processus privilégié (CAP_NET_BIND_SERVICE) a le droit de
s'associer à un port privilégié. Dans l'implémentation de la glibc, cette fonction restreint sa recherche
du port 512 au port 1023. L'argument port est valeur-résultat : la valeur qu'il fournit à l'appel est
utilisée comme point de départ pour une recherche circulaire de l'intervalle de port ; au retour (en cas
de réussite), il contient le numéro de port avec lequel il a été associé.
iruserok() et ruserok()
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 cela é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, iruserok() sera préférée à ruserok(), car elle ne nécessite
pas d'avoir un serveur DNS digne de confiance pour le domaine distant.
Variantes *_af()
Toutes les fonctions décrites ci-dessus fonctionnent avec des sockets IPv4 (AF_INET). Les variantes
« _af » prennent un argument supplémentaire qui permet d'indiquer la famille d'adresse de socket. Pour
ces fonctions, l'argument af peut être indiqué comme AF_INET ou AF_INET6. De plus, rcmd_af() permet
d'utiliser AF_UNSPEC.
VALEUR RENVOYÉE
La fonction rcmd() renvoie un descripteur de socket valable 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 valable, 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 ci-dessus pour des renseignements sur les valeurs renvoyées par ruserok() et iruserok().
VERSIONS
Les fonctions iruserok_af(), rcmd_af(), rresvport_af() et ruserok_af() sont fournies dans la glibc depuis
la version 2.2.
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. Les variantes « _af » sont des ajouts plus récents, et ne sont pas présentes sur
de nombreux systèmes.
BOGUES
iruserok() et iruserok_af() ne sont déclarées dans les fichiers d'en-tête de la glibc que depuis la
version 2.12.
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.65 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
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
<http://manpagesfr.free.fr/> (2003-2006). Nicolas François et l'équipe francophone de traduction de
Debian (2006-2009).
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> ».
Linux 23 avril 2012 RCMD(3)