piffy

Demo CGI (C)

Aug 12th, 2015
310
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int parse( char *s )
  7. {
  8.     char *vname;
  9.     char *val;
  10.     int c;
  11.     char buf[3];
  12.  
  13.     if(!s) {
  14.         printf("Elemento nullo'\n");
  15.         return;
  16.     }
  17.     vname = s;
  18.     while(*s && (*s != '=')) s++;
  19.     if(!*s) {
  20.         printf("Assegnazione nulla'\n");
  21.         return;
  22.     }
  23.     *(s++) = '\0';
  24.      
  25.     printf("<p>%s='",vname);
  26.  
  27.     for(val=s; *val; val++) {    
  28.         switch( *val ) {
  29.             case '%':
  30.                 buf[0]=*(++val); buf[1]=*(++val);
  31.                 buf[2]='\0';
  32.                 sscanf(buf,"%2x",&c);
  33.                 break;
  34.             case '+':
  35.                 c = ' ';
  36.                 break;
  37.             default:
  38.                 c = *val;
  39.         }
  40.  
  41.         switch(c) {
  42.             case '\\': printf("\\\\"); break;
  43.             case '\'': printf("\\'"); break;
  44.             case '\n': printf("\\n"); break;
  45.             default:   putchar((char)c); break;
  46.         }
  47.     }
  48.  
  49.     printf("'</p>\n");
  50. }
  51.  
  52. main()
  53. {
  54.     char *query_string;
  55.     char *elemento;
  56.     printf("Content-Type:text/html\n\n");
  57.     printf("<html><head><title>Parametri di un form</title></head><body>\n");
  58.  
  59.     query_string = (char *)getenv("QUERY_STRING");
  60.  
  61.     if(!query_string) {
  62.         printf("X_ERR='QUERY_STRING non valida'\n");
  63.         exit(0);
  64.     }
  65.  
  66.     elemento = strtok(query_string,"&");
  67.     while( elemento ) {
  68.         parse(elemento);
  69.         elemento = strtok(NULL,"&");
  70.     }
  71.         printf("</body></html>\n");
  72. }
RAW Paste Data