User Tools

Site Tools


sysrep:rpc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sysrep:rpc [2012/11/21 15:05] – created orelsysrep:rpc [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== TP RPC ====== ====== TP RPC ======
  
 +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).//
  
-Vous disposez de documentation dans le répertoire doc/ ainsi que du man. 
  
 ==== Exercice 1 (calculation) ==== ==== Exercice 1 (calculation) ====
Line 9: Line 11:
 On vous fourni l'interface "calculation.x". On vous fourni l'interface "calculation.x".
  
-  * Programmer cet exemple. Pour générer tout le code source (client, +<code c calculation.x> 
-    serveur, makefile, stubs), vous pouvez utilisez la commande +struct two_int { 
-    suivante : "rpcgen -calculation.x". Il vous reste à compléter +    int a; 
-    les fichiers "calculation_server.c" et "calculation_client.c"...+    int b; 
 +}; 
 +program CALCULATION_PROG { 
 +    version CALCULATION_VERS_BASE { 
 + int sum(two_int)=1; 
 +    }=1; 
 +}=0x20000000; 
 +</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"...
   * 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 +  * Ajouter maintenant de nouvelles fonctions à votre service "calculation"...
-    le code des souches afin de suivre précisément les appels à +
-    distance... +
- +
-  * 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 c rwall.x>
 +program WALLPROG {
 + version WALLVERS {
 + void WALLPROC_WALL(string) = 2;
 + } = 1;
 +} = 0x20000008;
 +</code>
  
   * Implanter rapidement ce service.   * Implanter rapidement ce service.
 +  * Ecrire maintenant un client pour le service "rwall", n'utilisant 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 client pour le service "rwall", n'utilisant +__Nota Bene__ : cfman rpc
-    pas les souches générées, grâce à la fonction "callrpc()"+
  
-  * Ecrire maintenant un serveur pour le service "rwall" +====Exercice 3 (authentification)====
-    n'utilisant pas les souches générées, grâce aux fonctions +
-    "registerrpc()" et "svc_run()".+
  
-Nota Bene : cfman rpc+On vous fourni l'interface "hello.x", qui retourne le message "hello world!" au client
  
-====Exercice 3 (authentification)==== +<code c hello.x> 
- +program HELLOPROG { 
-On vous fourni l'interface "hello.x", qui retourne le message "hello + version HELLOVERS { 
-world!" au client. + string HELLO(void) = 1; 
 +1; 
 +0x30000824; 
 +</code>
  
   * Implantez rapidement ce service.    * Implantez rapidement ce service. 
- +  * Modifiez le client pour qu'il utilise l'authentification Unix. Aidez-vous de la documentation fournie dans {{:sysrep:rpc-doc.pdf}}
-  * Modifiez le client pour qu'il utilise l'authentification Unix.  +  * 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é ! 
-    Aidez-vous de la documentation fournie dans doc/rpc-doc.pdf. +  * Que pensez-vous de ce système d'authentification ? Mettez-en évidence que vous pouvez le contourner en modifiant le code client.
- +
-  * 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é ! +
- +
-  * Que pensez-vous de ce système d'authentification ? Mettez-en +
-    évidence que vous pouvez le contourner en modifiant le code +
-    client. +
sysrep/rpc.1353510327.txt.gz · Last modified: 2024/03/18 15:05 (external edit)