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