diff -u couchdb-0.10.0/debian/couchdb.postinst couchdb-0.10.0/debian/couchdb.postinst --- couchdb-0.10.0/debian/couchdb.postinst +++ couchdb-0.10.0/debian/couchdb.postinst @@ -6,10 +6,12 @@ # permitted in any medium without royalty provided the copyright notice and this # notice are preserved. +VERSION=%VERSION% + case $1 in configure) - mkdir -p /var/lib/couchdb - mkdir -p /var/log/couchdb + mkdir -p /var/lib/couchdb/"${VERSION}" + mkdir -p /var/log/couchdb/"${VERSION}" chown -R couchdb:couchdb /var/lib/couchdb chown -R couchdb:couchdb /var/log/couchdb chmod -R 0770 /var/lib/couchdb diff -u couchdb-0.10.0/debian/rules couchdb-0.10.0/debian/rules --- couchdb-0.10.0/debian/rules +++ couchdb-0.10.0/debian/rules @@ -28,13 +28,12 @@ post-patches:: configure sed -i s,$(LIB)$$,$(LIB)/$(DEB_UPSTREAM_VERSION), configure sed -i s,$(LOG)$$,$(LOG)/$(DEB_UPSTREAM_VERSION), configure - sed -i s,VERSION=%VERSION%$$,VERSION=$(DEB_UPSTREAM_VERSION), debian/couchdb.postrm debian/couchdb-bin.postrm + sed -i s,VERSION=%VERSION%$$,VERSION=$(DEB_UPSTREAM_VERSION), debian/couchdb.postrm debian/couchdb-bin.postrm debian/couchdb.postinst cleanbuilddir:: configure sed -i s,$(LIB)/$(DEB_UPSTREAM_VERSION)$$,$(LIB), configure sed -i s,$(LOG)/$(DEB_UPSTREAM_VERSION)$$,$(LOG), configure - sed -i s,VERSION=$(DEB_UPSTREAM_VERSION)$$,VERSION=%VERSION%, debian/couchdb.postrm - sed -i s,VERSION=$(DEB_UPSTREAM_VERSION)$$,VERSION=%VERSION%, debian/couchdb-bin.postrm + sed -i s,VERSION=$(DEB_UPSTREAM_VERSION)$$,VERSION=%VERSION%, debian/couchdb.postrm debian/couchdb-bin.postrm debian/couchdb.postinst common-binary-post-install-arch:: rm -f debian/couchdb-bin/usr/lib/couchdb/erlang/lib/couch-*/priv/lib/couch_erl_driver.la diff -u couchdb-0.10.0/debian/changelog couchdb-0.10.0/debian/changelog --- couchdb-0.10.0/debian/changelog +++ couchdb-0.10.0/debian/changelog @@ -1,3 +1,12 @@ +couchdb (0.10.0-0ubuntu3) karmic; urgency=low + + * Fix replication over OAuth, which was broken because of incorrect + query-string handling after HTTP redirection. (LP: #456234) + * create /var/log/couchdb/${couchdbversion} also, as couchdb does not + create it. (LP: #453049) + + -- Chad Miller Tue, 20 Oct 2009 16:30:45 -0400 + couchdb (0.10.0-0ubuntu2) karmic; urgency=low * create /var/log/couchdb so that couchdb installs/runs (LP: #453049) only in patch2: unchanged: --- couchdb-0.10.0.orig/debian/patches/http-redirect-query-string-fix.patch +++ couchdb-0.10.0/debian/patches/http-redirect-query-string-fix.patch @@ -0,0 +1,61 @@ +# Bugfixes for redirects in replication and iolists in OAuth qs params +# Rev at http://svn.apache.org/viewvc?view=revision&revision=825402 +# +# Patch from +# http://svn.apache.org/viewvc/couchdb/branches/0.10.x/src/couchdb/couch_rep_httpc.erl?r1=825402&r2=825401&pathrev=825402 +# http://svn.apache.org/viewvc/couchdb/branches/0.10.x/share/www/script/test/oauth.js?r1=825402&r2=825401&pathrev=825402 + +--- src/couchdb/couch_rep_httpc.erl 2009/10/15 05:46:22 825401 ++++ src/couchdb/couch_rep_httpc.erl 2009/10/15 05:47:40 825402 +@@ -110,7 +110,7 @@ + Code =:= 301; Code =:= 302 -> + MochiHeaders = mochiweb_headers:make(Headers), + RedirectUrl = mochiweb_headers:get_value("Location", MochiHeaders), +- do_request(Req#http_db{url = RedirectUrl}); ++ do_request(redirected_request(Req, RedirectUrl)); + Code =:= 409 -> + throw(conflict); + Code >= 400, Code < 500 -> +@@ -157,6 +157,17 @@ + do_request(Req#http_db{retries = Retries-1, pause = 2*Pause}) + end. + ++redirected_request(Req, RedirectUrl) -> ++ {Base, QStr, _} = mochiweb_util:urlsplit_path(RedirectUrl), ++ QS = mochiweb_util:parse_qs(QStr), ++ Hdrs = case proplists:get_value(<<"oauth">>, Req#http_db.auth) of ++ undefined -> ++ Req#http_db.headers; ++ _Else -> ++ lists:keydelete("Authorization", 1, Req#http_db.headers) ++ end, ++ Req#http_db{url=Base, resource="", qs=QS, headers=Hdrs}. ++ + spawn_worker_process(Req) -> + Url = ibrowse_lib:parse_url(Req#http_db.url), + {ok, Pid} = ibrowse_http_client:start(Url), +@@ -177,7 +188,9 @@ + end. + + oauth_header(Url, QS, Action, Props) -> +- QSL = [{couch_util:to_list(K), couch_util:to_list(V)} || {K,V} <- QS], ++ % erlang-oauth doesn't like iolists ++ QSL = [{couch_util:to_list(K), ?b2l(?l2b(couch_util:to_list(V)))} || ++ {K,V} <- QS], + ConsumerKey = ?b2l(proplists:get_value(<<"consumer_key">>, Props)), + Token = ?b2l(proplists:get_value(<<"token">>, Props)), + TokenSecret = ?b2l(proplists:get_value(<<"token_secret">>, Props)), +--- share/www/script/test/oauth.js 2009/10/15 05:46:22 825401 ++++ share/www/script/test/oauth.js 2009/10/15 05:47:40 825402 +@@ -169,6 +169,11 @@ + T(xhr.status == expectedCode); + + // Replication ++ var dbA = new CouchDB("test_suite_db_a", { ++ "X-Couch-Full-Commit":"false", ++ "Authorization": adminBasicAuthHeaderValue() ++ }); ++ T(dbA.save({_id:"_design/"+i+consumerKey}).ok); + var result = CouchDB.replicate(dbPair.source, dbPair.target, { + headers: {"Authorization": adminBasicAuthHeaderValue()} + });