couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dav...@apache.org
Subject [4/8] git commit: Do not overwrite X-CouchDB-Requested-Path
Date Wed, 25 Apr 2012 22:18:24 GMT
Do not overwrite X-CouchDB-Requested-Path

Repeated rewrites would replace the initial value of
X-CouchDB-Requested-Path.

Fixes: COUCHDB-1442


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/40a4e334
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/40a4e334
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/40a4e334

Branch: refs/heads/master
Commit: 40a4e3343179936cc35d586f78ca99f4c0b65a42
Parents: 6c976bd
Author: Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
Authored: Fri Mar 23 20:52:17 2012 +0100
Committer: Paul Joseph Davis <davisp@apache.org>
Committed: Wed Apr 25 16:54:08 2012 -0500

----------------------------------------------------------------------
 CHANGES                             |    5 +++++
 NEWS                                |    1 +
 share/www/script/test/rewrite.js    |   20 ++++++++++++++++++++
 src/couchdb/couch_httpd_rewrite.erl |    7 ++++---
 4 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/40a4e334/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index c3a05e4..aa9af12 100644
--- a/CHANGES
+++ b/CHANGES
@@ -10,6 +10,11 @@ Source Repository:
 
  * The source repository was migrated from SVN to Git.
 
+HTTP Interface:
+
+ * No longer rewrites the X-CouchDB-Requested-Path during recursive
+   calls to the rewriter.
+
 Storage System:
 
  * Fixed unnecessary conflict when deleting and creating a

http://git-wip-us.apache.org/repos/asf/couchdb/blob/40a4e334/NEWS
----------------------------------------------------------------------
diff --git a/NEWS b/NEWS
index 8844d92..bcd9c40 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ This version has not been released yet.
  * Fixed unnecessary conflict when deleting and creating a
    document in the same batch.
  * New and updated passwords are hashed using PBKDF2.
+ * Fix various bugs in the URL rewriter when recursion is involved.
 
 Version 1.2.1
 -------------

http://git-wip-us.apache.org/repos/asf/couchdb/blob/40a4e334/share/www/script/test/rewrite.js
----------------------------------------------------------------------
diff --git a/share/www/script/test/rewrite.js b/share/www/script/test/rewrite.js
index 8454292..aaf8b69 100644
--- a/share/www/script/test/rewrite.js
+++ b/share/www/script/test/rewrite.js
@@ -437,4 +437,24 @@ couchTests.rewrite = function(debug) {
   var res = CouchDB.request("GET", "/test_suite_db/_design/invalid/_rewrite/foo");
   TEquals(400, res.status, "should return 400");
 
+  var ddoc_requested_path = {
+    _id: "_design/requested_path",
+    rewrites:[
+        {"from": "show", "to": "_show/origin/0"},
+        {"from": "show_rewritten", "to": "_rewrite/show"}
+    ],
+    shows: {
+        origin: stringFun(function(doc, req) {
+            return req.headers["x-couchdb-requested-path"];
+    })}
+  };
+
+  db.save(ddoc_requested_path);
+  var url = "/test_suite_db/_design/requested_path/_rewrite/show";
+  var res = CouchDB.request("GET", url);
+  TEquals(url, res.responseText, "should return the original url");
+
+  var url = "/test_suite_db/_design/requested_path/_rewrite/show_rewritten";
+  var res = CouchDB.request("GET", url);
+  TEquals(url, res.responseText, "returned the original url");
 }

http://git-wip-us.apache.org/repos/asf/couchdb/blob/40a4e334/src/couchdb/couch_httpd_rewrite.erl
----------------------------------------------------------------------
diff --git a/src/couchdb/couch_httpd_rewrite.erl b/src/couchdb/couch_httpd_rewrite.erl
index c8cab85..cb164cd 100644
--- a/src/couchdb/couch_httpd_rewrite.erl
+++ b/src/couchdb/couch_httpd_rewrite.erl
@@ -165,9 +165,10 @@ handle_rewrite_req(#httpd{
             % normalize final path (fix levels "." and "..")
             RawPath1 = ?b2l(iolist_to_binary(normalize_path(RawPath))),
 
-            % in order to do OAuth correctly,
-            % we have to save the requested path
-            Headers = mochiweb_headers:enter("x-couchdb-requested-path",
+            % In order to do OAuth correctly, we have to save the
+            % requested path. We use default so chained rewriting
+            % wont replace the original header.
+            Headers = mochiweb_headers:default("x-couchdb-requested-path",
                                              MochiReq:get(raw_path),
                                              MochiReq:get(headers)),
 


Mime
View raw message