Both sides previous revisionPrevious revisionNext revision | Previous revision |
sysrep:rpc [2012/11/27 14:14] – orel | sysrep:rpc [2024/03/18 15:06] (current) – external edit 127.0.0.1 |
---|
====== TP RPC ====== | ====== TP RPC ====== |
| |
Vous disposez de documentation dans le manuel Unix (man rpc, man xdr). | Vous disposez de documentation dans le manuel Unix (man rpc, man xdr), ainsi que des documents suivants : {{:sysrep:rpc-doc.pdf}} et {{:sysrep:rpc-spec.pdf}}. |
| |
| FIXME : //rpcbind (la nouvelle implantation du portmapper) ne fonctionne qu'en mode superuser et n'accepte que des services RPC lancés en mode superuser ! Pour surmonter ce problème, il faudrait pouvoir lancer rpcbind en mode "insecure" (option -i) ou utiliser des machines virtuelles ou recompiler une ancienne version de ce service qui ne travaille pas avec le port 111 (mais 1111).// |
| |
| |
</code> | </code> |
| |
- Programmer cet exemple. Pour générer tout le code source (client, serveur, makefile, stubs), vous pouvez utilisez la commande suivante : "rpcgen -a calculation.x". Il vous reste à compléter les fichiers calculation_server.c" et "calculation_client.c"... | * Programmer cet exemple. Pour générer tout le code source (client, serveur, makefile, stubs), vous pouvez utilisez la commande suivante : "rpcgen -a calculation.x". Il vous reste à compléter les fichiers calculation_server.c" et "calculation_client.c"... |
- Compiler : make -f makefile.calculation. | * Compiler : make -f makefile.calculation. |
- Tester en local sur votre machine, puis sur deux machines distantes. | * Tester en local sur votre machine, puis sur deux machines distantes. |
- Analyser le résultat de la commande "rpcinfo -p". | * Analyser le résultat de la commande "rpcinfo -p". |
- Analyser les souches de ce petit exemple. Ajouter des traces dans le code des souches afin de suivre précisément les appels à distance... | * Analyser les souches de ce petit exemple. Ajouter des traces dans le code des souches afin de suivre précisément les appels à distance... |
- Ajouter maintenant de nouvelles fonctions à votre service "calculation"... | * Ajouter maintenant de nouvelles fonctions à votre service "calculation"... |
| |
====Exercice 2 (rwall)==== | ====Exercice 2 (rwall)==== |
| |
| |
A partir de l'interface "rwall.x" qui permet d'envoyer un message. | A partir de l'interface "rwall.x" qui permet d'envoyer un message. |
</code> | </code> |
| |
- Implanter rapidement ce service. | * Implanter rapidement ce service. |
- Ecrire maintenant un client pour le service "rwall", n'utilisant | * Ecrire maintenant un client pour le service "rwall", n'utilisant pas les souches générées, grâce à la fonction "callrpc()". |
pas les souches générées, grâce à la fonction "callrpc()". | * Ecrire maintenant un serveur pour le service "rwall" n'utilisant pas les souches générées, grâce aux fonctions "registerrpc()" et "svc_run()". |
- Ecrire maintenant un serveur pour le service "rwall" | |
n'utilisant pas les souches générées, grâce aux fonctions | |
"registerrpc()" et "svc_run()". | |
| |
__Nota Bene__ : cf. man rpc | __Nota Bene__ : cf. man rpc |
====Exercice 3 (authentification)==== | ====Exercice 3 (authentification)==== |
| |
On vous fourni l'interface "hello.x", qui retourne le message "hello | On vous fourni l'interface "hello.x", qui retourne le message "hello world!" au client. |
world!" au client. | |
| |
<code c hello.x> | <code c hello.x> |
</code> | </code> |
| |
- Implantez rapidement ce service. | * Implantez rapidement ce service. |
- Modifiez le client pour qu'il utilise l'authentification Unix. | * Modifiez le client pour qu'il utilise l'authentification Unix. Aidez-vous de la documentation fournie dans {{:sysrep:rpc-doc.pdf}}. |
Aidez-vous de la documentation fournie dans doc/rpc-doc.pdf. | * Modifiez le serveur pour qu'il accepte uniquement les clients utilisant l'authentification Unix, possédant le même UID que le serveur. Vérifiez qu'un client avec un UID différent est bien rejeté ! |
- Modifiez le serveur pour qu'il accepte uniquement les clients | * Que pensez-vous de ce système d'authentification ? Mettez-en évidence que vous pouvez le contourner en modifiant le code client. |
utilisant l'authentification Unix, possédant le même UID que le | |
serveur. Vérifiez qu'un client avec un UID différent est bien | |
rejeté ! | |
- Que pensez-vous de ce système d'authentification ? Mettez-en | |
évidence que vous pouvez le contourner en modifiant le code | |
client. | |
| |