[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gethostbyname()



La fonction gethostbyname() fait partie des fonctions de sockets standards, fournie généralement par le système d'exploitation (Sous Unix et Linux en tout cas, sous Windows il s'agit d'une des fonctions des Windows sockets <winsock.h>, et pour ceux qui ont encore Windows 3.1x, il faut pour qu'elle fonctionne installer une pile de protocoles réseaux TCP/IP).

La fonction sert à obtenir la (ou les) adresses TCP/IP associées à un hôte dont on connait le nom. Elle utilise diverses sources d'information pour y parvenir:
- le nom de la machine locale (tel qu'affiché par des outils comme uname), et la liste des interfaces réseaux configurées sur la machine locale (dont l'adresse 127.0.0.1 associée généralement à l'interface interne de "loopback", qui ne nécessite pas de transfert de données vers une interface physique).
- un fichier comme "/etc/hosts" (ou "C:\WINDOWS\hosts" sous Windows) contenant une liste de noms d'hôtes et leur adresse IP associée
- la configuration du système de résolution de noms DNS, qui permet d'interroger un serveur DNS contenant ces informations et accessible à une adresse IP connue
- les autres systèmes de résolution de noms, tels que NIS et NIS+, qui gèrent diverses bases de données de noms dont les noms d'hôtes, de domaines, d'utilisateurs, de groupes, de services, de protocoles, de familles d'adresse, etc...

La résolution du nom utilise ces différentes sources avec un ordre de priorité, généralement défini sous Unix avec des fichiers de configuration tels que "/etc/nsswitch.conf", qui précise dans quel ordre interroger les sources d'informations pour résoudre les demandes de noms. Généralement, la configuration standard privilégie les sources d'information locales avant les sources distantes, pour assurer à la fois la sécurité du système (on fait plus confiance aux informations sélectionnées localement, qu'aux données provenant d'un système distant que l'on ne peut pas administrer), et la rapidité des accès.

Quand la fonction ne trouve pas le nom demandé après avoir interroger les différentes sources possibles, elle retourne une erreur. Si le serveur DNS et/ou le serveur NIS n'ont pas été configurés sur la machine, la fonction se sert uniquement de la résolution locale, via le fichier "/etc/hosts". Si ce fichier n'existe pas non plus, le système ne peut pas résoudre le nom indiqué et la fonction retourne une erreur. Si la configuration est correcte, mais que le nom ne peut pas être trouvé (souvent à cause d'un problème d'ambiguité, ou d'oubli de la spécification du domaine associé au nom d'hôte), il en sera de même.

Dans ton cas, gethostbyname() est utilisé par sudo pour vérifier les droits d'accès à ses fonctions, car normalement c'est une fonction privilégiée, nécessitant une authorisation avant d'accéder à un autre compte utilisateur. Hors cette authorisation ne peut être fournie automatiquement que si l'utilisateur est connecté depuis un compte dit "de confiance" (tel qu'autorisé par l'administrateur du système). La vérification des droits d'accès cherche donc à vérifier si l'addès se fait depuis la machine locale (dans ce cas, les droits d'accès sont vérifiés localement depuis la base locale d'informations sur l'utilisateur connecté), ou depuis une machine distante autorisée par l'administrateur.

Dans ton cas, il semble que le nom local de ta machine "DreadKnight" soit incorrectement configuré dans toutes les couches du système. Si tu viens de changer le nom de la machine (vérifie ce nom affiché par "uname -n"), il faut peut-être redémarrer la machine pour que l'ensemble des services réseaux soient redémarrés en considérant le nouveau nom. Mais il est possible également que le client NIS ou DNS soient mal configuré, et indique un serveur de résolution de nom inaccessible. Vérifie aussi si les interfaces réseaux sont bien démarrées et configurées avec une commande de type "ifconfig -a" (les interfaces doivent être "UP" et "RUNNING", et leurs adresses réseaux bien définies, et avec le bon netmask, pour permettre d'atteindre un éventuel autre serveur NIS ou DNS...). Vérifies que tu "ping'es" bien les serveurs voulus sinon revérifies la configuration de tes interfaces réseaux.

Bon courage.

----- Original Message ----- 
From: "Eric LeBlanc" <inouk@igt.net>
To: <debian-french@lists.debian.org>
Sent: Thursday, June 01, 2000 5:00 AM
Subject: gethostbyname()


Bonjour!

J'ai une question bêbête... la fonction gethostbyname() provient de 
quel fichier, et de quel package?

car:

DreadKnight:/usr/include$ sudo -s 
sudo: unable to lookup DreadKnight via gethostbyname(): No such file or directory
Segmentation fault

Je vous remercie!

Rick

-----
Eric LeBlanc
inouk@igt.net
--------------   
  "Well, let's just say, 'if your VCR is still blinking 12:00, you don't
   want Linux'".

          --- Bruce Perens, Debian's Fearless Leader
                        ------------


--  
To UNSUBSCRIBE, email to debian-french-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org




Reply to: