Index: third_party/buildbot_8_4p1/buildbot/master.py |
diff --git a/third_party/buildbot_8_4p1/buildbot/master.py b/third_party/buildbot_8_4p1/buildbot/master.py |
index 9ecc2d0e5596daf0132c9a036222ce05c3a814e2..4b322eebeaed284fd029ea935c3240b1373208c6 100644 |
--- a/third_party/buildbot_8_4p1/buildbot/master.py |
+++ b/third_party/buildbot_8_4p1/buildbot/master.py |
@@ -14,6 +14,7 @@ |
# Copyright Buildbot Team Members |
+import re |
import os |
import signal |
import time |
@@ -355,6 +356,22 @@ class BuildMaster(service.MultiService): |
caches_config = config.get("caches", {}) |
autoBuildCacheRatio = config.get("autoBuildCacheRatio", None) |
+ # load validation, with defaults, and verify no unrecognized |
+ # keys are included. |
+ validation_defaults = { |
+ 'branch': re.compile(r'^[\w.+/~-]*$'), |
+ 'revision': re.compile(r'^[\w.+/~-]*$'), |
+ 'property_name': re.compile(r'^[\w\.\-\/\~:]*$'), |
+ 'property_value': re.compile(r'^[\w\.\-\/\~:]*$'), |
+ } |
+ validation_config = validation_defaults.copy() |
+ validation_config.update(config.get("validation", {})) |
+ v_config_keys = set(validation_config.keys()) |
+ v_default_keys = set(validation_defaults.keys()) |
+ if v_config_keys > v_default_keys: |
+ raise ValueError("unrecognized validation key(s): %s" % |
+ (", ".join(v_config_keys - v_default_keys,))) |
+ |
except KeyError: |
log.msg("config dictionary is missing a required parameter") |
log.msg("leaving old configuration in place") |
@@ -382,6 +399,7 @@ class BuildMaster(service.MultiService): |
raise KeyError("must have a 'slaves' key") |
self.config.changeHorizon = changeHorizon |
+ self.config.validation = validation_config |
change_source = config.get('change_source', []) |
if isinstance(change_source, (list, tuple)): |