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