aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-11-15 16:47:22 -0500
committerNick Mathewson <nickm@torproject.org>2018-11-15 16:47:22 -0500
commitaebe8a82c9a1a8ee1df9d1dbb82807d342f49203 (patch)
tree5cf65cd1356cafa0d8a519b19cfd7404a0d6584e
parent34e4d5a78362b3f133958740a18d0ee06ae4fdad (diff)
parent4fd761a418558c05716b4a04a5306dc67ce53dfe (diff)
downloadtor-aebe8a82c9a1a8ee1df9d1dbb82807d342f49203.tar.gz
tor-aebe8a82c9a1a8ee1df9d1dbb82807d342f49203.zip
Merge branch 'bug26913_033' into maint-0.3.3
-rw-r--r--changes/ticket269137
-rw-r--r--doc/tor.1.txt6
-rw-r--r--src/or/config.c21
3 files changed, 30 insertions, 4 deletions
diff --git a/changes/ticket26913 b/changes/ticket26913
new file mode 100644
index 0000000000..d6555764ec
--- /dev/null
+++ b/changes/ticket26913
@@ -0,0 +1,7 @@
+ o Minor bugfixes (directory permissions):
+ - When a user requests a group-readable DataDirectory, give it to
+ them. Previously, when the DataDirectory and the CacheDirectory
+ were the same, the default setting (0) for
+ CacheDirectoryGroupReadable would always override the setting for
+ DataDirectoryGroupReadable. Fixes bug 26913; bugfix on
+ 0.3.3.1-alpha.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index f894061808..c089bffbb0 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -423,10 +423,12 @@ GENERAL OPTIONS
running.
(Default: uses the value of DataDirectory.)
-[[CacheDirectoryGroupReadable]] **CacheDirectoryGroupReadable** **0**|**1**::
+[[CacheDirectoryGroupReadable]] **CacheDirectoryGroupReadable** **0**|**1**|**auto**::
If this option is set to 0, don't allow the filesystem group to read the
CacheDirectory. If the option is set to 1, make the CacheDirectory readable
- by the default GID. (Default: 0)
+ by the default GID. If the option is "auto", then we use the
+ setting for DataDirectoryGroupReadable when the CacheDirectory is the
+ same as the DataDirectory, and 0 otherwise. (Default: auto)
[[FallbackDir]] **FallbackDir** __ipv4address__:__port__ orport=__port__ id=__fingerprint__ [weight=__num__] [ipv6=**[**__ipv6address__**]**:__orport__]::
When we're unable to connect to any directory cache for directory info
diff --git a/src/or/config.c b/src/or/config.c
index 58080c65e3..e50e6efa20 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -259,7 +259,7 @@ static config_var_t option_vars_[] = {
V(BridgeRelay, BOOL, "0"),
V(BridgeDistribution, STRING, NULL),
VAR("CacheDirectory", FILENAME, CacheDirectory_option, NULL),
- V(CacheDirectoryGroupReadable, BOOL, "0"),
+ V(CacheDirectoryGroupReadable, AUTOBOOL, "auto"),
V(CellStatistics, BOOL, "0"),
V(PaddingStatistics, BOOL, "1"),
V(LearnCircuitBuildTimeout, BOOL, "1"),
@@ -1516,9 +1516,26 @@ options_act_reversible(const or_options_t *old_options, char **msg)
msg) < 0) {
goto done;
}
+
+ /* We need to handle the group-readable flag for the cache directory
+ * specially, since the directory defaults to being the same as the
+ * DataDirectory. */
+ int cache_dir_group_readable;
+ if (options->CacheDirectoryGroupReadable != -1) {
+ /* If the user specified a value, use their setting */
+ cache_dir_group_readable = options->CacheDirectoryGroupReadable;
+ } else if (!strcmp(options->CacheDirectory, options->DataDirectory)) {
+ /* If the user left the value as "auto", and the cache is the same as the
+ * datadirectory, use the datadirectory setting.
+ */
+ cache_dir_group_readable = options->DataDirectoryGroupReadable;
+ } else {
+ /* Otherwise, "auto" means "not group readable". */
+ cache_dir_group_readable = 0;
+ }
if (check_and_create_data_directory(running_tor /* create */,
options->CacheDirectory,
- options->CacheDirectoryGroupReadable,
+ cache_dir_group_readable,
options->User,
msg) < 0) {
goto done;