Skip to content

Commit

Permalink
Block X-Backend* in gatekeeper
Browse files Browse the repository at this point in the history
By moving the blocking to gatekeeper from the proxy server, we gain
the ability to pass X-Backend headers in via InternalClient while
still keeping real clients from using them.

I wanted this functionality while working on storage policies; I had
an InternalClient and wanted to tell it to use a specific policy index
instead of what the container said, and that seemed like a good time
for an X-Backend header.

Change-Id: I4089e980d3cfca660365c7df799723b1f16ba277
  • Loading branch information
smerritt committed Mar 21, 2014
1 parent 182ff7a commit c4a2313
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 8 deletions.
3 changes: 2 additions & 1 deletion swift/common/middleware/gatekeeper.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@
# rather than prefix match.
inbound_exclusions = [get_sys_meta_prefix('account'),
get_sys_meta_prefix('container'),
get_sys_meta_prefix('object')]
get_sys_meta_prefix('object'),
'x-backend']
# 'x-object-sysmeta' is reserved in anticipation of future support
# for system metadata being applied to objects

Expand Down
5 changes: 0 additions & 5 deletions swift/proxy/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,11 +264,6 @@ def __call__(self, env, start_response):
try:
if self.memcache is None:
self.memcache = cache_from_env(env)
# Remove any x-backend-* headers since those are reserved for use
# by backends communicating with each other; no end user should be
# able to send those into the cluster.
for key in list(k for k in env if k.startswith('HTTP_X_BACKEND_')):
del env[key]
req = self.update_request(Request(env))
return self.handle_request(req)(env, start_response)
except UnicodeError:
Expand Down
9 changes: 7 additions & 2 deletions test/unit/common/middleware/test_gatekeeper.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,13 @@ class TestGatekeeper(unittest.TestCase):
'X-Container-Sysmeta-BAR': 'value',
'X-Object-Sysmeta-BAR': 'value'}

forbidden_headers_out = dict(sysmeta_headers)
forbidden_headers_in = dict(sysmeta_headers)
x_backend_headers = {'X-Backend-Replication': 'true',
'X-Backend-Replication-Headers': 'stuff'}

forbidden_headers_out = dict(sysmeta_headers.items() +
x_backend_headers.items())
forbidden_headers_in = dict(sysmeta_headers.items() +
x_backend_headers.items())

def _assertHeadersEqual(self, expected, actual):
for key in expected:
Expand Down

0 comments on commit c4a2313

Please sign in to comment.