launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #10523
[Merge] lp:~rvb/maas/relax-metadata-url into lp:maas
Raphaël Badin has proposed merging lp:~rvb/maas/relax-metadata-url into lp:maas.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #1032063 in MAAS: "metadata urls are too strict"
https://bugs.launchpad.net/maas/+bug/1032063
For more details, see:
https://code.launchpad.net/~rvb/maas/relax-metadata-url/+merge/117833
The branch relaxes the metadata url regular expressions a bit so that urls like "/metadata//2012-03-01/meta-data/public-keys" will be handled correctly. Any number of additional slashes after the 'metadata' bit will be accepted.
= Pre-imp =
Talked with Julian about this.
= Notes =
I recently fixed bug 1031365. That fix was right and I stand by it. But it turns out that cloud-init has developed the habit of using wrong urls (urls with double slashs after the 'metadata' bit) so instead of fixing the call to cloud-init, it's more easy to relax the metadata url regular expressions a bit.
--
https://code.launchpad.net/~rvb/maas/relax-metadata-url/+merge/117833
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~rvb/maas/relax-metadata-url into lp:maas.
=== modified file 'src/metadataserver/tests/test_api.py'
--- src/metadataserver/tests/test_api.py 2012-06-22 13:22:57 +0000
+++ src/metadataserver/tests/test_api.py 2012-08-02 08:10:24 +0000
@@ -292,6 +292,21 @@
response.content.decode('ascii'))
self.assertIn('text/plain', response['Content-Type'])
+ def test_public_keys_url_with_additional_slashes(self):
+ # The metadata service also accepts urls with any number of additional
+ # slashes after 'metadata': e.g. http://host/metadata///rest-of-url.
+ user, _ = factory.make_user_with_keys(n_keys=2, username='my-user')
+ node = factory.make_node(owner=user)
+ url = reverse('metadata-meta-data', args=['latest', 'public-keys'])
+ # Insert additional slashes.
+ url = url.replace('metadata', 'metadata/////')
+ client = self.make_node_client(node=node)
+ response = client.get(url)
+ keys = SSHKey.objects.filter(user=user).values_list('key', flat=True)
+ self.assertItemsEqual(
+ '\n'.join(keys),
+ response.content.decode('ascii'))
+
def test_other_user_than_node_cannot_signal_commissioning_result(self):
node = factory.make_node(status=NODE_STATUS.COMMISSIONING)
client = OAuthAuthenticatedClient(factory.make_user())
=== modified file 'src/metadataserver/urls.py'
--- src/metadataserver/urls.py 2012-07-31 14:10:55 +0000
+++ src/metadataserver/urls.py 2012-08-02 08:10:24 +0000
@@ -49,16 +49,16 @@
node_patterns = patterns(
'',
url(
- r'^(?P<version>[^/]+)/meta-data/(?P<item>.*)$',
+ r'^/*(?P<version>[^/]+)/meta-data/(?P<item>.*)$',
meta_data_handler,
name='metadata-meta-data'),
url(
- r'^(?P<version>[^/]+)/user-data$', user_data_handler,
+ r'^/*(?P<version>[^/]+)/user-data$', user_data_handler,
name='metadata-user-data'),
url(
- r'^(?P<version>[^/]+)/', version_index_handler,
+ r'^/*(?P<version>[^/]+)/', version_index_handler,
name='metadata-version'),
- url(r'^', index_handler, name='metadata'),
+ url(r'^/*', index_handler, name='metadata'),
)
# Anonymous random metadata access, keyed by system ID. These serve requests
@@ -69,11 +69,11 @@
# XXX: rvb 2012-06-20 bug=1015559: This method is accessible
# without authentication. This is a security threat.
url(
- r'^(?P<version>[^/]+)/by-id/(?P<system_id>[\w\-]+)/$',
+ r'^/*(?P<version>[^/]+)/by-id/(?P<system_id>[\w\-]+)/$',
meta_data_anon_handler,
name='metadata-node-by-id'),
url(
- r'^(?P<version>[^/]+)/enlist-preseed/$',
+ r'^/*(?P<version>[^/]+)/enlist-preseed/$',
meta_data_anon_handler,
name='metadata-enlist-preseed'),
)
@@ -84,15 +84,15 @@
by_mac_patterns = patterns(
'',
url(
- r'^(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/meta-data/(?P<item>.*)$',
+ r'^/*(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/meta-data/(?P<item>.*)$',
meta_data_by_mac_handler,
name='metadata-meta-data-by-mac'),
url(
- r'^(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/user-data$',
+ r'^/*(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/user-data$',
user_data_by_mac_handler,
name='metadata-user-data-by-mac'),
url(
- r'^(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/',
+ r'^/*(?P<version>[^/]+)/by-mac/(?P<mac>[^/]+)/',
version_index_by_mac_handler,
name='metadata-version-by-mac'),
)