Return-Path: Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: (qmail 41869 invoked from network); 5 Jul 2010 07:23:19 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 5 Jul 2010 07:23:19 -0000 Received: (qmail 51733 invoked by uid 500); 5 Jul 2010 07:23:19 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 51321 invoked by uid 500); 5 Jul 2010 07:23:17 -0000 Mailing-List: contact dev-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list dev@couchdb.apache.org Received: (qmail 51302 invoked by uid 99); 5 Jul 2010 07:23:16 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Jul 2010 07:23:16 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.22] (HELO thor.apache.org) (140.211.11.22) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Jul 2010 07:23:13 +0000 Received: from thor (localhost [127.0.0.1]) by thor.apache.org (8.13.8+Sun/8.13.8) with ESMTP id o657Mp8l004647 for ; Mon, 5 Jul 2010 07:22:52 GMT Message-ID: <10400885.197941278314571742.JavaMail.jira@thor> Date: Mon, 5 Jul 2010 03:22:51 -0400 (EDT) From: "Jason Smith (JIRA)" To: dev@couchdb.apache.org Subject: [jira] Updated: (COUCHDB-815) Non-standard HTTP methods for view handlers (AKA WebDAV is b0rken) [PATCH] In-Reply-To: <33387446.196861278307910234.JavaMail.jira@thor> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/COUCHDB-815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jason Smith updated COUCHDB-815: -------------------------------- Attachment: allow_http_method_convert_to_binary.patch Upon further investigation, I believe there is a bug in couch_util:to_existing_atom. The comment says that it will return the original value if no atom exists. But why does it throw an exception then? The attached patch properly catches the error:badarg thrown by the *_to_existing_atom BIFs. This allows the method parameter to remain a string Unfortunately, methods of string (list) type are converted to a list-of-integers when sending to the view server. Therefore couch_httpd_external:json_req_obj must go ahead and I like this patch: * It does as little as possible at the early stage, when the request comes in * It does not convert unknown requests to atoms--pattern matching will keep them away from existing code * Yet it correctly forwards unknown methods to the view server _show et al whether standard or not > Non-standard HTTP methods for view handlers (AKA WebDAV is b0rken) [PATCH] > -------------------------------------------------------------------------- > > Key: COUCHDB-815 > URL: https://issues.apache.org/jira/browse/COUCHDB-815 > Project: CouchDB > Issue Type: Bug > Components: Database Core > Affects Versions: 1.0 > Reporter: Jason Smith > Priority: Minor > Attachments: allow_http_method_convert_to_binary.patch, bad_allow_any_http_method.patch > > > CouchDB prevents the new view server handler methods, _show, _update, etc. from handling unknown HTTP methods. This prevents Couch apps from being able to implement extensions to the HTTP specification or to add application-specific methods to HTTP, violating the spirit of _show and _update. > For example, it is not possible to make a CouchApp WebDAV server because _show and _list must support the PROPFIND method. > In couch_httpd:handle_request_int/5, the response from Mochi is coerced to an atom if and only if the atom already exists (using couch_util:to_existing_atom/1). That is an odd whitelist, to say the least: > $ curl localhost:5984 -X PROPFIND # Crashes mochiweb when to_existing_atom throws badarg > curl: (52) Empty reply from server > $ curl localhost:5984 -X list_to_binary # Any atom works > {"error":"method_not_allowed","reason":"Only GET,HEAD allowed"} > Considering the cURL commands above, I filed this as a bug, not a feature. I will explore some options and submit patches. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.