From 37239452963bb510a7a4e973480edbcb9d2b3872 Mon Sep 17 00:00:00 2001 From: meejah Date: Sat, 19 May 2018 20:10:39 -0600 Subject: [PATCH] Actually validate configs when loading them An indenting problem meant the validators weren't being called, which revealed some follow-on errors. --- src/allmydata/client.py | 1 + src/allmydata/node.py | 2 +- src/allmydata/test/no_network.py | 4 ++-- src/allmydata/test/test_client.py | 4 ++-- src/allmydata/test/test_node.py | 10 +++++----- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/allmydata/client.py b/src/allmydata/client.py index 71397f961..d9b51a3d2 100644 --- a/src/allmydata/client.py +++ b/src/allmydata/client.py @@ -72,6 +72,7 @@ def _valid_config_sections(): "expire.override_lease_duration", "readonly", "reserved_space", + "storage_dir", ), "sftpd": ( "accounts.file", diff --git a/src/allmydata/node.py b/src/allmydata/node.py index 318f0764e..05cf146bc 100644 --- a/src/allmydata/node.py +++ b/src/allmydata/node.py @@ -146,7 +146,7 @@ def read_config(basedir, portnumfile, generated_files=[], _valid_config_sections except EnvironmentError: if os.path.exists(config_fname): raise - configutil.validate_config(config_fname, parser, _valid_config_sections()) + configutil.validate_config(config_fname, parser, _valid_config_sections()) return _Config(parser, portnumfile, config_fname) diff --git a/src/allmydata/test/no_network.py b/src/allmydata/test/no_network.py index 2c0644fc1..26199cd92 100644 --- a/src/allmydata/test/no_network.py +++ b/src/allmydata/test/no_network.py @@ -26,7 +26,7 @@ import treq from allmydata.util.assertutil import _assert from allmydata import uri as tahoe_uri -from allmydata.client import _Client +from allmydata.client import _Client, _valid_config_sections from allmydata.storage.server import StorageServer, storage_index_to_dir from allmydata.util import fileutil, idlib, hashutil from allmydata.util.hashutil import permute_server_hash @@ -188,7 +188,7 @@ def NoNetworkClient(basedir): # XXX FIXME this is just to avoid massive search-replace for now; # should be create_nonetwork_client() or something... from allmydata.node import read_config - config = read_config(basedir, u'client.port') + config = read_config(basedir, u'client.port', _valid_config_sections=_valid_config_sections) return _NoNetworkClient(config, basedir=basedir) diff --git a/src/allmydata/test/test_client.py b/src/allmydata/test/test_client.py index b99769d3c..3bfd30a87 100644 --- a/src/allmydata/test/test_client.py +++ b/src/allmydata/test/test_client.py @@ -71,7 +71,7 @@ class Basic(testutil.ReallyEqualMixin, testutil.NonASCIIPathMixin, unittest.Test old_mode = os.stat(fn).st_mode os.chmod(fn, 0) try: - e = self.assertRaises(EnvironmentError, read_config, basedir, "client.port") + e = self.assertRaises(EnvironmentError, read_config, basedir, "client.port", _valid_config_sections=client._valid_config_sections) self.assertIn("Permission denied", str(e)) finally: # don't leave undeleteable junk lying around @@ -93,7 +93,7 @@ class Basic(testutil.ReallyEqualMixin, testutil.NonASCIIPathMixin, unittest.Test logged_messages = [] self.patch(twisted.python.log, 'msg', logged_messages.append) - e = self.failUnlessRaises(OldConfigError, read_config, basedir, "client.port") + e = self.failUnlessRaises(OldConfigError, read_config, basedir, "client.port", _valid_config_sections=client._valid_config_sections) abs_basedir = fileutil.abspath_expanduser_unicode(unicode(basedir)).encode(sys.getfilesystemencoding()) self.failUnlessIn(os.path.join(abs_basedir, "introducer.furl"), e.args[0]) self.failUnlessIn(os.path.join(abs_basedir, "no_storage"), e.args[0]) diff --git a/src/allmydata/test/test_node.py b/src/allmydata/test/test_node.py index 93d38e5ca..257e0dc88 100644 --- a/src/allmydata/test/test_node.py +++ b/src/allmydata/test/test_node.py @@ -16,7 +16,7 @@ import foolscap.logging.log from twisted.application import service from allmydata.node import Node, formatTimeTahoeStyle, MissingConfigEntry, read_config, config_from_string from allmydata.introducer.server import create_introducer -from allmydata.client import create_client +from allmydata.client import create_client, _valid_config_sections from allmydata.util import fileutil, iputil from allmydata.util.namespace import Namespace import allmydata.test.common_util as testutil @@ -30,7 +30,7 @@ class TestNode(Node): CERTFILE='DEFAULT_CERTFILE_BLANK' def __init__(self, basedir): - config = read_config(basedir, 'DEFAULT_PORTNUMFILE_BLANK') + config = read_config(basedir, 'DEFAULT_PORTNUMFILE_BLANK', _valid_config_sections=_valid_config_sections) Node.__init__(self, config, basedir) @@ -262,7 +262,7 @@ class PortLocation(unittest.TestCase): n = EmptyNode() basedir = os.path.join("test_node/portlocation/%s/%s" % (tp, tl)) fileutil.make_dirs(basedir) - config = n.config = read_config(basedir, "node.port") + config = n.config = read_config(basedir, "node.port", _valid_config_sections=_valid_config_sections) n._reveal_ip = True if exp in ("ERR1", "ERR2", "ERR3", "ERR4"): @@ -377,7 +377,7 @@ class Listeners(unittest.TestCase): f.write("tub.location = %s\n" % location) # we're doing a lot of calling-into-setup-methods here, it might be # better to just create a real Node instance, I'm not sure. - n.config = read_config(n.basedir, "client.port") + n.config = read_config(n.basedir, "client.port", _valid_config_sections=_valid_config_sections) n.check_privacy() n.services = [] n.create_i2p_provider() @@ -403,7 +403,7 @@ class Listeners(unittest.TestCase): f.write("tub.location = tcp:example.org:1234\n") # we're doing a lot of calling-into-setup-methods here, it might be # better to just create a real Node instance, I'm not sure. - n.config = read_config(n.basedir, "client.port") + n.config = read_config(n.basedir, "client.port", _valid_config_sections=_valid_config_sections) n.check_privacy() n.services = [] i2p_ep = object()