rcmd   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (3)
Updated: 28 décembre 2007
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
rcmd, rresvport, iruserok, ruserok - Routines renvoyant un flux de données pour une commande invoquée à distance  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#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 fonctionalités pour la glibc (voir feature_test_macros(7)) :

rcmd(), rresvport(), ruserok() : _BSD_SOURCE  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
La fonction rcmd() est utilisée par le superutilisateur 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 rcmd().

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 Internet, 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éros de signaux 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. 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
La fonction rcmd() renvoie un descripteur de socket valide si elle réussit, sinon elle renvoie -1 et affiche un message 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 ».  




CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
iruserok() n'est pas déclarée dans les entêtes de la glibc.  



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 31 mai 1998 et révisée le 8 janvier 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 rcmd ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
CONFORMITÉ
BOGUES
VOIR AUSSI
TRADUCTION

Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:51:08, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional