summaryrefslogtreecommitdiff
path: root/src/or/config.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-09-17 11:36:59 -0400
committerNick Mathewson <nickm@torproject.org>2018-09-17 11:44:59 -0400
commit4fd761a418558c05716b4a04a5306dc67ce53dfe (patch)
treecb036fcbf7d0d727b6727e5cd490679ae2dc7b8e /src/or/config.c
parenta546e07600151be275e6134407c2bcb833a3dd97 (diff)
downloadtor-4fd761a418558c05716b4a04a5306dc67ce53dfe.tar.gz
tor-4fd761a418558c05716b4a04a5306dc67ce53dfe.zip
Make CacheDirectoryGroupReadable an autobool.
Since the default cache directory is the same as the default data directory, we don't want the default CacheDirectoryGroupReadable value (0) to override an explicitly set "DataDirectoryGroupReadable 1". To fix this, I'm making CacheDirectoryGroupReadable into an autobool, and having the default (auto) value mean "Use the value of DataDirectoryGroupReadable if the directories are the same, and 0 otherwise." Fixes bug 26913; bugfix on 0.3.3.1-alpha when the CacheDirectory option was introduced.
Diffstat (limited to 'src/or/config.c')
-rw-r--r--src/or/config.c21
1 files changed, 19 insertions, 2 deletions
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;