On Wed, Jul 27, 2016 at 12:46:56PM +0200, Michael Lechtermann wrote: > > > On 27Juli, 2016, at 12:26, Reyk Floeter <[email protected]> wrote: > > > > better? > > Yes, I could apply the patch now, however I had to make one additional > change. Now SVN appears to be working again. > > # diff -u relay_http.c.orig relay_http.c > --- relay_http.c.orig Wed Jul 27 10:43:22 2016 > +++ relay_http.c Wed Jul 27 10:43:54 2016 > @@ -376,12 +376,12 @@ > case HTTP_METHOD_DELETE: > case HTTP_METHOD_GET: > case HTTP_METHOD_HEAD: > - case HTTP_METHOD_OPTIONS: > /* WebDAV methods */ > case HTTP_METHOD_COPY: > case HTTP_METHOD_MOVE: > cre->toread = 0; > break; > + case HTTP_METHOD_OPTIONS: > case HTTP_METHOD_POST: > case HTTP_METHOD_PUT: > case HTTP_METHOD_RESPONSE:
I committed the OPTIONS diff first, also in httpd, here is the updated webdav fix. For reference. Reyk Index: usr.sbin/relayd/http.h =================================================================== RCS file: /cvs/src/usr.sbin/relayd/http.h,v retrieving revision 1.7 diff -u -p -u -p -r1.7 http.h --- usr.sbin/relayd/http.h 11 Jun 2015 18:49:09 -0000 1.7 +++ usr.sbin/relayd/http.h 27 Jul 2016 11:04:48 -0000 @@ -1,7 +1,7 @@ -/* $OpenBSD: http.h,v 1.7 2015/06/11 18:49:09 reyk Exp $ */ +/* $OpenBSD: http.h,v 1.13 2015/06/11 18:49:09 reyk Exp $ */ /* - * Copyright (c) 2012 - 2014 Reyk Floeter <[email protected]> + * Copyright (c) 2012 - 2015 Reyk Floeter <[email protected]> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -44,6 +44,32 @@ enum httpmethod { HTTP_METHOD_LOCK, HTTP_METHOD_UNLOCK, + /* WebDAV Versioning Extension, RFC 3253 */ + HTTP_METHOD_VERSION_CONTROL, + HTTP_METHOD_REPORT, + HTTP_METHOD_CHECKOUT, + HTTP_METHOD_CHECKIN, + HTTP_METHOD_UNCHECKOUT, + HTTP_METHOD_MKWORKSPACE, + HTTP_METHOD_UPDATE, + HTTP_METHOD_LABEL, + HTTP_METHOD_MERGE, + HTTP_METHOD_BASELINE_CONTROL, + HTTP_METHOD_MKACTIVITY, + + /* WebDAV Ordered Collections, RFC 3648 */ + HTTP_METHOD_ORDERPATCH, + + /* WebDAV Access Control, RFC 3744 */ + HTTP_METHOD_ACL, + + /* WebDAV Redirect Reference Resources, RFC 4437 */ + HTTP_METHOD_MKREDIRECTREF, + HTTP_METHOD_UPDATEREDIRECTREF, + + /* WebDAV Search, RFC 5323 */ + HTTP_METHOD_SEARCH, + /* PATCH, RFC 5789 */ HTTP_METHOD_PATCH, @@ -71,6 +97,22 @@ struct http_method { { HTTP_METHOD_MOVE, "MOVE" }, \ { HTTP_METHOD_LOCK, "LOCK" }, \ { HTTP_METHOD_UNLOCK, "UNLOCK" }, \ + { HTTP_METHOD_VERSION_CONTROL, "VERSION-CONTROL" }, \ + { HTTP_METHOD_REPORT, "REPORT" }, \ + { HTTP_METHOD_CHECKOUT, "CHECKOUT" }, \ + { HTTP_METHOD_CHECKIN, "CHECKIN" }, \ + { HTTP_METHOD_UNCHECKOUT, "UNCHECKOUT" }, \ + { HTTP_METHOD_MKWORKSPACE, "MKWORKSPACE" }, \ + { HTTP_METHOD_UPDATE, "UPDATE" }, \ + { HTTP_METHOD_LABEL, "LABEL" }, \ + { HTTP_METHOD_MERGE, "MERGE" }, \ + { HTTP_METHOD_BASELINE_CONTROL, "BASELINE-CONTROL" }, \ + { HTTP_METHOD_MKACTIVITY, "MKACTIVITY" }, \ + { HTTP_METHOD_ORDERPATCH, "ORDERPATCH" }, \ + { HTTP_METHOD_ACL, "ACL" }, \ + { HTTP_METHOD_MKREDIRECTREF, "MKREDIRECTREF" }, \ + { HTTP_METHOD_UPDATEREDIRECTREF, "UPDATEREDIRECTREF" }, \ + { HTTP_METHOD_SEARCH, "SEARCH" }, \ { HTTP_METHOD_PATCH, "PATCH" }, \ { HTTP_METHOD_NONE, NULL } \ } @@ -130,7 +172,8 @@ struct http_error { { 415, "Unsupported Media Type" }, \ { 416, "Range Not Satisfiable" }, \ { 417, "Expectation Failed" }, \ - /* 418-421 unassigned */ \ + { 418, "I'm a teapot" }, \ + /* 419-421 unassigned */ \ { 420, "Enhance Your Calm" }, \ { 422, "Unprocessable Entity" }, \ { 423, "Locked" }, \ @@ -142,7 +185,9 @@ struct http_error { { 429, "Too Many Requests" }, \ /* 430 unassigned */ \ { 431, "Request Header Fields Too Large" }, \ - /* 432-499 unassigned */ \ + /* 432-450 unassigned */ \ + { 451, "Unavailable For Legal Reasons" }, \ + /* 452-499 unassigned */ \ { 500, "Internal Server Error" }, \ { 501, "Not Implemented" }, \ { 502, "Bad Gateway" }, \ @@ -176,6 +221,7 @@ struct http_mediatype { { "jpeg", "image", "jpeg" }, \ { "jpg", "image", "jpeg" }, \ { "png", "image", "png" }, \ + { "svg", "image", "svg+xml" }, \ { "js", "application", "javascript" }, \ { NULL } \ } @@ -191,9 +237,13 @@ struct http_descriptor { #define query_key http_matchquery.kv_key #define query_val http_matchquery.kv_value + char *http_host; enum httpmethod http_method; int http_chunked; char *http_version; + + /* Rewritten path remains NULL if not used */ + char *http_path_alias; /* A tree of headers and attached lists for repeated headers. */ struct kv *http_lastheader; Index: usr.sbin/relayd/relay_http.c =================================================================== RCS file: /cvs/src/usr.sbin/relayd/relay_http.c,v retrieving revision 1.58 diff -u -p -u -p -r1.58 relay_http.c --- usr.sbin/relayd/relay_http.c 27 Jul 2016 11:02:41 -0000 1.58 +++ usr.sbin/relayd/relay_http.c 27 Jul 2016 11:04:48 -0000 @@ -401,13 +401,38 @@ relay_read_http(struct bufferevent *bev, case HTTP_METHOD_DELETE: case HTTP_METHOD_GET: case HTTP_METHOD_HEAD: + /* WebDAV methods */ + case HTTP_METHOD_COPY: + case HTTP_METHOD_MOVE: cre->toread = 0; break; case HTTP_METHOD_OPTIONS: - case HTTP_METHOD_PATCH: case HTTP_METHOD_POST: case HTTP_METHOD_PUT: case HTTP_METHOD_RESPONSE: + /* WebDAV methods */ + case HTTP_METHOD_PROPFIND: + case HTTP_METHOD_PROPPATCH: + case HTTP_METHOD_MKCOL: + case HTTP_METHOD_LOCK: + case HTTP_METHOD_UNLOCK: + case HTTP_METHOD_VERSION_CONTROL: + case HTTP_METHOD_REPORT: + case HTTP_METHOD_CHECKOUT: + case HTTP_METHOD_CHECKIN: + case HTTP_METHOD_UNCHECKOUT: + case HTTP_METHOD_MKWORKSPACE: + case HTTP_METHOD_UPDATE: + case HTTP_METHOD_LABEL: + case HTTP_METHOD_MERGE: + case HTTP_METHOD_BASELINE_CONTROL: + case HTTP_METHOD_MKACTIVITY: + case HTTP_METHOD_ORDERPATCH: + case HTTP_METHOD_ACL: + case HTTP_METHOD_MKREDIRECTREF: + case HTTP_METHOD_UPDATEREDIRECTREF: + case HTTP_METHOD_SEARCH: + case HTTP_METHOD_PATCH: /* HTTP request payload */ if (cre->toread > 0) bev->readcb = relay_read_httpcontent; Index: usr.sbin/relayd/relayd.conf.5 =================================================================== RCS file: /cvs/src/usr.sbin/relayd/relayd.conf.5,v retrieving revision 1.168 diff -u -p -u -p -r1.168 relayd.conf.5 --- usr.sbin/relayd/relayd.conf.5 6 Nov 2015 18:06:29 -0000 1.168 +++ usr.sbin/relayd/relayd.conf.5 27 Jul 2016 11:04:48 -0000 @@ -1125,23 +1125,39 @@ Match the HTTP request method. The method is specified by .Ar name and can be either +.Ic ACL , +.Ic BASELINE-CONTROL , +.Ic CHECKIN , +.Ic CHECKOUT , .Ic CONNECT , .Ic COPY , .Ic DELETE , .Ic GET , .Ic HEAD , +.Ic LABEL , .Ic LOCK , +.Ic MERGE , +.Ic MKACTIVITY , .Ic MKCOL , +.Ic MKREDIRECTREF , +.Ic MKWORKSPACE , .Ic MOVE , .Ic OPTIONS , +.Ic ORDERPATCH , .Ic PATCH , .Ic POST , .Ic PROPFIND , .Ic PROPPATCH , .Ic PUT , +.Ic REPORT , +.Ic SEARCH , .Ic TRACE , +.Ic UNCHECKOUT , +.Ic UNLOCK , +.Ic UPDATE , +.Ic UPDATEREDIRECTREF , or -.Ic UNLOCK . +.Ic VERSION-CONTROL . .It Xo .Ar type Ar option .Oo Oo Ic digest Oc
