This patch adds support for handling HTTP PUT requests for CGIs
only. They are basically just like POST.


-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + [EMAIL PROTECTED]
diff -c -r mathopd-1.5p2/src/mathopd.h mathopd-1.5p2-jeske/src/mathopd.h
*** mathopd-1.5p2/src/mathopd.h Mon Feb 23 07:01:13 2004
--- mathopd-1.5p2-jeske/src/mathopd.h   Wed Mar 24 14:15:13 2004
***************
*** 80,86 ****
        M_UNKNOWN,
        M_HEAD,
        M_GET,
!       M_POST
  };
  
  enum connection_state {
--- 80,87 ----
        M_UNKNOWN,
        M_HEAD,
        M_GET,
!       M_POST,
!       M_PUT
  };
  
  enum connection_state {
diff -c -r mathopd-1.5p2/src/request.c mathopd-1.5p2-jeske/src/request.c
*** mathopd-1.5p2/src/request.c Fri Feb 13 06:43:28 2004
--- mathopd-1.5p2-jeske/src/request.c   Wed Mar 24 14:14:55 2004
***************
*** 57,62 ****
--- 57,64 ----
  static const char m_get[] =                   "GET";
  static const char m_head[] =                  "HEAD";
  static const char m_post[] =                  "POST";
+ static const char m_put[] =                   "PUT";
+ 
  
  static time_t timerfc(const char *s)
  {
***************
*** 533,541 ****
                return process_cgi(r);
        if (r->status)
                return 0;
!       if (r->method == M_POST) {
                if (debug)
!                       log_d("POST to specialty rejected");
                r->status = 405;
                return 0;
        }
--- 535,543 ----
                return process_cgi(r);
        if (r->status)
                return 0;
!       if (r->method == M_POST || r->method == M_PUT) {
                if (debug)
!                       log_d("POST/PUT to specialty rejected");
                r->status = 405;
                return 0;
        }
***************
*** 598,607 ****
                r->status = 404;
                return 1;
        }
!       if (r->method == M_POST) {
                close_rfd(r);
                if (debug)
!                       log_d("POST to file rejected");
                r->status = 405;
                return 0;
        }
--- 600,609 ----
                r->status = 404;
                return 1;
        }
!       if (r->method == M_POST || r->method == M_PUT) {
                close_rfd(r);
                if (debug)
!                       log_d("POST/PUT to file rejected");
                r->status = 405;
                return 0;
        }
***************
*** 666,672 ****
  
        d = 0;
        v = r->cn->s->children;
!       if (r->host)
                while (v) {
                        if (v->host) {
                                if (strcmp(r->host, v->host) == 0)
--- 668,675 ----
  
        d = 0;
        v = r->cn->s->children;
!       if (r->host && r->host[0]) {
!         log_d("find specific host '%s'!",r->host);
                while (v) {
                        if (v->host) {
                                if (strcmp(r->host, v->host) == 0)
***************
*** 675,686 ****
                                d = v;
                        v = v->next;
                }
!       else
                while (v) {
!                       if (v->host == 0 && v->anyhost == 0)
                                break;
                        v = v->next;
                }
        if (v == 0) {
                if (d == 0)
                        return -1;
--- 678,693 ----
                                d = v;
                        v = v->next;
                }
!       } else {
!                 log_d("find anyhost!");
                while (v) {
!                 log_d("testing host: %s anyhost:%d", v->host,v->anyhost);
!                       if (v->anyhost == 1)
                                break;
                        v = v->next;
                }
+                 log_d("failed to find anyhost!");
+         }
        if (v == 0) {
                if (d == 0)
                        return -1;
***************
*** 861,869 ****
                        if (r->status)
                                return 1;
                        if (r->path_args[1] == 0 && r->c->auto_index_command) {
!                               if (r->method == M_POST) {
                                        if (debug)
!                                               log_d("POST to AutoIndexCommand 
rejected");
                                        r->status = 405;
                                        return 0;
                                }
--- 868,876 ----
                        if (r->status)
                                return 1;
                        if (r->path_args[1] == 0 && r->c->auto_index_command) {
!                               if (r->method == M_POST || r->method == M_PUT) {
                                        if (debug)
!                                               log_d("POST/PUT to AutoIndexCommand 
rejected");
                                        r->status = 405;
                                        return 0;
                                }
***************
*** 1185,1191 ****
                        r->method = M_HEAD;
                else if (strcmp(s, m_post) == 0)
                        r->method = M_POST;
!               else {
                        if (debug)
                                log_d("method \"%s\" not implemented", s);
                        r->status = 501;
--- 1192,1200 ----
                        r->method = M_HEAD;
                else if (strcmp(s, m_post) == 0)
                        r->method = M_POST;
!               else if (strcmp(s, m_put) == 0)
!                 r->method = M_PUT;
!                 else {
                        if (debug)
                                log_d("method \"%s\" not implemented", s);
                        r->status = 501;
***************
*** 1286,1295 ****
                        if (parse_range_header(r, s) == -1)
                                log_d("ignoring Range header \"%s\"", s);
                }
!       } else if (r->method == M_POST) {
                if (r->in_content_length == 0) {
                        if (debug)
!                               log_d("POST: length required");
                        r->status = 411;
                        return 0;
                }
--- 1295,1304 ----
                        if (parse_range_header(r, s) == -1)
                                log_d("ignoring Range header \"%s\"", s);
                }
!       } else if (r->method == M_POST || r->method == M_PUT) {
                if (r->in_content_length == 0) {
                        if (debug)
!                               log_d("POST/PUT: length required");
                        r->status = 411;
                        return 0;
                }

Reply via email to