[tor-bugs] #12533 [Stem]: multiple hidden services and get_conf_map('HiddenServiceOptions') response format

Tor Bug Tracker & Wiki blackhole at torproject.org
Thu Jul 3 23:57:51 UTC 2014


#12533: multiple hidden services and get_conf_map('HiddenServiceOptions') response
format
-------------------------------------+------------------------
 Reporter:  jthayer                  |          Owner:  atagar
     Type:  defect                   |         Status:  new
 Priority:  normal                   |      Milestone:
Component:  Stem                     |        Version:
 Keywords:  get_conf hidden service  |  Actual Points:
Parent ID:                           |         Points:
-------------------------------------+------------------------
 Hi, I'm trying to add a new hidden service to a client which is already
 running one (or more) service. The naive approach,

 {{{
     controller.set_options([
         ('HiddenServiceDir', hs_dir),
         ('HiddenServicePort', hs_port)
     ])
 }}}

 clobbers the existing services. Since there doesn't seem to be an API call
 expressly for adding (not replacing) hidden services, I started
 investigating the idea of fetching the existing hidden services from the
 client, then re-adding those in addition to the new service.

 However, the data returned from `get_conf_map('HiddenServiceOptions')`
 isn't appropriate for that, as far as I can tell. That call returns two
 flat lists (associated with `HiddenServiceDir` and `HiddenServicePort`),
 which leaves us in the dark about which ports are associated with which
 dirs.

 {{{
     >>>
 controller.set_options([('HiddenServiceDir','/tmp/hiddenservice2/'),
                                 ('HiddenServicePort','1235
 127.0.0.1:1235'),
                                 ('HiddenServicePort','1236
 127.0.0.1:1236'),
 ('HiddenServiceDir','/tmp/hiddenservice3/'),
                                 ('HiddenServicePort','1237
 127.0.0.1:1237')])

     >>> controller.get_conf_map('HiddenServiceOptions')
     {'HiddenServiceDir': ['/tmp/hiddenservice2/', '/tmp/hiddenservice3/'],
      'HiddenServicePort': ['1235 127.0.0.1:1235', '1236 127.0.0.1:1236',
 '1237 127.0.0.1:1237']}
 }}}

 More useful in this case would be a list of Dir->[Port] mappings:

 {{{

     >>> controller.get_conf_map('HiddenServiceOptionsMap')
     {'/tmp/hiddenservice2/': ['1235 127.0.0.1:1235','1236
 127.0.0.1:1236'],
      '/tmp/hiddenservice3/': ['1237 127.0.0.1:1237']}
 }}}

 With that data, then, it would be easy to make the appropriate
 `SetOptions` calls not only to add a new service, but to re-add the
 existing services.

 I'm not very familiar with Tor's control protocol, so perhaps this isn't a
 limitation of Stem but of the protocol in general.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/12533>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list