Merge branch 'bug3289' into maint-0.2.2

This commit is contained in:
Nick Mathewson 2011-05-30 15:50:35 -04:00
commit d35a555348
2 changed files with 30 additions and 0 deletions

5
changes/bug3289 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes:
- Warn when the user configures two HiddenServiceDir lines that point
to the same directory. Bugfix on 0.0.6 (the version introducing
HiddenServiceDir); fixes bug 3289.

View File

@ -181,6 +181,31 @@ rend_add_service(rend_service_t *service)
log_warn(LD_CONFIG, "Hidden service with no ports configured; ignoring.");
rend_service_free(service);
} else {
int dupe = 0;
/* XXX This duplicate check has two problems:
*
* a) It's O(n^2), but the same comment from the bottom of
* rend_config_services() should apply.
*
* b) We only compare directory paths as strings, so we can't
* detect two distinct paths that specify the same directory
* (which can arise from symlinks, case-insensitivity, bind
* mounts, etc.).
*
* It also can't detect that two separate Tor instances are trying
* to use the same HiddenServiceDir; for that, we would need a
* lock file. But this is enough to detect a simple mistake that
* at least one person has actually made.
*/
SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr,
dupe = dupe ||
!strcmp(ptr->directory, service->directory));
if (dupe) {
log_warn(LD_REND, "Another hidden service is already configured for "
"directory %s, ignoring.", service->directory);
rend_service_free(service);
return;
}
smartlist_add(rend_service_list, service);
log_debug(LD_REND,"Configuring service with directory \"%s\"",
service->directory);