MapAddress wildcarding not working right

MapAddress wildcarding does not seem to be working right. Note the following three issues via the controller...

  1. When using the man documented format to enter the map:

mapaddress .example.com=.example.com..exit 512 syntax error: invalid address '*.example.com..exit'

With no map, I did not check the streams.

  1. When chancing upon an alternate format that returns 250:

mapaddress *.example.com=.exit 250 *.example.com=.exit

This results in these streams. Which appear to leak badly in that the first stream to a destination does not honor the exit.

172506 NEW 0 www.example.com:443 PURPOSE=USER 172507 NEW 0 www.example.com:443 PURPOSE=USER 172506 SUCCEEDED 121217 64.34.110.174:443 172507 SUCCEEDED 121219 64.34.110.174..exit:443

Note that entering the following related map syntax does not SUCCEED, which is weird given the above streams:

mapaddress foo.bar.com=<fingerprint>.exit

This one does, which is documented expectation:

mapaddress foo.bar.com=foo.bar.com.<fingerprint>.exit
  1. The map in (2) is not removable by the syntax of setting the source (left) equal to (=) the destination (right):

mapaddress .example.com=.example.com 512 syntax error: invalid address '*.example.com'

Seems the solution may/should be...

  • Adopt the syntax documented in (1), removing that acting in (2).
  • Fix the stream issue shown in (2).
  • Allow removal by syntax in (3).
  • Document the map removal syntax in the control spec page.
  • Check that removal from torrc and sighup works (as that is the form of the various options in the man page).
  • Lint the inputted map to reject '=.exit' form.

Adding applicable environment...

trackhostexits . trackhostexitsexpire 604800 allowdotexit 1 signal NEWNYM