[Trac-tickets] Re: [The Trac Project] #2553: tracd reverts to
http:// after a POST even if stunnel is being used via a https:// url.
The Trac Project
noreply at edgewall.com
Wed Jan 4 05:07:37 CST 2006
#2553: tracd reverts to http:// after a POST even if stunnel is being used via a
https:// url.
---------------------------------+------------------------------------------
Reporter: anonymous | Owner: cboos
Type: defect | Status: assigned
Priority: normal | Milestone: 0.9.4
Component: tracd | Version: 0.9.2
Severity: normal | Resolution:
Keywords: tracd https stunnel |
---------------------------------+------------------------------------------
Changes (by cboos):
* status: new => assigned
* owner: jonas => cboos
* milestone: => 0.9.4
Old description:
> Running tracd through stunnel, I access trac via a https://url/trac.
> Everything works fine until I change something (confirm a wiki edit, add
> a new ticket, login, etc.) and the url forwards to http://url/trac
> instead of https.
>
> To fix this, I changed the 'self.scheme = 'http'' in TracHTTPRequest in
> standalone.py to self.scheme='https'. But I imagine this should
> autodetect in some way.
New description:
Running tracd through stunnel, I access trac via a https://url/trac.
Everything works fine until I change something (confirm a wiki edit, add a
new ticket, login, etc.) and the url forwards to http://url/trac instead
of https.
To fix this, I changed the `self.scheme = 'http'` in TracHTTPRequest in
standalone.py to `self.scheme='https'`. But I imagine this should
autodetect in some way.
Comment:
One could use the `Referer:` header, if present.
{{{
Index: standalone.py
===================================================================
--- standalone.py (revision 2721)
+++ standalone.py (working copy)
@@ -325,21 +325,22 @@
Request.__init__(self)
self.__handler = handler
self.__status_sent = False
-
- self.scheme = 'http'
+ headers = handler.headers
+ self.scheme = 'http' # as default, but use Referer: header if
present
+ if headers.has_key('Referer'):
+ self.scheme = headers['Referer'].split(':')[0]
self.method = self.__handler.command
self.remote_addr = str(self.__handler.client_address[0])
self.server_name = self.__handler.server.server_name
self.server_port = self.__handler.server.server_port
- if self.__handler.headers.has_key('Cookie'):
- self.incookie.load(self.__handler.headers['Cookie'])
+ if headers.has_key('Cookie'):
+ self.incookie.load(headers['Cookie'])
self.cgi_location = '/' + project_name
self.idx_location = '/'
environ = {'REQUEST_METHOD': self.method,
'QUERY_STRING': query_string}
- headers = self.__handler.headers
if self.method in ('GET', 'HEAD'):
headers = None
self.args = TracFieldStorage(self.__handler.rfile,
environ=environ,
}}}
Thoughts?
--
Ticket URL: <http://projects.edgewall.com/trac/ticket/2553>
The Trac Project <http://trac.edgewall.com/>
More information about the Trac-Tickets
mailing list