rcmd(3) Library Functions Manual rcmd(3) NOM rcmd, rresvport, iruserok, ruserok, rcmd_af, rresvport_af, iruserok_af, ruserok_af -- Routines renvoyant un flux de donnees pour une commande invoquee a distance BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Ou sur certains systemes */ int rcmd(char **restrict ahost, unsigned short inport, const char *restrict locuser, const char *restrict remuser, const char *restrict cmd, int *restrict 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 **restrict ahost, unsigned short inport, const char *restrict locuser, const char *restrict remuser, const char *restrict cmd, int *restrict fd2p, sa_family_t af); int rresvport_af(int *port, sa_family_t af); int iruserok_af(const void *restrict raddr, int superuser, const char *restrict ruser, const char *restrict 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 fonctionnalites pour la glibc (consulter feature_test_macros(7)) : rcmd(), rcmd_af(), rresvport(), rresvport_af(), iruserok(), iruserok_af(), ruserok(), ruserok_af() : Depuis la glibc 2.19 : _DEFAULT_SOURCE glibc 2.19 et anterieures : _BSD_SOURCE DESCRIPTION La fonction rcmd() est utilisee par le superutilisateur pour executer une commande sur une machine distante, en utilisant un schema d'identification base sur des numeros de ports privilegies. La fonction rresvport() renvoie un descripteur de fichier sur un socket se trouvant dans l'espace des numeros de ports privilegies. Les fonctions iruserok() et ruserok() sont utilisees par les serveurs pour authentifier les clients demandant un service avec rcmd(). Les quatre fonctions sont utilisees (entre autres) par le serveur rshd(8). rcmd() La fonction rcmd() recherche l'hote *ahost en utilisant gethostbyname(3), puis renvoie -1 si cet hote n'existe pas. Sinon, *ahost est rempli avec le nom standard de cet hote et une connexion est etablie avec un serveur se trouvant sur l'un des ports bien connus inport. Si la connexion reussit, un socket dans le domaine Internet de type SOCK_STREAM est renvoye a l'appelant et est fourni a la commande distante en guise de stdin et stdout. Si fd2p est different de zero, un canal auxiliaire est cree pour un processus de controle, et son descripteur place dans *fd2p. Le processus de controle renverra les sorties de sera diagnostic (numero 2) sur ce canal, et acceptera egalement des octets qu'il considerera comme des numeros de signal UNIX a envoyer au groupe de processus de la commande. Si fd2p est 0, alors stderr (sortie numero 2 de la commande distante) sera renvoyee sur stdout et rien n'est prevu pour l'envoi de signaux arbitraires au processus distant, bien que vous puissiez y parvenir en utilisant des donnees hors-bande. Le protocole est decrit en detail dans rshd(8). rresvport() La fonction rresvport() est utilisee pour obtenir un socket attache a un port privilegie. Ce socket est utilisable ensuite pour rcmd() et plusieurs autres fonctions. Les numeros de ports privilegies se trouvent dans l'intervalle 0 a 1023. Seul un processus privilegie (CAP_NET_BIND_SERVICE) a le droit de s'associer a un port privilegie. Dans l'implementation de la glibc, cette fonction restreint sa recherche du port 512 au port 1023. L'argument port est valeur-resultat : la valeur qu'il fournit a l'appel est utilisee comme point de depart pour une recherche circulaire de l'intervalle de port ; au retour (en cas de reussite), il contient le numero de port avec lequel il a ete associe. iruserok() et ruserok() Les fonctions iruserok() et ruserok() prennent respectivement en argument un nom ou une adresse IP d'hote distant, deux noms d'utilisateurs et un drapeau indiquant si l'utilisateur local est le superutilisateur << superuser >>. Ainsi, si l'utilisateur n'est pas le superutilisateur, elles verifient le fichier /etc/hosts.equiv. Si cela echoue, le fichier .rhosts est recherche dans le repertoire personnel de l'utilisateur local, afin de voir si la requete est autorisee. Si ce fichier n'existe pas, s'il ne s'agit pas d'un fichier ordinaire, s'il appartient a quelqu'un d'autre que l'utilisateur local ou le superutilisateur, ou encore s'il est accessible en ecriture par quelqu'un d'autre que son proprietaire, le test echoue automatiquement. Si la machine est listee dans le fichier hosts.equiv, ou si les noms d'hote et d'utilisateur distants sont trouves dans le fichier .rhosts, iruserok() et ruserok() renvoient zero. Sinon elles renvoient -1. Si le domaine local (obtenu par l'intermediaire de gethostname(2)) est le meme que le domaine distant, seul le nom de machine a besoin d'etre indique. Si l'adresse IP de l'hote distant est connue, iruserok() sera preferee a ruserok(), car elle ne necessite pas d'avoir un serveur DNS digne de confiance pour le domaine distant. Variantes *_af() Toutes les fonctions decrites ci-dessus fonctionnent avec des sockets IPv4 (AF_INET). Les variantes << _af >> prennent un argument supplementaire qui permet d'indiquer la famille d'adresse de socket. Pour ces fonctions, l'argument af peut etre indique comme AF_INET ou AF_INET6. De plus, rcmd_af() permet d'utiliser AF_UNSPEC. VALEUR RENVOYEE La fonction rcmd() renvoie un descripteur de socket valable si elle reussit, 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, attache a une adresse privilegiee si elle reussit. Elle renvoie -1 sinon, et errno contient le code d'erreur. Le code d'erreur EAGAIN signifie en realite << Tous les ports reseau sont deja utilises >>. Voir ci-dessus pour des renseignements sur les valeurs renvoyees par ruserok() et iruserok(). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |rcmd(), rcmd_af() | Securite des threads | MT-Unsafe | +--------------------------+--------------------------+----------------+ |rresvport(), | Securite des threads | MT-Safe | |rresvport_af() | | | +--------------------------+--------------------------+----------------+ |iruserok(), ruserok(), | Securite des threads | MT-Safe locale | |iruserok_af(), | | | |ruserok_af() | | | +--------------------------+--------------------------+----------------+ STANDARDS BSD. HISTORIQUE iruserok_af() rcmd_af() rresvport_af() ruserok_af() glibc 2.2. Solaris, 4.2BSD. Les variantes << _af >> sont des ajouts plus recents et ne sont pas presentes sur de nombreux systemes. BOGUES iruserok() et iruserok_af() ne sont declarees dans les fichiers d'en-tete de la glibc que depuis la glibc 2.12. VOIR AUSSI rlogin(1), rsh(1), rexec(3), rexecd(8), rlogind(8), rshd(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et bubu Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.15 17 mai 2025 rcmd(3)