home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / com / internet / sting / shttpd20 / demo / cgi-src / passutil / main.c next >
Encoding:
C/C++ Source or Header  |  1997-10-14  |  4.2 KB  |  193 lines

  1. /*------------------------------------------------
  2. //
  3. // Module: main.c
  4. //
  5. // Objet : source principale de la d‚mo m‚thodes GET et POST
  6. //         elle donne une id‚e sur la r‚cuperation de toute sorte
  7. //                 de paramŠtres issus d'un client.
  8. //
  9. // ToDo  : 
  10. //
  11. //
  12. //
  13. // Maintenance :
  14. //
  15. //     Auteur  : Olivier Booklage
  16. //     Version : V1.0
  17. //     Date    : 07/07/1997
  18. //     Remarq. :
  19. //
  20. //
  21. //
  22. //-----------------------------------------------*/
  23.  
  24.  
  25. /* ---       Includes externes       -- */
  26.  
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <string.h>
  30. #include    "util.h"
  31.  
  32.  
  33. /* ---       Includes internes       -- */
  34. /* --- Constantes globales internes --- */
  35.  
  36. /* Longueur maximale de la valeur d'un champ */
  37. /* Utile uniquement pour la methode GET */
  38. #define MAXGETVAL 1024
  39.  
  40. /* Longueur maximale du nom d'un champ */
  41. /* Utile uniquement pour la methode GET */
  42. #define MAXGETNAME 256
  43.  
  44. /* Nombre maximal de champs de saisie */
  45. #define MAXENTRIES 1000
  46.  
  47. /* --- Structures globales internes --- */
  48.  
  49. /* Structure pour les couples (nom du champ, valeur) */
  50. typedef struct {
  51.      char *name;
  52.      char *val;
  53. } entry;
  54.  
  55. /* --- Variables globales  internes --- */
  56.  
  57. entry entries[MAXENTRIES];
  58.  
  59. /* ---     Prototypage interne      --- */
  60.  
  61. int main(void);
  62.  
  63. /* ---         Fonctions            --- */
  64.  
  65. int main(void)
  66. {
  67. int i, items, cl;
  68. char *qs, *ql, *s, *name, *passwd;
  69. char *methode;
  70.  
  71. /* Tester l'environnement */
  72.     
  73.     if ( (methode = getenv("REQUEST_METHOD")) == NULL )
  74.     {
  75.      fputs("\aPas d'environnement 'REQUEST_METHOD'\n",stderr);
  76.      return(0);
  77.     }
  78.  
  79. /* Creation de l'entete */
  80.     
  81.     printf("Content-type: text/html\n\n");
  82.  
  83. /* Creation du corps */
  84.  
  85.     printf("<HTML>\n");
  86.     printf("<HEADER>\n");
  87.     printf("<TITLE>Et voici les données recueillies</TITLE>\n");
  88.     printf("</HEADER>\n");
  89.     printf("<BODY>\n");
  90.     printf("<H1>Les données recueillies:</H1>\n");
  91.  
  92. /* Lecture et decodage des donnees */
  93. /* A l'issue du decodage, les couples (nom du champ, valeur) */
  94. /* se trouvent dans le tableau de structures entry entries */
  95. /* L'index du dernier element du tableau est l'entier items */
  96.  
  97.  
  98.     if (!strcmp(methode,"GET"))
  99.     {
  100.     /* Methode GET -- Lecture de la variable QUERY_STRING */
  101.  
  102.         s = getenv("QUERY_STRING");
  103.         if ( s == NULL )
  104.         {
  105.             fprintf(stderr,"passutil:QUERY_STRING NULL!\n");
  106.             return(0);
  107.         }
  108.  
  109.         qs = (char*)malloc(strlen(s)+1);
  110.  
  111.         (void)strcpy(qs,s);
  112.  
  113.         for(i=0;qs[0] != '\0';i++)
  114.         {
  115.             items=i;
  116.     
  117.             /* dimensionnement de la valeur du champ */
  118.             entries[i].val=(char*)malloc(MAXGETVAL);
  119.     
  120.             /* lecture d'un couple (nom du camp, valeur)*/
  121.             getword(entries[i].val,qs,'&');
  122.     
  123.             /* conversion des plus en espaces */
  124.             plustospace(entries[i].val);
  125.     
  126.             /* conversion des codes hexxadecimaux par les */
  127.             /* caracteres correspondants */
  128.             unescape_url(entries[i].val);
  129.     
  130.             /* dimensionnement du nom du champ */
  131.             entries[i].name=(char*)malloc(MAXGETNAME);
  132.     
  133.             /* decoupage du couple (nom du champ, valeur) */
  134.             getword(entries[i].name,entries[i].val,'=');
  135.         }
  136.     }
  137.     else if (!strcmp(methode,"POST"))
  138.     {
  139.     /* Methode POST -- Lecture sur l'entree standard */
  140.  
  141.         ql = getenv("CONTENT_LENGTH");
  142.  
  143.         if ( ql == NULL )
  144.         {
  145.             fprintf(stderr,"passutil:CONTENT_LENGTH NULL!\n");
  146.             return(0);
  147.         }
  148.  
  149.         cl = atoi(ql);
  150.         if ( cl == 0 )
  151.         {
  152.             fprintf(stderr,"passutil:CONTENT_LENGTH = 0!\n");
  153.             return(0);
  154.         }
  155.  
  156.         for(i=0;cl && (!feof(stdin));i++)
  157.         {
  158.             items=i;
  159.             /* lecture d'un couple (nom du champ, valeur) */
  160.             /* sur l'entrée standard */
  161.  
  162.             entries[i].val = fmakeword(stdin,'&',&cl);
  163.  
  164.             plustospace(entries[i].val);
  165.             unescape_url(entries[i].val);
  166.  
  167.             /* decoupage du couple (nom du champ, valeur) */
  168.             entries[i].name = makeword(entries[i].val,'=');
  169.         }
  170.     }
  171.  
  172. /* Lecture de la valeur des champs le tableau entries */
  173.  
  174.     for (i=0; i<=items; i++)
  175.     {
  176.     
  177.         /* champ PASSWORD */
  178.         if (!strcmp(entries[i].name, "pwd")) passwd = entries[i].val;
  179.     
  180.         /* champ NAME */
  181.         if (!strcmp(entries[i].name, "nom")) name= entries[i].val;
  182.     }
  183.  
  184. /* Affichage des donnees */
  185. printf("<B>Nom:</B> %s <BR><B>Mot de passe:</B> %s\n", name, passwd);
  186. printf("</BODY>\n");
  187. printf("</HTML>\n");
  188.  
  189. return(0);
  190. }
  191.  
  192. /* ---          EOF                 --- */
  193.