[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