rcmd
Section: C Library Functions (3)
Updated: 5 février 2023
Index
Return to Main Contents
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
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <netdb.h> /* Ou <unistd.h> sur certains systèmes */
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,
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 fonctionnalités 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 antérieures :
_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 de fichier sur un 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 authentifier 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, un socket dans le domaine Internet de type
SOCK_STREAM est renvoyé à l'appelant et est fourni à 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 un socket attaché à un
port privilégié. Ce 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 un nom ou une adresse IP d'hôte 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 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, s'il ne s'agit pas d'un fichier ordinaire, 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 depuis la glibc 2.2.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface | Attribut | Valeur
|
rcmd(),
rcmd_af()
| Sécurité des threads | MT-Unsafe
|
rresvport(),
rresvport_af()
| Sécurité des threads | MT-Safe
|
iruserok(),
ruserok(),
iruserok_af(),
ruserok_af()
| Sécurité des threads | MT-Safe locale
|
STANDARDS
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 glibc 2.12.
VOIR AUSSI
rlogin(1), rsh(1), rexec(3), rexecd(8), rlogind(8),
rshd(8)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
bubu <bubub@no-log.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- rcmd()
-
- rresvport()
-
- iruserok() et ruserok()
-
- Variantes *_af()
-
- VALEUR RENVOYÉE
-
- VERSIONS
-
- ATTRIBUTS
-
- STANDARDS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 04:40:38 GMT, May 18, 2024