next up previous
suivant: Detail du comportement monter: IFT6891 : Projet intégrateur précédent: IFT6891 : Projet intégrateur

Serveur

Le serveur accepte des commandes GET selon le protocole HTTP. En général, le serveur retourne au client le contenu du fichier indiqué dans le GET, mais le traitement exact depend de l'extention du fichier demandé. Vous devez pouvoir traiter les types de fichiers suivants ( et retourner le "type" approprié dans l'en-tête de la réponse):

   .html ou .htm 	( retourner text/html).
   .txt, .c, .java      ( ... text/plain)
   .gif                 ( ... image/gif).
   .jpg ou jpeg         ( ... image/jpeg).
   .pdf                 ( ... application/pdf).

Si le fichier demandé est un répertoire, votre serveur doit se comporter comme un serveur WEB et afficher le fichier "index.html" (ou ``index.htm'') du répertoire. S'il n'existe pas de fichier pourtant un de ces deux noms, il faut alors retourner une liste des fichiers contenuent dans le répertoire (il faut retourner une page html avec une liste de liens vers les fichiers dans le repertoire). Note: vous pourrez utiliser la fonction stat() pour vérifier si un fichier est un répertoire.

Si le client demande un fichier d'un autre type que ceux énumérés ci-dessus, votre serveur doit refuser la requête en envoyant un message d'erreur approprié dans un fichier html.

Dans l'environnement du DIRO, chaque usager à la possibilité d'avoir un petit site web. Les fichiers de ce site web se trouvent dans le répertoire $HOME/HTML/. Notre serveur va donc utiliser ce répertoire pour y chercher ces fichiers. Le PATH donne dans le GET est donc consideré comme étant relatif au répertoire WWW du serveur du DIRO, c'est à dire que votre serveur trouve les fichiers en concatenant le Path du GET avec $HOME/HTML/Projet.

NOTE IMPORTANTE La fonction suivante devra être utilisée afin d'éviter qu'un client quelconque puisse lister tous vos fichiers privés. L'idée est de s'assurer que les appelés se trouvent bel et bien dans le répertoire HTML.

int fichierDangereux(char *strFile)
{
   int i, nLength;

   nLength = strlen(strFile) - 1;

   if (*strFile == '/') return 1;

   for(i = 0; i < nLength; i++)
      if (strFile[i] == '.' && strFile[i+1] == '.')
         return 1;
   return 0;
}

Cette fonction retournera TRUE si le path soumis contiend des "..". Dans ce cas, c'est qu'un client essait d'accéder à un fichier interdit. Vous devez alors retourner un message d'erreur dans un fichier HTML.



Sous-sections
next up previous
suivant: Detail du comportement monter: IFT6891 : Projet intégrateur précédent: IFT6891 : Projet intégrateur
Victor Ostromoukhov 2001-12-03