home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / CONTRIB / HTTPD / HTTPD_SO.TAR / httpd_1.3 / src / http_put.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-11  |  1.4 KB  |  59 lines

  1. /*
  2.  * http_put.c: Handles PUT
  3.  * 
  4.  * Rob McCool
  5.  * 
  6.  */
  7.  
  8. #include "httpd.h"
  9.  
  10. void handle_put(char *name, char *args, int in, FILE *out) {
  11.     struct stat finfo;
  12.     char ct_bak[MAX_STRING_LEN];
  13.  
  14.     strcpy(ct_bak,content_type); /* oop ack */
  15.     if(stat(name,&finfo) == -1) {
  16.         if(find_script("PUT",name,args,in,out))
  17.             return;
  18.         if(errno==ENOENT) {
  19.             log_reason("file does not exist",name);
  20.             unmunge_name(name);
  21.             die(NOT_FOUND,name,out);
  22.         }
  23.         else {
  24.             log_reason("file permissions deny server access",name);
  25.             unmunge_name(name);
  26.             die(FORBIDDEN,name,out);
  27.         }
  28.     }
  29.     probe_content_type(name);
  30.     if(!strcmp(content_type,CGI_MAGIC_TYPE)) {
  31.         strcpy(content_type,ct_bak);
  32.         send_cgi("PUT",name,"",args,&finfo,in,out);
  33.         return;
  34.     }
  35.     /* Not a script, do group ann thang */
  36.     die(NOT_IMPLEMENTED,"PUT to non-script",out);
  37. }
  38.  
  39.  
  40.  
  41. void put_node(char *name, char *args, int in, FILE *out) {
  42.     struct stat finfo;
  43.     int s;
  44.  
  45.     s=translate_name(name,out);
  46.  
  47.     switch(s) {
  48.       case STD_DOCUMENT:
  49.         handle_put(name,args,in,out);
  50.         return;
  51.       case REDIRECT_URL:
  52.         die(REDIRECT,name,out);
  53.       case SCRIPT_CGI:
  54.         exec_cgi_script("PUT",name,args,in,out);
  55.       default:
  56.         die(NOT_IMPLEMENTED,"NCSA script exeuction of delete",out);
  57.     }
  58. }
  59.