Actually validate configs when loading them

An indenting problem meant the validators weren't being
called, which revealed some follow-on errors.
This commit is contained in:
meejah 2018-05-19 20:10:39 -06:00
parent cc3897a49d
commit 3723945296
5 changed files with 11 additions and 10 deletions

View File

@ -72,6 +72,7 @@ def _valid_config_sections():
"expire.override_lease_duration",
"readonly",
"reserved_space",
"storage_dir",
),
"sftpd": (
"accounts.file",

View File

@ -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)

View File

@ -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)

View File

@ -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])

View File

@ -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()