Programmation d`un utilitaire Démon fingerd
Transcription
Programmation d`un utilitaire Démon fingerd
EXAMEN Systèmes et réseaux Mai 2009 Durée : 2 h 30 mn Documents papiers autorisés Programmation d’un utilitaire Écrire, le plus exactement possible (ponctuation, parenthèses, accolades, etc.), avec le langage de votre choix (C, sh, perl, etc.) une commande renameseq qui aurait le comportement suivant : $ ls -F a b/ c d12 $ renameseq prefix * Erreur sur b $ ls -F prefix1 b/ prefix2 prefix3 Autrement dit, le premier argument est un préfixe, les autres arguments suivants, s’ils désignent des fichiers, vont être renommés en des noms composés du préfixe et des nombres 1, 2, 3, etc. Démon fingerd Rappel : le système gère un fichier /var/adm/utmp contenant, pour chaque personne connectée, des enregistrements style : struct utmp { char ut_user[8]; char ut_line[12]; time_t ut_time; } /* user login name */ /* device name (console, lnxx) */ /* time entry was made */ Voici une recopie d’écran : trefle-beig > finger @snekkar [snekkar] Login Name TTY Idle When Where beig Jacques Beigbeder p0 2:35 Tue 08:41 trefle trefle-beig > finger beig@snekkar [snekkar] Login name: beig In real life: Jacques Beigbeder Directory: /users/spi1/beig Shell: /bin/sh On since Jun 1 08:41:42 on ttyp0 from trefle 2 hours 36 minutes Idle Time New mail received Tue Jun 1 11:18:41 2008 unread since Tue Jun 1 10:48:30 2007 Plan: gérer le système... 1 Ceci correspond à un client finger interrogeant un serveur fingerd via une connexion réseau. Les conventions entre le client et le serveur sont : – le client envoie une ligne vide pour la commande finger @host – le client envoie une ligne contenant xy pour la commande finger xy@host Donner le squelette (C ou perl) d’un démon fingerd (non lancé par inetd, i.e. résident) faisant le travail nécessaire. Squelette veut dire vraiment les grandes lignes du programme, mais avec les noms et fonctions des appels-système utiles. Le détail des arguments n’est pas demandé. Que fait. . . Soient les programmes receiver.c et sender.c ci-joints. Voici une recopie d’écran : trefle-beig > gcc -o receiver receiver.c trefle-beig > gcc -o sender sender.c trefle-beig > ./receiver & ./sender Que va afficher l’écran, et pourquoi ? Quel protocole est utilisé, cela pourrait-il être entre machines distantes ? Démon xntpd Le démon xntpd sert à mettre les machines à l’heure sur un réseau. Il fonctionne ainsi. Il lit un fichier de configuration /etc/ntp.conf lui donnant comme directive : 1. se mettre à l’heure sur une machine de référence : server 134.157.254.135 2. diffuser l’heure sur son réseau : broadcast 129.199.129.255 3. écouter l’heure diffusée par une autre machine du même réseau : broadcastclient Les cas de figure réalistes sont une machine qui fait 1. seul, 1. et 2., ou 3. seul. Le démon de la machine HOST peut être interrogé sur des variables internes via : trefle-beig > ntpq HOST ntpq> peers ntpq> (Control-D) Question 1 : quels protocoles utiliser pour réaliser cet ensemble de fonctions ? Question 2 : ci-joint un source xntpd.c ; il s’agit de la version xntp3.4x. Ont été supprimés plein de commentaires, et des parties compilés conditionnellement et non utiles. Trouver les appels-système entre les lignes 57 et 106, et donner succintement la raison de leur utilité. Question 3 : quels peuvent être les descripteurs utilisés dans l’appel select ligne 148 ? 2