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

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> ».