parent
e85eb88945
commit
edb82203e2
@ -1,13 +1,11 @@
|
||||
AUX CVE-2015-5286_2015.1.1.patch 6606 SHA256 3aff506a767ad8eb206f01ffc3e58f718323538507cefc542a57ca1bc4e39a2a SHA512 fa78ef98f05888e8a30b5cc37ac589e1b24ec0a63b4fad8333f3a4078d0452b0c1bba77a72c838cff4da4c6d33b55f8c9742ec935c87f97cceed86c25ce01a6c WHIRLPOOL c3648bd089672941954e7465f3b98de94568c39f17cf8940a8198f941f7b741469b51f92eaf87a2f349593d7a135dab151f855880ce32df8d6d153b1222f0c70
|
||||
AUX cve-2015-5163-stable-kilo.patch 11917 SHA256 a5e3321a0f96abe7c6bf66c9b326ee00db74fb3e66da9ff22607b269f8a02c1b SHA512 b0a5b1783837b7da261a624f8148db9ec0c101463575a1cfee8e2c49d2a05748a85e008097f8a77dc5723327f3f291a7eeae10ac662dbe55d6236eaa9592451b WHIRLPOOL 34dc5e866604b1712a01d6ecd27a318766d42ebb2d8d6038e5825d09ffbff957e56533f2e9c1c742faf0fd58223c88a012ece6b121c9f79e46143ce11cd769fd
|
||||
AUX cve-2015-5251-stable-kilo.patch 9080 SHA256 6a8c9a50bf338f3318ed6d52a47691e2ba8e76e150037a15d3bbba41b56162f5 SHA512 602c1b1c2e8f2dc09aaa01f76e6a6998a7027704ebaaf74d561bfa37555e03268ccb1eb9c7ef0533f987aae62a9fbd25332094290148b460337eb5ccf3c3f3ba WHIRLPOOL dc35cc3c86f95fdf131dfb34aa81518556491965a14aa1656c7a2c54a9dddf88e2fba4f0703d5ec50165ee78bb5f351f874b5c5290e7caaf610253e19d38c645
|
||||
AUX glance-2013.2-sphinx_mapping.patch 582 SHA256 043c3f7ef413cf3675920880af57943b909ec9f3376f6e86a1ae1d5948d9ad98 SHA512 d012ce5eaed00c3ba7b6219813cee503f68cdb14b8e50eedc731afc63767e1867749d6e4824611e0d024b2fdebfe5a2b3ad53b0ad7b18a39defcc17094da4a0f WHIRLPOOL 659bf94e7740be3ea0d2f130b332e694ebdcca8b90acfb479b8502eec4b867eda999ec2c6cdecc1f3dcbe3e3ddf72798c76bdf16ab4ab561ce61975a451c4585
|
||||
AUX cve-2016-0757-stable-liberty.patch 16299 SHA256 16ca229f29ed35c96570fde27a8f08cde1ce4d42dbde87c5373fab2225f0dea3 SHA512 f647a393b733c5e520e6032455f1d9ab8a6530909bc3f04e1ae1e54f52c0ea7a212203f461dc94b5f51eb29bc3a7c8178f67ccbbc99c5134cf72ab64d51591a9 WHIRLPOOL a4c0cf8491c49490955f668f8678c8508ed06b077c5238b24af1c8edd915190a3dad7a26dc70f3fd1123c609bd7ff3bcbbf6a19462740c55663c89f2f5b6de26
|
||||
AUX glance.confd 25 SHA256 5a53dcf1eece81a06a2dd0856b15f8abe20eb1072361b110f752e396e86a7843 SHA512 13e671d4544e58d7397c1a87eb1048ed4bb9561587fcd63783e377b2d25e810222ca3944e0c8cf13c524e64f94c435b456a0d6f7cacfb148e275377699a11ca9 WHIRLPOOL 862a310fbdd7b68f132c45797210011b607d9b5c8937d60c9f5933a4d625bc985ad0277fea26804681b7e0a674dc9da15fbef40502c4052d6742ef0a94e88f3d
|
||||
AUX glance.initd 548 SHA256 508155f5c635c054ec7aa6acf36d818ef0552033433be885d33f4e66ea6f617e SHA512 51f2146f79b9fadcf0cfaaa314eb0b871a9c79d8e7ba02be7eb59329816deb10bd64c5e10fe3b8f4643a05ead97998f367a88dfc7f9c0f1b07e4b9cab54abd7d WHIRLPOOL c6f510f9414ed21dbc95f1b64c831f66e3f0d21fd1ce91d218adf9043a3b2cd927d0b770160b30972fb3a773dd6b53d1abab6d4a30e4f5421ba1809b6496f578
|
||||
DIST glance-11.0.1.tar.gz 1571617 SHA256 357d8cc17b23aefce8c53c9230a26db504d8039baf7e07d8ab9448ce2ceaccf3 SHA512 d43e79700179bbef39d82f8baa378c377f391e7bbd9022ec9e399379fb026be36b06b7ad7b89e39cb0b2a876111b451ad1acf3ad27cead5b58ce02106867bfa6 WHIRLPOOL bbd70deae3ac5b3d549fcca20e666d1ee3f240d59556712783ff4bb8fe780c0c06ff1344476a7a036aa5e99afcdc3a369a7bf322227717f17c42cc02e5f3b477
|
||||
EBUILD glance-11.0.1-r1.ebuild 8848 SHA256 47abb2a2eb0fe47f1e7b657f07f77108d943cf4661fba48f40dc16ac658da2cc SHA512 aa707189eba1943b4d15f816f796ada4ebf1893aad655b90d46ec9539e4f8c6e17933da4ae3a5cb3ea6ca1b9cbeea543757b38cfb3f4f961f5804280803939ad WHIRLPOOL 7e6117728fe3d67712decb9edb9d21989728c0de23fb69c180cb10d33e4844317917cbb18e76e15d94e86627839bcff0d3b9b82e0c27fe42ef8a69707aca1668
|
||||
EBUILD glance-11.0.1.ebuild 8796 SHA256 71b1de794580797e5206495aec8aab05528e3f6b4211595d66d3b974246e9668 SHA512 d72962b3e19e7a748f70fd0ada12df634a0fb5a5ba4f144fdbba57879a6158a74993983bd25048da0b352437a1d72c912da8ffa1b52d8895b5e05fc6c74dbfef WHIRLPOOL bb9fac82d1ebede1890483682cef081ec488ebf1f05d6c007701ce61c58a49a98d61325bec4ef7efce330dcb5096ff1bca35a582f413693f85e9f2e9f03815e0
|
||||
EBUILD glance-2015.1.9999.ebuild 6825 SHA256 5fb1c3401fc1f88c2a13a07d85b561f3b36cb39f071f4fe0e28605c34c75b572 SHA512 942b5f75727270ceec84e8cc20c3b2f11311cf0a7cdcb71e36d715398371852c17143e20a5ffb81d244a747fbdd8cf715e62ee2749907237c5f25b1f48b62368 WHIRLPOOL cf2c669d30aaf2e84304cf446148abe6feb1de030d6e7b89374b872dc60cc3b37c139146ef54b8530a11f756bd294c665db0a3273e0259d5d982421099710f96
|
||||
EBUILD glance-2015.2.9999.ebuild 8820 SHA256 5a272e4acb1ec58082dbdd357d0b0cd5a029a8b82145f7585f60807f7c2e6774 SHA512 ef0b0ea6d4106cfb15a906592732bc724f374eb969336d7580ae5faca333598deeb902c33c43095a6d5d41a3a5465d9370e648e14fab03a24d9471da2e27b938 WHIRLPOOL 0cc0aeab1b9ea20d34048623c4982c0ef37327733eec8e4c553eaa38d530a8416d3ae89c013b31daadc17e5551d8c5ddcc0a345d04bca7165b3d7eb330c484ac
|
||||
MISC ChangeLog 10242 SHA256 c9f5767badc150bd2a96b71588bc3e4ceaf251f3fb44ad73863e1fc53c24deb8 SHA512 5b84cff04f537ca98789f26c95dc0fbe57a1707c3333f796690d6d0816cc352f73691f78e4c237d9486b22620935d89c107f6bdb9dc33689befa58da57fa4810 WHIRLPOOL 68bf7fe8de6d3c10da76abf937c74a4dcbb977f309fc49e095390cbf51bc7d13d106f692e8ce1ecaa5e262a1a312eacba059b202cc467f705729d6d2f99062e8
|
||||
MISC ChangeLog 10636 SHA256 ecc0a9c201ffcab8c5cfeb657e4af940d4d81e94e26e165afb6775951fd0c6f9 SHA512 70da13ae5a2bd5e27c14ab8b531a25ea639c36198f035c8786bd800a5e89f5d5c796c618a12feec9c7ee110932e5e55862f17ee44b5f65b3901c616f2090e589 WHIRLPOOL 830f0118150827c3f043b843b0997e4de80d5f5b24373af208de60f63dc01456d9825254aaeeb28479b3d2dc1d1bb281dc7e0545d3d969951e88d5d785d3c1e6
|
||||
MISC ChangeLog-2015 15177 SHA256 bafe483a76a229fc0871d1fe42837b5ec1cb2640500be46515bc0fdc2008fea7 SHA512 5435ed84455f1f0adbc16eb3d10042992163c9b5847f60d4c04aa92933708965a01b573b2ce3ed1058e7d333e247db1eec8f30f675a0d1005b21fc5d4103977a WHIRLPOOL 7fc94722861301a399626010b664431558dd52e472a39431d2d47f78999b7611fde66fc119181c53c3be486888d3798db7a6fcf098052eae30386c455ae8ad22
|
||||
MISC metadata.xml 786 SHA256 1126c78ab935c6af0877edbf65a74375cee8a0e4035a083c96fe5bd050e3a45b SHA512 eed1ca2a7e15b1844de0a3a35453ab5890622cf161407df5ccb9d21ab2634691c94237496ddc8ab02881a687e16f8378f37817b20705112e11ee55d2a813f99a WHIRLPOOL ec6c41e7a8be936052e02bf1c74831639d75c05be892e3d58d2f94520cdbbbf5eb5cbdc3438a7d19976a1f6dd103731a36cb6d80560a8b12070021ee1e7eccae
|
||||
|
@ -1,137 +0,0 @@
|
||||
From 5bebd513fa71edcdb84f7dec7b16f3523c0c1092 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Fedosin <mfedosin@mirantis.com>
|
||||
Date: Sun, 20 Sep 2015 17:01:22 +0300
|
||||
Subject: Cleanup chunks for deleted image if token expired
|
||||
|
||||
In patch I47229b366c25367ec1bd48aec684e0880f3dfe60 it was
|
||||
introduced the logic that if image was deleted during file
|
||||
upload when we want to update image status from 'saving'
|
||||
to 'active' it's expected to get Duplicate error and delete
|
||||
stale chunks after that. But if user's token is expired
|
||||
there will be Unathorized exception and chunks will stay
|
||||
in store and clog it.
|
||||
And when, the upload operation for such an image is
|
||||
completed the operator configured quota can be exceeded.
|
||||
|
||||
This patch fixes the issue of left over chunks for an image
|
||||
which was deleted from saving status, by correctly handle
|
||||
auth exceptions from registry server.
|
||||
|
||||
Partial-bug: #1498163
|
||||
|
||||
Conflicts:
|
||||
glance/api/v1/upload_utils.py
|
||||
(Kilo catches NotFound instead of ImagenotFound)
|
||||
|
||||
Change-Id: I17a66eca55bfb83107046910e69c4da01415deec
|
||||
(cherry picked from commit 98a8832777a0639a4031e52c69f0d565b3f500c5)
|
||||
|
||||
diff --git a/glance/api/v1/upload_utils.py b/glance/api/v1/upload_utils.py
|
||||
index 7adb2dc..ad4f724 100644
|
||||
--- a/glance/api/v1/upload_utils.py
|
||||
+++ b/glance/api/v1/upload_utils.py
|
||||
@@ -171,6 +171,14 @@ def upload_data_to_store(req, image_meta, image_data, store, notifier):
|
||||
raise exception.NotFound()
|
||||
else:
|
||||
raise
|
||||
+
|
||||
+ except exception.NotAuthenticated as e:
|
||||
+ # Delete image data due to possible token expiration.
|
||||
+ LOG.debug("Authentication error - the token may have "
|
||||
+ "expired during file upload. Deleting image data for "
|
||||
+ " %s " % image_id)
|
||||
+ initiate_deletion(req, location_data, image_id)
|
||||
+ raise webob.exc.HTTPUnauthorized(explanation=e.msg, request=req)
|
||||
except exception.NotFound:
|
||||
msg = _LI("Image %s could not be found after upload. The image may"
|
||||
" have been deleted during the upload.") % image_id
|
||||
diff --git a/glance/api/v2/image_data.py b/glance/api/v2/image_data.py
|
||||
index 4025eeb..9967662 100644
|
||||
--- a/glance/api/v2/image_data.py
|
||||
+++ b/glance/api/v2/image_data.py
|
||||
@@ -88,7 +88,19 @@ class ImageDataController(object):
|
||||
raise webob.exc.HTTPGone(explanation=msg,
|
||||
request=req,
|
||||
content_type='text/plain')
|
||||
-
|
||||
+ except exception.NotAuthenticated:
|
||||
+ msg = (_("Authentication error - the token may have "
|
||||
+ "expired during file upload. Deleting image data for "
|
||||
+ "%s.") % image_id)
|
||||
+ LOG.debug(msg)
|
||||
+ try:
|
||||
+ image.delete()
|
||||
+ except exception.NotAuthenticated:
|
||||
+ # NOTE: Ignore this exception
|
||||
+ pass
|
||||
+ raise webob.exc.HTTPUnauthorized(explanation=msg,
|
||||
+ request=req,
|
||||
+ content_type='text/plain')
|
||||
except ValueError as e:
|
||||
LOG.debug("Cannot save data for image %(id)s: %(e)s",
|
||||
{'id': image_id, 'e': utils.exception_to_str(e)})
|
||||
diff --git a/glance/tests/unit/v1/test_upload_utils.py b/glance/tests/unit/v1/test_upload_utils.py
|
||||
index 1afaf00..8d05515 100644
|
||||
--- a/glance/tests/unit/v1/test_upload_utils.py
|
||||
+++ b/glance/tests/unit/v1/test_upload_utils.py
|
||||
@@ -323,3 +323,29 @@ class TestUploadUtils(base.StoreClearingUnitTest):
|
||||
'metadata': {}}, image_meta['id'])
|
||||
mock_safe_kill.assert_called_once_with(
|
||||
req, image_meta['id'], 'saving')
|
||||
+
|
||||
+ @mock.patch.object(registry, 'update_image_metadata',
|
||||
+ side_effect=exception.NotAuthenticated)
|
||||
+ @mock.patch.object(upload_utils, 'initiate_deletion')
|
||||
+ def test_activate_image_with_expired_token(
|
||||
+ self, mocked_delete, mocked_update):
|
||||
+ """Test token expiration during image upload.
|
||||
+
|
||||
+ If users token expired before image was uploaded then if auth error
|
||||
+ was caught from registry during changing image status from 'saving'
|
||||
+ to 'active' then it's required to delete all image data.
|
||||
+ """
|
||||
+ context = mock.Mock()
|
||||
+ req = mock.Mock()
|
||||
+ req.context = context
|
||||
+ with self._get_store_and_notifier() as (location, checksum, image_meta,
|
||||
+ image_data, store, notifier,
|
||||
+ update_data):
|
||||
+ self.assertRaises(webob.exc.HTTPUnauthorized,
|
||||
+ upload_utils.upload_data_to_store,
|
||||
+ req, image_meta, image_data, store, notifier)
|
||||
+ self.assertEqual(2, mocked_update.call_count)
|
||||
+ mocked_delete.assert_called_once_with(
|
||||
+ req,
|
||||
+ {'url': 'file://foo/bar', 'status': 'active', 'metadata': {}},
|
||||
+ 'c80a1a6c-bd1f-41c5-90ee-81afedb1d58d')
|
||||
diff --git a/glance/tests/unit/v2/test_image_data_resource.py b/glance/tests/unit/v2/test_image_data_resource.py
|
||||
index bc8891e..7458eda 100644
|
||||
--- a/glance/tests/unit/v2/test_image_data_resource.py
|
||||
+++ b/glance/tests/unit/v2/test_image_data_resource.py
|
||||
@@ -192,6 +192,23 @@ class TestImagesController(base.StoreClearingUnitTest):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.upload,
|
||||
request, unit_test_utils.UUID1, 'YYYY', 4)
|
||||
|
||||
+ def test_upload_with_expired_token(self):
|
||||
+ def side_effect(image, from_state=None):
|
||||
+ if from_state == 'saving':
|
||||
+ raise exception.NotAuthenticated()
|
||||
+
|
||||
+ mocked_save = mock.Mock(side_effect=side_effect)
|
||||
+ mocked_delete = mock.Mock()
|
||||
+ request = unit_test_utils.get_fake_request()
|
||||
+ image = FakeImage('abcd')
|
||||
+ image.delete = mocked_delete
|
||||
+ self.image_repo.result = image
|
||||
+ self.image_repo.save = mocked_save
|
||||
+ self.assertRaises(webob.exc.HTTPUnauthorized, self.controller.upload,
|
||||
+ request, unit_test_utils.UUID1, 'YYYY', 4)
|
||||
+ self.assertEqual(3, mocked_save.call_count)
|
||||
+ mocked_delete.assert_called_once_with()
|
||||
+
|
||||
def test_upload_non_existent_image_during_save_initiates_deletion(self):
|
||||
def fake_save_not_found(self):
|
||||
raise exception.NotFound()
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
@ -1,260 +0,0 @@
|
||||
From eb99e45829a1b4c93db5692bdbf636a86faa56c4 Mon Sep 17 00:00:00 2001
|
||||
From: Flavio Percoco <flaper87@gmail.com>
|
||||
Date: Thu, 9 Jul 2015 14:44:04 +0200
|
||||
Subject: Don't import files with backed files
|
||||
|
||||
There's a security issue where it'd be possible to import images with
|
||||
backed files using the task engine and then use/convert those to access
|
||||
system files or any other file in the system. An example of an attack
|
||||
would be to import an image with a backing file pointing to
|
||||
`/etc/passwd`, then convert it to raw and download the generated image.
|
||||
|
||||
This patch forbids importing files with baking files entirely. It does
|
||||
that in the `_ImportToFS` task, which is the one that imports the image
|
||||
locally to then execute other tasks on it. It's not necessary for the
|
||||
`_ImportToStore` task because other tasks won't be executed when the
|
||||
image is imported in the final store.
|
||||
|
||||
Change-Id: I35f43c3b3f326942fb53b7dadb94700ac4513494
|
||||
Closes-bug: #1471912
|
||||
(cherry picked from commit d529863a1e8d2307526bdb395b4aebe97f81603d)
|
||||
|
||||
diff --git a/glance/async/flows/base_import.py b/glance/async/flows/base_import.py
|
||||
index 7656bde..d216aa8 100644
|
||||
--- a/glance/async/flows/base_import.py
|
||||
+++ b/glance/async/flows/base_import.py
|
||||
@@ -13,12 +13,15 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
+import json
|
||||
import logging
|
||||
import os
|
||||
|
||||
import glance_store as store_api
|
||||
from glance_store import backend
|
||||
+from oslo_concurrency import processutils as putils
|
||||
from oslo_config import cfg
|
||||
+from oslo_utils import excutils
|
||||
import six
|
||||
from stevedore import named
|
||||
from taskflow.patterns import linear_flow as lf
|
||||
@@ -146,6 +149,29 @@ class _ImportToFS(task.Task):
|
||||
data = script_utils.get_image_data_iter(self.uri)
|
||||
|
||||
path = self.store.add(image_id, data, 0, context=None)[0]
|
||||
+
|
||||
+ try:
|
||||
+ # NOTE(flaper87): Consider moving this code to a common
|
||||
+ # place that other tasks can consume as well.
|
||||
+ stdout, stderr = putils.trycmd('qemu-img', 'info',
|
||||
+ '--output=json', path,
|
||||
+ log_errors=putils.LOG_ALL_ERRORS)
|
||||
+ except OSError as exc:
|
||||
+ with excutils.save_and_reraise_exception():
|
||||
+ msg = (_LE('Failed to execute security checks on the image '
|
||||
+ '%(task_id)s: %(exc)s') %
|
||||
+ {'task_id': self.task_id, 'exc': exc.message})
|
||||
+ LOG.error(msg)
|
||||
+
|
||||
+ metadata = json.loads(stdout)
|
||||
+
|
||||
+ backing_file = metadata.get('backing-filename')
|
||||
+ if backing_file is not None:
|
||||
+ msg = _("File %(path)s has invalid backing file "
|
||||
+ "%(bfile)s, aborting.") % {'path': path,
|
||||
+ 'bfile': backing_file}
|
||||
+ raise RuntimeError(msg)
|
||||
+
|
||||
return path
|
||||
|
||||
def revert(self, image_id, result=None, **kwargs):
|
||||
diff --git a/glance/tests/unit/async/flows/test_import.py b/glance/tests/unit/async/flows/test_import.py
|
||||
index 70f790c..4cf3d13 100644
|
||||
--- a/glance/tests/unit/async/flows/test_import.py
|
||||
+++ b/glance/tests/unit/async/flows/test_import.py
|
||||
@@ -13,14 +13,17 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
+import json
|
||||
import mock
|
||||
import os
|
||||
import urllib2
|
||||
|
||||
import glance_store
|
||||
+from oslo_concurrency import processutils as putils
|
||||
from oslo_config import cfg
|
||||
from six.moves import cStringIO
|
||||
from taskflow import task
|
||||
+from taskflow.types import failure
|
||||
|
||||
import glance.async.flows.base_import as import_flow
|
||||
from glance.async import taskflow_executor
|
||||
@@ -106,16 +109,23 @@ class TestImportTask(test_utils.BaseTestCase):
|
||||
|
||||
with mock.patch.object(script_utils, 'get_image_data_iter') as dmock:
|
||||
dmock.return_value = cStringIO("TEST_IMAGE")
|
||||
- executor.begin_processing(self.task.task_id)
|
||||
- image_path = os.path.join(self.test_dir, self.image.image_id)
|
||||
- tmp_image_path = os.path.join(self.work_dir,
|
||||
- "%s.tasks_import" % image_path)
|
||||
- self.assertFalse(os.path.exists(tmp_image_path))
|
||||
- self.assertTrue(os.path.exists(image_path))
|
||||
- self.assertEqual(1, len(list(self.image.locations)))
|
||||
- self.assertEqual("file://%s/%s" % (self.test_dir,
|
||||
- self.image.image_id),
|
||||
- self.image.locations[0]['url'])
|
||||
+
|
||||
+ with mock.patch.object(putils, 'trycmd') as tmock:
|
||||
+ tmock.return_value = (json.dumps({
|
||||
+ 'format': 'qcow2',
|
||||
+ }), None)
|
||||
+
|
||||
+ executor.begin_processing(self.task.task_id)
|
||||
+ image_path = os.path.join(self.test_dir, self.image.image_id)
|
||||
+ tmp_image_path = os.path.join(self.work_dir,
|
||||
+ "%s.tasks_import" % image_path)
|
||||
+
|
||||
+ self.assertFalse(os.path.exists(tmp_image_path))
|
||||
+ self.assertTrue(os.path.exists(image_path))
|
||||
+ self.assertEqual(1, len(list(self.image.locations)))
|
||||
+ self.assertEqual("file://%s/%s" % (self.test_dir,
|
||||
+ self.image.image_id),
|
||||
+ self.image.locations[0]['url'])
|
||||
|
||||
def test_import_flow_missing_work_dir(self):
|
||||
self.config(engine_mode='serial', group='taskflow_executor')
|
||||
@@ -151,6 +161,54 @@ class TestImportTask(test_utils.BaseTestCase):
|
||||
self.assertFalse(os.path.exists(tmp_image_path))
|
||||
self.assertTrue(os.path.exists(image_path))
|
||||
|
||||
+ def test_import_flow_backed_file_import_to_fs(self):
|
||||
+ self.config(engine_mode='serial', group='taskflow_executor')
|
||||
+
|
||||
+ img_factory = mock.MagicMock()
|
||||
+
|
||||
+ executor = taskflow_executor.TaskExecutor(
|
||||
+ self.context,
|
||||
+ self.task_repo,
|
||||
+ self.img_repo,
|
||||
+ img_factory)
|
||||
+
|
||||
+ self.task_repo.get.return_value = self.task
|
||||
+
|
||||
+ def create_image(*args, **kwargs):
|
||||
+ kwargs['image_id'] = UUID1
|
||||
+ return self.img_factory.new_image(*args, **kwargs)
|
||||
+
|
||||
+ self.img_repo.get.return_value = self.image
|
||||
+ img_factory.new_image.side_effect = create_image
|
||||
+
|
||||
+ with mock.patch.object(script_utils, 'get_image_data_iter') as dmock:
|
||||
+ dmock.return_value = cStringIO("TEST_IMAGE")
|
||||
+
|
||||
+ with mock.patch.object(putils, 'trycmd') as tmock:
|
||||
+ tmock.return_value = (json.dumps({
|
||||
+ 'backing-filename': '/etc/password'
|
||||
+ }), None)
|
||||
+
|
||||
+ with mock.patch.object(import_flow._ImportToFS,
|
||||
+ 'revert') as rmock:
|
||||
+ self.assertRaises(RuntimeError,
|
||||
+ executor.begin_processing,
|
||||
+ self.task.task_id)
|
||||
+ self.assertTrue(rmock.called)
|
||||
+ self.assertIsInstance(rmock.call_args[1]['result'],
|
||||
+ failure.Failure)
|
||||
+
|
||||
+ image_path = os.path.join(self.test_dir,
|
||||
+ self.image.image_id)
|
||||
+
|
||||
+ fname = "%s.tasks_import" % image_path
|
||||
+ tmp_image_path = os.path.join(self.work_dir, fname)
|
||||
+
|
||||
+ self.assertFalse(os.path.exists(tmp_image_path))
|
||||
+ # Note(sabari): The image should not have been uploaded to
|
||||
+ # the store as the flow failed before ImportToStore Task.
|
||||
+ self.assertFalse(os.path.exists(image_path))
|
||||
+
|
||||
def test_import_flow_revert(self):
|
||||
self.config(engine_mode='serial',
|
||||
group='taskflow_executor')
|
||||
@@ -175,20 +233,31 @@ class TestImportTask(test_utils.BaseTestCase):
|
||||
with mock.patch.object(script_utils, 'get_image_data_iter') as dmock:
|
||||
dmock.return_value = cStringIO("TEST_IMAGE")
|
||||
|
||||
- with mock.patch.object(import_flow, "_get_import_flows") as imock:
|
||||
- imock.return_value = (x for x in [_ErrorTask()])
|
||||
- self.assertRaises(RuntimeError,
|
||||
- executor.begin_processing, self.task.task_id)
|
||||
- image_path = os.path.join(self.test_dir, self.image.image_id)
|
||||
- tmp_image_path = os.path.join(self.work_dir,
|
||||
- "%s.tasks_import" % image_path)
|
||||
- self.assertFalse(os.path.exists(tmp_image_path))
|
||||
-
|
||||
- # NOTE(flaper87): Eventually, we want this to be assertTrue.
|
||||
- # The current issue is there's no way to tell taskflow to
|
||||
- # continue on failures. That is, revert the subflow but keep
|
||||
- # executing the parent flow. Under discussion/development.
|
||||
- self.assertFalse(os.path.exists(image_path))
|
||||
+ with mock.patch.object(putils, 'trycmd') as tmock:
|
||||
+ tmock.return_value = (json.dumps({
|
||||
+ 'format': 'qcow2',
|
||||
+ }), None)
|
||||
+
|
||||
+ with mock.patch.object(import_flow,
|
||||
+ "_get_import_flows") as imock:
|
||||
+ imock.return_value = (x for x in [_ErrorTask()])
|
||||
+ self.assertRaises(RuntimeError,
|
||||
+ executor.begin_processing,
|
||||
+ self.task.task_id)
|
||||
+
|
||||
+ image_path = os.path.join(self.test_dir,
|
||||
+ self.image.image_id)
|
||||
+ tmp_image_path = os.path.join(self.work_dir,
|
||||
+ ("%s.tasks_import" %
|
||||
+ image_path))
|
||||
+ self.assertFalse(os.path.exists(tmp_image_path))
|
||||
+
|
||||
+ # NOTE(flaper87): Eventually, we want this to be assertTrue
|
||||
+ # The current issue is there's no way to tell taskflow to
|
||||
+ # continue on failures. That is, revert the subflow but
|
||||
+ # keep executing the parent flow. Under
|
||||
+ # discussion/development.
|
||||
+ self.assertFalse(os.path.exists(image_path))
|
||||
|
||||
def test_import_flow_no_import_flows(self):
|
||||
self.config(engine_mode='serial',
|
||||
@@ -271,15 +340,20 @@ class TestImportTask(test_utils.BaseTestCase):
|
||||
with mock.patch.object(script_utils, 'get_image_data_iter') as dmock:
|
||||
dmock.return_value = "test"
|
||||
|
||||
- image_id = UUID1
|
||||
- path = import_fs.execute(image_id)
|
||||
- reader, size = glance_store.get_from_backend(path)
|
||||
- self.assertEqual(4, size)
|
||||
- self.assertEqual(dmock.return_value, "".join(reader))
|
||||
+ with mock.patch.object(putils, 'trycmd') as tmock:
|
||||
+ tmock.return_value = (json.dumps({
|
||||
+ 'format': 'qcow2',
|
||||
+ }), None)
|
||||
+
|
||||
+ image_id = UUID1
|
||||
+ path = import_fs.execute(image_id)
|
||||
+ reader, size = glance_store.get_from_backend(path)
|
||||
+ self.assertEqual(4, size)
|
||||
+ self.assertEqual(dmock.return_value, "".join(reader))
|
||||
|
||||
- image_path = os.path.join(self.work_dir, image_id)
|
||||
- tmp_image_path = os.path.join(self.work_dir, image_path)
|
||||
- self.assertTrue(os.path.exists(tmp_image_path))
|
||||
+ image_path = os.path.join(self.work_dir, image_id)
|
||||
+ tmp_image_path = os.path.join(self.work_dir, image_path)
|
||||
+ self.assertTrue(os.path.exists(tmp_image_path))
|
||||
|
||||
def test_delete_from_fs(self):
|
||||
delete_fs = import_flow._DeleteFromFS(self.task.task_id,
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
@ -1,192 +0,0 @@
|
||||
From 9beca533f42ae1fc87418de0c360e19bc59b24b5 Mon Sep 17 00:00:00 2001
|
||||
From: Stuart McLaren <stuart.mclaren@hp.com>
|
||||
Date: Tue, 11 Aug 2015 10:37:09 +0000
|
||||
Subject: [PATCH] Prevent image status being directly modified via v1
|
||||
|
||||
Users shouldn't be able to change an image's status directly via the
|
||||
v1 API.
|
||||
|
||||
Some existing consumers of Glance set the x-image-meta-status header in
|
||||
requests to the Glance API, eg:
|
||||
|
||||
https://github.com/openstack/nova/blob/master/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance#L184
|
||||
|
||||
We should try to prevent users setting 'status' via v1, but without breaking
|
||||
existing benign API calls such as these.
|
||||
|
||||
I've adopted the following approach (which has some prior art in 'protected properties').
|
||||
|
||||
If a PUT request is received which contains an x-image-meta-status header:
|
||||
|
||||
* The user provided status is ignored if it matches the current image
|
||||
status (this prevents benign calls such as the nova one above from
|
||||
breaking). The usual code (eg 200) will be returned.
|
||||
|
||||
* If the user provided status doesn't match the current image status (ie
|
||||
there is a real attempt to change the value) 403 will be returned. This
|
||||
will break any calls which currently intentionally change the status.
|
||||
|
||||
APIImpact
|
||||
|
||||
Closes-bug: 1482371
|
||||
|
||||
Change-Id: I44fadf32abb57c962b67467091c3f51c1ccc25e6
|
||||
(cherry picked from commit 4d08db5b6d42323ac1958ef3b7417d875e7bea8c)
|
||||
---
|
||||
glance/api/v1/__init__.py | 3 +
|
||||
glance/api/v1/images.py | 9 +++
|
||||
glance/tests/functional/v1/test_api.py | 89 ++++++++++++++++++++++
|
||||
.../integration/legacy_functional/test_v1_api.py | 2 +
|
||||
4 files changed, 103 insertions(+)
|
||||
|
||||
diff --git a/glance/api/v1/__init__.py b/glance/api/v1/__init__.py
|
||||
index 74de9aa1411d8e926770b67f7d851cf14e794414..9306bbb4fe78f77a26bb539c717fdfd2b38767c8 100644
|
||||
--- a/glance/api/v1/__init__.py
|
||||
+++ b/glance/api/v1/__init__.py
|
||||
@@ -21,3 +21,6 @@ SUPPORTED_PARAMS = ('limit', 'marker', 'sort_key', 'sort_dir')
|
||||
|
||||
# Metadata which only an admin can change once the image is active
|
||||
ACTIVE_IMMUTABLE = ('size', 'checksum')
|
||||
+
|
||||
+# Metadata which cannot be changed (irrespective of the current image state)
|
||||
+IMMUTABLE = ('status',)
|
||||
diff --git a/glance/api/v1/images.py b/glance/api/v1/images.py
|
||||
index e33b91fbca79377e78ccfd329fa542ad422f5ffc..95e32949d958d0f57a3b60c141b91784a5801f5a 100644
|
||||
--- a/glance/api/v1/images.py
|
||||
+++ b/glance/api/v1/images.py
|
||||
@@ -57,6 +57,7 @@ _LW = i18n._LW
|
||||
SUPPORTED_PARAMS = glance.api.v1.SUPPORTED_PARAMS
|
||||
SUPPORTED_FILTERS = glance.api.v1.SUPPORTED_FILTERS
|
||||
ACTIVE_IMMUTABLE = glance.api.v1.ACTIVE_IMMUTABLE
|
||||
+IMMUTABLE = glance.api.v1.IMMUTABLE
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_opt('disk_formats', 'glance.common.config', group='image_format')
|
||||
@@ -912,6 +913,14 @@ class Controller(controller.BaseController):
|
||||
request=req,
|
||||
content_type="text/plain")
|
||||
|
||||
+ for key in IMMUTABLE:
|
||||
+ if (image_meta.get(key) is not None and
|
||||
+ image_meta.get(key) != orig_image_meta.get(key)):
|
||||
+ msg = _("Forbidden to modify '%s' of image.") % key
|
||||
+ raise HTTPForbidden(explanation=msg,
|
||||
+ request=req,
|
||||
+ content_type="text/plain")
|
||||
+
|
||||
# The default behaviour for a PUT /images/<IMAGE_ID> is to
|
||||
# override any properties that were previously set. This, however,
|
||||
# leads to a number of issues for the common use case where a caller
|
||||
diff --git a/glance/tests/functional/v1/test_api.py b/glance/tests/functional/v1/test_api.py
|
||||
index 9fba3bb5e40c8742530691228c7b436b385fc2ca..6b3bfbb4270f1eb0f50418504e65be30ea23d10b 100644
|
||||
--- a/glance/tests/functional/v1/test_api.py
|
||||
+++ b/glance/tests/functional/v1/test_api.py
|
||||
@@ -715,3 +715,92 @@ class TestApi(functional.FunctionalTest):
|
||||
self.assertEqual(404, response.status)
|
||||
|
||||
self.stop_servers()
|
||||
+
|
||||
+ def test_status_cannot_be_manipulated_directly(self):
|
||||
+ self.cleanup()
|
||||
+ self.start_servers(**self.__dict__.copy())
|
||||
+ headers = minimal_headers('Image1')
|
||||
+
|
||||
+ # Create a 'queued' image
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'Content-Type': 'application/octet-stream',
|
||||
+ 'X-Image-Meta-Disk-Format': 'raw',
|
||||
+ 'X-Image-Meta-Container-Format': 'bare'}
|
||||
+ path = "http://%s:%d/v1/images" % ("127.0.0.1", self.api_port)
|
||||
+ response, content = http.request(path, 'POST', headers=headers,
|
||||
+ body=None)
|
||||
+ self.assertEqual(201, response.status)
|
||||
+ image = jsonutils.loads(content)['image']
|
||||
+ self.assertEqual('queued', image['status'])
|
||||
+
|
||||
+ # Ensure status of 'queued' image can't be changed
|
||||
+ path = "http://%s:%d/v1/images/%s" % ("127.0.0.1", self.api_port,
|
||||
+ image['id'])
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'X-Image-Meta-Status': 'active'}
|
||||
+ response, content = http.request(path, 'PUT', headers=headers)
|
||||
+ self.assertEqual(403, response.status)
|
||||
+ response, content = http.request(path, 'HEAD')
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ self.assertEqual('queued', response['x-image-meta-status'])
|
||||
+
|
||||
+ # We allow 'setting' to the same status
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'X-Image-Meta-Status': 'queued'}
|
||||
+ response, content = http.request(path, 'PUT', headers=headers)
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ response, content = http.request(path, 'HEAD')
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ self.assertEqual('queued', response['x-image-meta-status'])
|
||||
+
|
||||
+ # Make image active
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'Content-Type': 'application/octet-stream'}
|
||||
+ response, content = http.request(path, 'PUT', headers=headers,
|
||||
+ body='data')
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ image = jsonutils.loads(content)['image']
|
||||
+ self.assertEqual('active', image['status'])
|
||||
+
|
||||
+ # Ensure status of 'active' image can't be changed
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'X-Image-Meta-Status': 'queued'}
|
||||
+ response, content = http.request(path, 'PUT', headers=headers)
|
||||
+ self.assertEqual(403, response.status)
|
||||
+ response, content = http.request(path, 'HEAD')
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ self.assertEqual('active', response['x-image-meta-status'])
|
||||
+
|
||||
+ # We allow 'setting' to the same status
|
||||
+ http = httplib2.Http()
|
||||
+ headers = {'X-Image-Meta-Status': 'active'}
|
||||
+ response, content = http.request(path, 'PUT', headers=headers)
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ response, content = http.request(path, 'HEAD')
|
||||
+ self.assertEqual(200, response.status)
|
||||
+ self.assertEqual('active', response['x-image-meta-status'])
|
||||
+
|
||||
+ # Create a 'queued' image, ensure 'status' header is ignored
|
||||
+ http = httplib2.Http()
|
||||
+ path = "http://%s:%d/v1/images" % ("127.0.0.1", self.api_port)
|
||||
+ headers = {'Content-Type': 'application/octet-stream',
|
||||
+ 'X-Image-Meta-Status': 'active'}
|
||||
+ response, content = http.request(path, 'POST', headers=headers,
|
||||
+ body=None)
|
||||
+ self.assertEqual(201, response.status)
|
||||
+ image = jsonutils.loads(content)['image']
|
||||
+ self.assertEqual('queued', image['status'])
|
||||
+
|
||||
+ # Create an 'active' image, ensure 'status' header is ignored
|
||||
+ http = httplib2.Http()
|
||||
+ path = "http://%s:%d/v1/images" % ("127.0.0.1", self.api_port)
|
||||
+ headers = {'Content-Type': 'application/octet-stream',
|
||||
+ 'X-Image-Meta-Disk-Format': 'raw',
|
||||
+ 'X-Image-Meta-Status': 'queued',
|
||||
+ 'X-Image-Meta-Container-Format': 'bare'}
|
||||
+ response, content = http.request(path, 'POST', headers=headers,
|
||||
+ body='data')
|
||||
+ self.assertEqual(201, response.status)
|
||||
+ image = jsonutils.loads(content)['image']
|
||||
+ self.assertEqual('active', image['status'])
|
||||
+ self.stop_servers()
|
||||
diff --git a/glance/tests/integration/legacy_functional/test_v1_api.py b/glance/tests/integration/legacy_functional/test_v1_api.py
|
||||
index dff436465919569480bdbac537d20a6d61c98f46..511d46dfe18028bb430504784cc9d24c58736c3b 100644
|
||||
--- a/glance/tests/integration/legacy_functional/test_v1_api.py
|
||||
+++ b/glance/tests/integration/legacy_functional/test_v1_api.py
|
||||
@@ -358,6 +358,8 @@ class TestApi(base.ApiTest):
|
||||
path = "/v1/images"
|
||||
response, content = self.http.request(path, 'POST', headers=headers)
|
||||
self.assertEqual(201, response.status)
|
||||
+ image = jsonutils.loads(content)['image']
|
||||
+ self.assertEqual('active', image['status'])
|
||||
|
||||
# 2. HEAD image-location
|
||||
# Verify image size is zero and the status is active
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,332 @@
|
||||
From c6021e9b3642340036347026a3f251e066e53094 Mon Sep 17 00:00:00 2001
|
||||
From: Erno Kuvaja <jokke@usr.fi>
|
||||
Date: Tue, 19 Jan 2016 13:37:05 +0000
|
||||
Subject: [PATCH] Prevent user to remove last location of the image
|
||||
|
||||
If the last location of the image is removed, image transitions back to queued.
|
||||
This allows user to upload new data into the existing image record. By
|
||||
preventing removal of the last location we prevent the image transition back to
|
||||
queued.
|
||||
|
||||
This change also prevents doing the same operation via replacing the locations
|
||||
with empty list.
|
||||
|
||||
SecurityImpact
|
||||
DocImpact
|
||||
APIImpact
|
||||
|
||||
Conflicts:
|
||||
glance/tests/unit/v2/test_images_resource.py
|
||||
|
||||
Change-Id: Ieb03aaba887492819f9c58aa67f7acfcea81720e
|
||||
Closes-Bug: #1525915
|
||||
(cherry picked from commit 2f4504da2149697bcdb93ed855e15025d2a08f8c)
|
||||
---
|
||||
glance/api/v2/images.py | 19 +++-
|
||||
glance/tests/functional/v2/test_images.py | 14 ---
|
||||
glance/tests/unit/v2/test_images_resource.py | 122 ++++-----------------
|
||||
...oving-last-image-location-d5ee3e00efe14f34.yaml | 10 ++
|
||||
4 files changed, 44 insertions(+), 121 deletions(-)
|
||||
create mode 100644 releasenotes/notes/Prevent-removing-last-image-location-d5ee3e00efe14f34.yaml
|
||||
|
||||
diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py
|
||||
index 17678f2..cf667bf 100644
|
||||
--- a/glance/api/v2/images.py
|
||||
+++ b/glance/api/v2/images.py
|
||||
@@ -181,7 +181,10 @@ class ImagesController(object):
|
||||
path = change['path']
|
||||
path_root = path[0]
|
||||
value = change['value']
|
||||
- if path_root == 'locations':
|
||||
+ if path_root == 'locations' and value == []:
|
||||
+ msg = _("Cannot set locations to empty list.")
|
||||
+ raise webob.exc.HTTPForbidden(message=msg)
|
||||
+ elif path_root == 'locations' and value != []:
|
||||
self._do_replace_locations(image, value)
|
||||
elif path_root == 'owner' and req.context.is_admin == False:
|
||||
msg = _("Owner can't be updated by non admin.")
|
||||
@@ -217,7 +220,10 @@ class ImagesController(object):
|
||||
path = change['path']
|
||||
path_root = path[0]
|
||||
if path_root == 'locations':
|
||||
- self._do_remove_locations(image, path[1])
|
||||
+ try:
|
||||
+ self._do_remove_locations(image, path[1])
|
||||
+ except exception.Forbidden as e:
|
||||
+ raise webob.exc.HTTPForbidden(e.msg)
|
||||
else:
|
||||
if hasattr(image, path_root):
|
||||
msg = _("Property %s may not be removed.")
|
||||
@@ -306,6 +312,11 @@ class ImagesController(object):
|
||||
explanation=encodeutils.exception_to_unicode(ve))
|
||||
|
||||
def _do_remove_locations(self, image, path_pos):
|
||||
+ if len(image.locations) == 1:
|
||||
+ LOG.debug("User forbidden to remove last location of image %s",
|
||||
+ image.image_id)
|
||||
+ msg = _("Cannot remove last location in the image.")
|
||||
+ raise exception.Forbidden(message=msg)
|
||||
pos = self._get_locations_op_pos(path_pos,
|
||||
len(image.locations), False)
|
||||
if pos is None:
|
||||
@@ -315,11 +326,11 @@ class ImagesController(object):
|
||||
# NOTE(zhiyan): this actually deletes the location
|
||||
# from the backend store.
|
||||
image.locations.pop(pos)
|
||||
+ # TODO(jokke): Fix this, we should catch what store throws and
|
||||
+ # provide definitely something else than IternalServerError to user.
|
||||
except Exception as e:
|
||||
raise webob.exc.HTTPInternalServerError(
|
||||
explanation=encodeutils.exception_to_unicode(e))
|
||||
- if len(image.locations) == 0 and image.status == 'active':
|
||||
- image.status = 'queued'
|
||||
|
||||
|
||||
class RequestDeserializer(wsgi.JSONRequestDeserializer):
|
||||
diff --git a/glance/tests/functional/v2/test_images.py b/glance/tests/functional/v2/test_images.py
|
||||
index aabc567..f199787 100644
|
||||
--- a/glance/tests/functional/v2/test_images.py
|
||||
+++ b/glance/tests/functional/v2/test_images.py
|
||||
@@ -522,20 +522,6 @@ class TestImages(functional.FunctionalTest):
|
||||
response = requests.patch(path, headers=headers, data=data)
|
||||
self.assertEqual(200, response.status_code, response.text)
|
||||
|
||||
- # Remove all locations of the image then the image size shouldn't be
|
||||
- # able to access
|
||||
- path = self._url('/v2/images/%s' % image2_id)
|
||||
- media_type = 'application/openstack-images-v2.1-json-patch'
|
||||
- headers = self._headers({'content-type': media_type})
|
||||
- doc = [{'op': 'replace', 'path': '/locations', 'value': []}]
|
||||
- data = jsonutils.dumps(doc)
|
||||
- response = requests.patch(path, headers=headers, data=data)
|
||||
- self.assertEqual(200, response.status_code, response.text)
|
||||
- image = jsonutils.loads(response.text)
|
||||
- self.assertIsNone(image['size'])
|
||||
- self.assertIsNone(image['virtual_size'])
|
||||
- self.assertEqual('queued', image['status'])
|
||||
-
|
||||
# Deletion should work. Deleting image-1
|
||||
path = self._url('/v2/images/%s' % image_id)
|
||||
response = requests.delete(path, headers=self._headers())
|
||||
diff --git a/glance/tests/unit/v2/test_images_resource.py b/glance/tests/unit/v2/test_images_resource.py
|
||||
index 698c284..ee09ee7 100644
|
||||
--- a/glance/tests/unit/v2/test_images_resource.py
|
||||
+++ b/glance/tests/unit/v2/test_images_resource.py
|
||||
@@ -1417,26 +1417,6 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
self.assertRaises(webob.exc.HTTPConflict, self.controller.update,
|
||||
another_request, created_image.image_id, changes)
|
||||
|
||||
- def test_update_replace_locations(self):
|
||||
- self.stubs.Set(store, 'get_size_from_backend',
|
||||
- unit_test_utils.fake_get_size_from_backend)
|
||||
- request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- output = self.controller.update(request, UUID1, changes)
|
||||
- self.assertEqual(UUID1, output.image_id)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
- self.assertIsNone(output.size)
|
||||
-
|
||||
- new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
- changes = [{'op': 'replace', 'path': ['locations'],
|
||||
- 'value': [new_location]}]
|
||||
- output = self.controller.update(request, UUID1, changes)
|
||||
- self.assertEqual(UUID1, output.image_id)
|
||||
- self.assertEqual(1, len(output.locations))
|
||||
- self.assertEqual(new_location, output.locations[0])
|
||||
- self.assertEqual('active', output.status)
|
||||
-
|
||||
def test_update_replace_locations_non_empty(self):
|
||||
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
request = unit_test_utils.get_fake_request()
|
||||
@@ -1448,35 +1428,9 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
def test_update_replace_locations_invalid(self):
|
||||
request = unit_test_utils.get_fake_request()
|
||||
changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- output = self.controller.update(request, UUID1, changes)
|
||||
- self.assertEqual(UUID1, output.image_id)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
-
|
||||
- request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'replace', 'path': ['locations'],
|
||||
- 'value': [{'url': 'unknow://foo', 'metadata': {}}]}]
|
||||
- self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
+ self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
|
||||
request, UUID1, changes)
|
||||
|
||||
- def test_update_replace_locations_status_exception(self):
|
||||
- self.stubs.Set(store, 'get_size_from_backend',
|
||||
- unit_test_utils.fake_get_size_from_backend)
|
||||
- request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- output = self.controller.update(request, UUID2, changes)
|
||||
- self.assertEqual(UUID2, output.image_id)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
-
|
||||
- self.db.image_update(None, UUID2, {'disk_format': None})
|
||||
-
|
||||
- new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
- changes = [{'op': 'replace', 'path': ['locations'],
|
||||
- 'value': [new_location]}]
|
||||
- self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
- request, UUID2, changes)
|
||||
-
|
||||
def test_update_add_property(self):
|
||||
request = unit_test_utils.get_fake_request()
|
||||
|
||||
@@ -1600,24 +1554,6 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
request, UUID1, changes)
|
||||
|
||||
- def test_update_add_locations_status_exception(self):
|
||||
- self.stubs.Set(store, 'get_size_from_backend',
|
||||
- unit_test_utils.fake_get_size_from_backend)
|
||||
- request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- output = self.controller.update(request, UUID2, changes)
|
||||
- self.assertEqual(UUID2, output.image_id)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
-
|
||||
- self.db.image_update(None, UUID2, {'disk_format': None})
|
||||
-
|
||||
- new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
- changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||
- 'value': new_location}]
|
||||
- self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
- request, UUID2, changes)
|
||||
-
|
||||
def test_update_add_duplicate_locations(self):
|
||||
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
request = unit_test_utils.get_fake_request()
|
||||
@@ -1631,23 +1567,6 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
request, UUID1, changes)
|
||||
|
||||
- def test_update_replace_duplicate_locations(self):
|
||||
- self.stubs.Set(store, 'get_size_from_backend',
|
||||
- unit_test_utils.fake_get_size_from_backend)
|
||||
- request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- output = self.controller.update(request, UUID1, changes)
|
||||
- self.assertEqual(UUID1, output.image_id)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
-
|
||||
- new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
- changes = [{'op': 'replace', 'path': ['locations'],
|
||||
- 'value': [new_location, new_location]}]
|
||||
-
|
||||
- self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
- request, UUID1, changes)
|
||||
-
|
||||
def test_update_add_too_many_locations(self):
|
||||
self.config(image_location_quota=1)
|
||||
request = unit_test_utils.get_fake_request()
|
||||
@@ -1748,9 +1667,12 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
{'op': 'add', 'path': ['locations', '-'],
|
||||
'value': {'url': '%s/fake_location_1' % BASE_URI,
|
||||
'metadata': {}}},
|
||||
+ {'op': 'add', 'path': ['locations', '-'],
|
||||
+ 'value': {'url': '%s/fake_location_2' % BASE_URI,
|
||||
+ 'metadata': {}}},
|
||||
]
|
||||
self.controller.update(request, UUID1, changes)
|
||||
- self.config(image_location_quota=1)
|
||||
+ self.config(image_location_quota=2)
|
||||
|
||||
# We must remove two properties to avoid being
|
||||
# over the limit of 1 property
|
||||
@@ -1763,8 +1685,8 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
]
|
||||
output = self.controller.update(request, UUID1, changes)
|
||||
self.assertEqual(UUID1, output.image_id)
|
||||
- self.assertEqual(1, len(output.locations))
|
||||
- self.assertIn('fake_location_3', output.locations[0]['url'])
|
||||
+ self.assertEqual(2, len(output.locations))
|
||||
+ self.assertIn('fake_location_3', output.locations[1]['url'])
|
||||
self.assertNotEqual(output.created_at, output.updated_at)
|
||||
|
||||
def test_update_remove_base_property(self):
|
||||
@@ -1805,24 +1727,23 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
unit_test_utils.fake_get_size_from_backend)
|
||||
|
||||
request = unit_test_utils.get_fake_request()
|
||||
- changes = [{'op': 'remove', 'path': ['locations', '0']}]
|
||||
- output = self.controller.update(request, UUID1, changes)
|
||||
- self.assertEqual(output.image_id, UUID1)
|
||||
- self.assertEqual(0, len(output.locations))
|
||||
- self.assertEqual('queued', output.status)
|
||||
- self.assertIsNone(output.size)
|
||||
-
|
||||
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||
'value': new_location}]
|
||||
+ self.controller.update(request, UUID1, changes)
|
||||
+ changes = [{'op': 'remove', 'path': ['locations', '0']}]
|
||||
output = self.controller.update(request, UUID1, changes)
|
||||
self.assertEqual(UUID1, output.image_id)
|
||||
self.assertEqual(1, len(output.locations))
|
||||
- self.assertEqual(new_location, output.locations[0])
|
||||
self.assertEqual('active', output.status)
|
||||
|
||||
def test_update_remove_location_invalid_pos(self):
|
||||
request = unit_test_utils.get_fake_request()
|
||||
+ changes = [
|
||||
+ {'op': 'add', 'path': ['locations', '-'],
|
||||
+ 'value': {'url': '%s/fake_location' % BASE_URI,
|
||||
+ 'metadata': {}}}]
|
||||
+ self.controller.update(request, UUID1, changes)
|
||||
changes = [{'op': 'remove', 'path': ['locations', None]}]
|
||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||
request, UUID1, changes)
|
||||
@@ -1844,6 +1765,11 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||
fake_delete_image_location_from_backend)
|
||||
|
||||
request = unit_test_utils.get_fake_request()
|
||||
+ changes = [
|
||||
+ {'op': 'add', 'path': ['locations', '-'],
|
||||
+ 'value': {'url': '%s/fake_location' % BASE_URI,
|
||||
+ 'metadata': {}}}]
|
||||
+ self.controller.update(request, UUID1, changes)
|
||||
changes = [{'op': 'remove', 'path': ['locations', '0']}]
|
||||
self.assertRaises(webob.exc.HTTPInternalServerError,
|
||||
self.controller.update, request, UUID1, changes)
|
||||
@@ -2137,16 +2063,6 @@ class TestImagesControllerPolicies(base.IsolatedUnitTest):
|
||||
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
|
||||
request, UUID1, changes)
|
||||
|
||||
- self.stubs.Set(self.store_utils, 'delete_image_location_from_backend',
|
||||
- fake_delete_image_location_from_backend)
|
||||
-
|
||||
- changes = [{'op': 'replace', 'path': ['locations'], 'value': []}]
|
||||
- self.controller.update(request, UUID1, changes)
|
||||
- changes = [{'op': 'replace', 'path': ['locations'],
|
||||
- 'value': [new_location]}]
|
||||
- self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
|
||||
- request, UUID1, changes)
|
||||
-
|
||||
def test_update_delete_image_location_unauthorized(self):
|
||||
rules = {"delete_image_location": False}
|
||||
self.policy.set_rules(rules)
|
||||
diff --git a/releasenotes/notes/Prevent-removing-last-image-location-d5ee3e00efe14f34.yaml b/releasenotes/notes/Prevent-removing-last-image-location-d5ee3e00efe14f34.yaml
|
||||
new file mode 100644
|
||||
index 0000000..344e6e5
|
||||
--- /dev/null
|
||||
+++ b/releasenotes/notes/Prevent-removing-last-image-location-d5ee3e00efe14f34.yaml
|
||||
@@ -0,0 +1,10 @@
|
||||
+---
|
||||
+security:
|
||||
+ - Fixing bug 1525915; image might be transitioning
|
||||
+ from active to queued by regular user by removing
|
||||
+ last location of image (or replacing locations
|
||||
+ with empty list). This allows user to re-upload
|
||||
+ data to the image breaking Glance's promise of
|
||||
+ image data immutability. From now on, last
|
||||
+ location cannot be removed and locations cannot
|
||||
+ be replaced with empty list.
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -ur glance-2013.2.orig/doc/source/conf.py glance-2013.2/doc/source/conf.py
|
||||
--- doc/source/conf.py 2013-10-17 21:39:46.000000000 +0800
|
||||
+++ doc/source/conf.py 2013-11-13 18:51:29.099839976 +0800
|
||||
@@ -250,8 +250,3 @@
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_use_modindex = True
|
||||
-
|
||||
-# Example configuration for intersphinx: refer to the Python standard library.
|
||||
-intersphinx_mapping = {'python': ('http://docs.python.org/', None),
|
||||
- 'nova': ('http://nova.openstack.org', None),
|
||||
- 'swift': ('http://swift.openstack.org', None)}
|
@ -0,0 +1,229 @@
|
||||
# Copyright 1999-2016 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI=5
|
||||
PYTHON_COMPAT=( python2_7 )
|
||||
|
||||
inherit distutils-r1 user
|
||||
|
||||
DESCRIPTION="Services for discovering, registering, and retrieving VM images"
|
||||
HOMEPAGE="https://launchpad.net/glance"
|
||||
SRC_URI="https://tarballs.openstack.org/${PN}/${P}.tar.gz"
|
||||
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
IUSE="doc mysql postgres +sqlite +swift test"
|
||||
REQUIRED_USE="|| ( mysql postgres sqlite )"
|
||||
|
||||
CDEPEND=">=dev-python/pbr-1.6.0[${PYTHON_USEDEP}]"
|
||||
DEPEND="
|
||||
dev-python/setuptools[${PYTHON_USEDEP}]
|
||||
${CDEPEND}
|
||||
test? (
|
||||
${RDEPEND}
|
||||
>=dev-python/Babel-1.3[${PYTHON_USEDEP}]
|
||||
<=dev-python/Babel-2.1.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/coverage-3.6[${PYTHON_USEDEP}]
|
||||
<=dev-python/coverage-4.0.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/fixtures-1.3.1[${PYTHON_USEDEP}]
|
||||
<=dev-python/fixtures-1.4.0-r9999[${PYTHON_USEDEP}]
|
||||
>=dev-python/mox3-0.7.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/mox3-0.12.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/mock-1.2[${PYTHON_USEDEP}]
|
||||
<=dev-python/mock-1.3.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/sphinx-1.1.2[${PYTHON_USEDEP}]
|
||||
!~dev-python/sphinx-1.2.0[${PYTHON_USEDEP}]
|
||||
<dev-python/sphinx-1.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/requests-2.5.2[${PYTHON_USEDEP}]
|
||||
!~dev-python/requests-2.8.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/requests-2.8.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/testrepository-0.0.18[${PYTHON_USEDEP}]
|
||||
<=dev-python/testrepository-0.0.20[${PYTHON_USEDEP}]
|
||||
>=dev-python/testresources-0.2.4[${PYTHON_USEDEP}]
|
||||
<=dev-python/testresources-1.0.0-r9999[${PYTHON_USEDEP}]
|
||||
>=dev-python/testscenarios-0.4[${PYTHON_USEDEP}]
|
||||
<=dev-python/testscenarios-0.5[${PYTHON_USEDEP}]
|
||||
>=dev-python/testtools-1.4.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/testtools-1.8.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/psutil-1.1.1[${PYTHON_USEDEP}]
|
||||
<dev-python/psutil-2.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslotest-1.10.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslotest-2.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/pymysql-0.6.2[${PYTHON_USEDEP}]
|
||||
<=dev-python/pymysql-0.6.7[${PYTHON_USEDEP}]
|
||||
>=dev-python/psycopg-2.5[${PYTHON_USEDEP}]
|
||||
<=dev-python/psycopg-2.6.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/pysendfile-2.0.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/pysendfile-2.0.1[${PYTHON_USEDEP}]
|
||||
<=dev-python/qpid-python-0.32[$(python_gen_usedep 'python2_7')]
|
||||
>=dev-python/pyxattr-0.5.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/python-swiftclient-2.2.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/python-swiftclient-2.7.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-sphinx-2.5.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-sphinx-4.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/reno-0.1.1[${PYTHON_USEDEP}]
|
||||
)"
|
||||
|
||||
#note to self, wsgiref is a python builtin, no need to package it
|
||||
#>=dev-python/wsgiref-0.1.2[${PYTHON_USEDEP}]
|
||||
|
||||
RDEPEND="
|
||||
${CDEPEND}
|
||||
sqlite? (
|
||||
>=dev-python/sqlalchemy-0.9.9[sqlite,${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-1.0.10[sqlite,${PYTHON_USEDEP}]
|
||||
)
|
||||
mysql? (
|
||||
dev-python/mysql-python
|
||||
>=dev-python/sqlalchemy-0.9.9[${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-1.0.10[${PYTHON_USEDEP}]
|
||||
)
|
||||
postgres? (
|
||||
dev-python/psycopg:2[${PYTHON_USEDEP}]
|
||||
>=dev-python/sqlalchemy-0.9.9[${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-1.0.10[${PYTHON_USEDEP}]
|
||||
)
|
||||
~dev-python/anyjson-0.3.3[${PYTHON_USEDEP}]
|
||||
~dev-python/eventlet-0.17.4[${PYTHON_USEDEP}]
|
||||
>=dev-python/pastedeploy-1.5.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/pastedeploy-1.5.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/routes-1.12.3[${PYTHON_USEDEP}]
|
||||
!~dev-python/routes-2.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/routes-2.1[$(python_gen_usedep 'python2_7')]
|
||||
<=dev-python/routes-2.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/webob-1.2.3[${PYTHON_USEDEP}]
|
||||
<=dev-python/webob-1.5.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/sqlalchemy-migrate-0.9.6[${PYTHON_USEDEP}]
|
||||
<=dev-python/sqlalchemy-migrate-0.10.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/httplib2-0.7.5[${PYTHON_USEDEP}]
|
||||
<=dev-python/httplib2-0.9.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/pycrypto-2.6[${PYTHON_USEDEP}]
|
||||
<=dev-python/pycrypto-2.6.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/iso8601-0.1.9[${PYTHON_USEDEP}]
|
||||
<=dev-python/iso8601-0.1.11[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-config-2.3.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-config-3.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-concurrency-2.3.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-concurrency-3.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-context-0.2.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-context-1.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-service-0.7.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-service-1.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-utils-2.0.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-utils-2.6.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-utils-3.2.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/stevedore-1.5.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/stevedore-1.10.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/futurist-0.1.2[${PYTHON_USEDEP}]
|
||||
<=dev-python/futurist-0.8.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/taskflow-1.16.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/taskflow-1.25.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/keystonemiddleware-2.0.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/keystonemiddleware-2.4.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/keystonemiddleware-4.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/WSME-0.7[${PYTHON_USEDEP}]
|
||||
<=dev-python/WSME-0.8.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/paste-2.0.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/jsonschema-2.0.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/jsonschema-2.5.0[${PYTHON_USEDEP}]
|
||||
<dev-python/jsonschema-3.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/python-keystoneclient-1.6.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/python-keystoneclient-1.8.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/python-keystoneclient-2.0.0-r9999[${PYTHON_USEDEP}]
|
||||
>=dev-python/pyopenssl-0.14[${PYTHON_USEDEP}]
|
||||
<=dev-python/pyopenssl-0.15.1-r9999[${PYTHON_USEDEP}]
|
||||
>=dev-python/six-1.9.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/six-1.10.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-db-2.4.1[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-db-4.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-i18n-1.5.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-i18n-3.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-log-1.8.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-log-2.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-messaging-1.16.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-1.17.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-1.17.1[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.6.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.6.1[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.7.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.8.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.8.1[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-2.9.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/oslo-messaging-3.1.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-messaging-3.0.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-middleware-2.8.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-middleware-3.3.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-policy-0.5.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-policy-1.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-serialization-1.4.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/oslo-serialization-2.1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/retrying-1.2.3[${PYTHON_USEDEP}]
|
||||
!~dev-python/retrying-1.3.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/retrying-1.3.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/osprofiler-0.3.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/osprofiler-0.3.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/glance_store-0.7.1[${PYTHON_USEDEP}]
|
||||
!~dev-python/glance_store-0.9.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/glance_store-0.9.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/semantic_version-2.3.1[${PYTHON_USEDEP}]
|
||||
<=dev-python/semantic_version-2.4.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/castellan-0.2.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/castellan-0.3.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/cryptography-1.0[${PYTHON_USEDEP}]
|
||||
<=dev-python/cryptography-1.1.2-r9999[${PYTHON_USEDEP}]
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/cve-2016-0757-stable-liberty.patch"
|
||||
)
|
||||
|
||||
pkg_setup() {
|
||||
enewgroup glance
|
||||
enewuser glance -1 -1 /var/lib/glance glance
|
||||
}
|
||||
|
||||
python_prepare_all() {
|
||||
sed -i '/xattr/d' test-requirements.txt || die
|
||||
sed -i '/pysendfile/d' test-requirements.txt || die
|
||||
sed -i '/^hacking/d' test-requirements.txt || die
|
||||
distutils-r1_python_prepare_all
|
||||
}
|
||||
|
||||
python_compile_all() {
|
||||
use doc && "${PYTHON}" setup.py build_sphinx
|
||||
}
|
||||
|
||||
python_test() {
|
||||
# https://bugs.launchpad.net/glance/+bug/1251105
|
||||
# https://bugs.launchpad.net/glance/+bug/1242501
|
||||
testr init
|
||||
testr run --parallel || die "failed testsuite under python2.7"
|
||||
}
|
||||
|
||||
python_install() {
|
||||
distutils-r1_python_install
|
||||
|
||||
for svc in api registry scrubber; do
|
||||
newinitd "${FILESDIR}/glance.initd" glance-${svc}
|
||||
done
|
||||
|
||||
diropts -m 0750 -o glance -g glance
|
||||
dodir /var/log/glance /var/lib/glance/images /var/lib/glance/scrubber
|
||||
keepdir /etc/glance
|
||||
keepdir /var/log/glance
|
||||
keepdir /var/lib/glance/images
|
||||
keepdir /var/lib/glance/scrubber
|
||||
|
||||
insinto /etc/glance
|
||||
insopts -m 0640 -o glance -g glance
|
||||
doins etc/*.ini
|
||||
doins etc/*.conf
|
||||
doins etc/*.sample
|
||||
}
|
||||
|
||||
python_install_all() {
|
||||
use doc && local HTML_DOCS=( doc/build/html/. )
|
||||
distutils-r1_python_install_all
|
||||
}
|
@ -1,16 +1,11 @@
|
||||
AUX monit.initd-5.0 524 SHA256 cd12c739c8d5b9dae2a229ca091e0c63db06cf2601b3991e17b5dee304d28631 SHA512 da5a1dca56d8ec9ddcf8e362e8c75cee8bb3ce67a785fa430e4cad91a897491f67247940866e578b721a3b89301f5a257f378f80f7fad24ba0165e09ed1da3af WHIRLPOOL 03203aee3bdd716d50a7de3c502004dac4d9a7682dd143f4201297abadb02589799c06c5e44d3cc1d974ddd7c8bc22a33015699afbade5063734ba73e8c10b57
|
||||
AUX monit.initd-5.0-r1 798 SHA256 c1c33c28b3fda5251717636960e5a60fa5d57b17d4b9011381759a94672f51e5 SHA512 80be0ab272243b4715493af566f314eecdcd63c8131759931718b40a21553b3e4876397df98eb7f6cebedc54b4e60deb1aad46a01df637df04bb1932c8c82cfc WHIRLPOOL e7123dd010881324c242569d99a315d0771c8f3f48080818b2b34d937ee74823ff97f479a8bae76e7d2cf410498830fe9bcbd79361bd179513180b95a01896dd
|
||||
AUX monit.initd-5.0-r1 804 SHA256 9d4807940500bd5a82dc63dd4cb0602a6f9d6c5326ab1f38d50b48522efa57f3 SHA512 080114e8392be4df3db3efd189687638451399a51de8b716dc02e415f1ae8eabc321ae44f4210be5baf018795754725cb913dab0e318a70fda4371bd9412d6eb WHIRLPOOL 3964b3e5522803e6b2d1a1a06ebb4cde708a8b5db540ca3a74b22dac18bb1ec518abfb787659cf5c8541d176522af2efdbc4badc745190f178bef7d8778e303c
|
||||
AUX monit.pamd 120 SHA256 02dabf0dd08f535538fcd307dc25cef22ccc60d16ada41e6b2d631c72150fb5c SHA512 75c5fbad1c04fc5c9c0de224df245d64f4e59e23f79f4037edcc94623795852900318747e8a71946cab406009834643e84e1cd40b27854951d5462e740712b5c WHIRLPOOL 677e654fc01dccdcb6541683efd37f2b0f17f24f1b79ea10a0882f23b605d15e9cd485e8a3fafa679555c6b21ad30c26f8eaf51f5c76309bc76512723f01b8e2
|
||||
AUX monit.service 226 SHA256 c7071a98916a1533c1ffb32dd7508bcd8f60a0458b83c7f1b672f65a7be00526 SHA512 3ca0499ebd21aee812b78883c144c0a346a8cb6106392544836bf76d594e96b7e77be4b32b8c3170273e8236b25000c268724148252d98a4b99131f8b0ce4e88 WHIRLPOOL 053218a34c71a55a8fa732c72cba17e4100158ef6e931c9d4ede5185e470c51dbb93e68c47db2371e7ab29be55082b31054fc40512cda411683e694d22a84436
|
||||
DIST monit-5.12.2.tar.gz 1192066 SHA256 8ab0296d1aa2351b1573481592d7b5e06de1edd49dff1b5552839605a450914c SHA512 086f9af2c6d155c5375e7de5641025707f34577d4f2a4a76d1a104361b5d5793a4f04313cafb5d6884a01aba59f1bbb405b37294ba133d9a93c05e484e5933ff WHIRLPOOL 3d25ab0dc3cfe0e2c881f35e48b64355fe12ce1d3357450d2b1d2aba7344acbe55c031e4fd6b49f7c523b674ff650cbad5bbc91853ec15dd10e64f164504ea70
|
||||
DIST monit-5.14.tar.gz 1200131 SHA256 d0424c3ee8ed43d670ba039184a972ac9f3ad6f45b0806ec17c23820996256c6 SHA512 6491434e15fab6f92e29b9f490418332a7700d110c0bd825d65e1aadd68ea082a1d9a7e2b570075b35d6cdb64ae207567bdeb2580e6e5407ba277cc6d1693c78 WHIRLPOOL 8e7ba198f6048d8de06082a269a9f7fa8fbbcd95e14174010bdf54935db53f840d00744e35f4260e9de5d8d9a6ea47aa7c4b037998b035775bbbe212057d75e7
|
||||
DIST monit-5.15.tar.gz 1218043 SHA256 deada8153dc7e8755f572bc4d790143a92c7a8668dccb563ae4dbd73af56697c SHA512 7e2b011a89d9b1dc990faf413a38f0c68aea398e25efd5392d6aa1baf50d68ea2db087ea2093c84658a99b7a83d133b23562d5ad11e1197db7a54a2b961177cd WHIRLPOOL e305705583c79b8d861595cae4d000b5832e3288f3d0ec59e69ac811e1f402af489e44c8fe568941781d97c953ff181a8048f0b3dfaeec14a26fd4bbc8cff697
|
||||
DIST monit-5.8.tar.gz 1237958 SHA256 0c00573ebc0156c534a5952f392c2a7bedde194f8261c05497322055938847f5 SHA512 61f2cb4a6b2da8617adfd16ace4d9b246957385109fee9a3312272ac271003cd89a12872ac3a07b0148ad7bdbe544e447745033d2a9fab19908ef19b7a106dda WHIRLPOOL 0eb1f5b778264d7881281f7139037fa07c225a5c7ece7cae2149460036a58c008e16a3d883e1876a2dc08f092900e05d164e37714ec5fc19960d4127e13c6eeb
|
||||
EBUILD monit-5.12.2.ebuild 1063 SHA256 afcd02483c902922d648ae58ee2602c8fd9fe6cbb4cf90275d952c4f039ab8d7 SHA512 0694c372bceeeb8cacf646edcc810def5a885a1feb411e35a6afac6733f65ff39d06c41884fc0269161586336167747d63e2dee125c6b936013626a687573944 WHIRLPOOL 8eea80b9079f0caade77bd6388e128aa6dd5dca0bef2eaae27ce6c63891b77a257da77a25b710a694d2064ef2b0283df7a656dde87a404349d73244280c52f30
|
||||
EBUILD monit-5.14.ebuild 1065 SHA256 ddff2a089f0478df7908674a57131326baf0a77a3e386937d25c55b37478d4d8 SHA512 5242abffe9cd9b20804e4440c779fd62799a86e665157d5e5e48f7a1c71dcb556037f58d79db9d7f1dde0ce43fe6867b5b41a95a1ed2d44ae1f544a89c11ce40 WHIRLPOOL d2526209e05af9a999b5be0836ad3654ad5a827558602d9980991f6e1bf6e2868d8dd4e8c5973a2a67c3d0545fd0cc0b18c963b0fa8ab176486a7d61d1a2021e
|
||||
DIST monit-5.16.tar.gz 1226329 SHA256 5b998e796113ce244c8b575da09d3a62bac1b2765484fe6416f224b4ba8f391f SHA512 09d3fa772c0749e0cb7fd057bcf9d057650601e09b746dd335ee040ba1f9f45693174aead065d50c7f43c2f5dc7f3cace252cf2c94ccdf767a14afdff57f808e WHIRLPOOL 9cbf7dd1f42ebb43f4e3ea1d5880f3229b147576d4ea4f856e38d1fffb20af539d31d52d7bdebcad9354a0ffd3c135760e585a673cb76e2b56f396e34d5dcfc9
|
||||
EBUILD monit-5.15-r1.ebuild 1131 SHA256 19929c2c3dc33d8f563fe1feca14f17245324ae6b6932056e752c15bad4a9748 SHA512 c42af05db4c00d8556e01f2f6b95a511f5f9ec9994acfec82bad89259e6f1de41e60fb8f82896ec7fc00256204b9c644934b9d6aebd6d3e076952d166d947a12 WHIRLPOOL 91259d122bca7d5dbd6f62b0441e7bab19ef1bafc0cb9f5751be179bbca461ff7a57799b41cd3b4965ecf6e96e17e3112a8a5bb8f3a6b68a938b44004eb40676
|
||||
EBUILD monit-5.15.ebuild 1065 SHA256 7e94d515d42bbabd32eaa05410f0d29a546a067517718d881c54872d45fd1ce1 SHA512 f18a32c558b93f10893bb5c5a2dc6c2a0516acaa9e27271882e6380159035affb1cdc8ed471f113d1e3515f47fa4c2b48072c50957d3b2f3c091852f9d8fcd75 WHIRLPOOL 1a1dbdf077f7e9fea7cd834758dcf71fed5824843feae73db829a57c6069ae5399cc31d1cc450eddb5306c503f7b6e7defbae556c621a9439a6678a845027e5b
|
||||
EBUILD monit-5.8.ebuild 1187 SHA256 98308bbb01d120113212c50b1da4e9acb51fe17a2f3a32ce9664cf578fa9c452 SHA512 db45a02c3c522ce86a538e881d6f74c301b9fff4b1ae8f74eac3d68cb8c8caf92691aadb888a3a62363c2b405b3815f95f5d3fdf2e8965895dff34ac48aaaaf9 WHIRLPOOL b7ad603563b5607398edcdb29ae6b4f806d11cb734ea1879ae36aab3fb500e49b451f0c1834012e628556fcf4e11d77d99dfa8ec230dfbfdfb31e4fcb708eb89
|
||||
MISC ChangeLog 3794 SHA256 07cdd7badf6394a9f3ad06ce2ac08da8cffee26e4660872f3c747fc9af194727 SHA512 9e949109bd6d8220f77b062aa393bc010eefff478014439e76cebc4c424b9cb9bb2222d044cb0f8266e4f629503f9cc6ab0304219dbc3ccf7a0b99a1fe762e0f WHIRLPOOL 6dfa474789dff97e099b4ea026b0d3e3d2bb6f99bc0a586749a9293bfb6d9fdf4beffd731eae209e632bbacf1df026fb8fa5b690fe632772a61bf6f1e8782b9d
|
||||
EBUILD monit-5.16.ebuild 1140 SHA256 1cf4fc54db28cb041f54c416eabccf753f8a7c632f0a9e6d88b4235de6858ced SHA512 b2e21dfbcc5a2afa095e0cebbb3f3bd6d4dc2893edd97d3a19004f9b49e5a62b6157851ea0c1b8afa0bc8923ee68bfa72dc88b806d52f8c0666bd2495a5aa1b7 WHIRLPOOL dafe4a846e8a28d23b2facde3a4bb3d20618680957e7e4045841e7cd3aaca03f5283012878fb56976f50df437d453314c3ea0a0031abf2648bf3de6526fa560d
|
||||
MISC ChangeLog 4326 SHA256 0f26b05e23abc0c725af11ac60011e8c929673908e991c23c665f8699e9f3e2f SHA512 25aab6ff226f69eaa148461f5aefcba764b2f815ad39c37434aa9a280e57162a8315ff0846a64a379861dfad6ae1a9e8f2442b9a8827f9725702bc8db326b462 WHIRLPOOL 78a2f97d6c903dc1bf1b00143bd24576d60774f44e90459cb68e3bf42c63a3ef4c51f8aad711f227b3feb8495ea583c9a7cc15b3f6d6298386970c485f61e237
|
||||
MISC ChangeLog-2015 13003 SHA256 39ea4bdb74b39b5ed02a9955bb31f5c0b9ba446899c4b34f8cb9fd7b8311de11 SHA512 8e7909dc91a1d19e67d11ad4739fce45105099d7d51fa96c9ec52628df21af5fe1e58ffeaf566036819aca32c89073147dbd3ad09eb9395694a5c001ecad3e44 WHIRLPOOL 053b5e858e4d2f1d08cba9cf298c43b8e8d56e0ecb82f351e5827f94f21f318feeb25ca755b0c02f7a4dd97f2e9e6ce963316db90387ee1f7986fd7d07bf4499
|
||||
MISC metadata.xml 275 SHA256 6b0d4319c37297822629bbf8f4a20097c86c8453fbeef458cd91cd10e2d0021e SHA512 1419507ecefa34dc331abc068e481d00ea0c6d9f90f767f281f679b00d4844d6a479c3969421c61583cf81d8e20da46745a9039d31a423fe416a33536737f40b WHIRLPOOL 51cdfebe45cbb4e5196a05bc0019816eb7d29ad06e94cf2c344b1ffc62d3b5ad040b56dd64492c1b67fddc198efd285df08ce4202e2ecc1a64a853139a565c2a
|
||||
|
@ -1,28 +0,0 @@
|
||||
#!/sbin/runscript
|
||||
# Copyright 1999-2011 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License, v2 or later
|
||||
# $Id$
|
||||
|
||||
extra_started_commands="reload"
|
||||
|
||||
depend() {
|
||||
use net
|
||||
}
|
||||
|
||||
start() {
|
||||
ebegin "Starting monit"
|
||||
start-stop-daemon --start --quiet --exec /usr/bin/monit >/dev/null 2>&1
|
||||
eend $?
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin "Stopping monit"
|
||||
start-stop-daemon --stop --quiet --exec /usr/bin/monit
|
||||
eend $?
|
||||
}
|
||||
|
||||
reload() {
|
||||
ebegin "Reloading monit"
|
||||
/usr/bin/monit -c /etc/monitrc reload >/dev/null 2>&1
|
||||
eend $?
|
||||
}
|
@ -1,39 +1,41 @@
|
||||
#!/sbin/runscript
|
||||
# Copyright 1999-2011 Gentoo Foundation
|
||||
# Copyright 1999-2016 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License, v2 or later
|
||||
# $Id$
|
||||
|
||||
extra_commands="configtest"
|
||||
extra_started_commands="reload"
|
||||
|
||||
command="/usr/bin/monit"
|
||||
|
||||
depend() {
|
||||
use net
|
||||
}
|
||||
|
||||
configtest() {
|
||||
/usr/bin/monit -t 1>/dev/null 2>&1
|
||||
${command} -t 1>/dev/null 2>&1
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
eerror "${SVCNAME} has detected an error in your setup:"
|
||||
/usr/bin/monit -t
|
||||
${command} -t
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
start() {
|
||||
ebegin "Starting monit"
|
||||
start-stop-daemon --start --quiet --exec /usr/bin/monit >/dev/null 2>&1
|
||||
start-stop-daemon --start --quiet --exec ${command} >/dev/null 2>&1
|
||||
eend $?
|
||||
}
|
||||
|
||||
stop() {
|
||||
ebegin "Stopping monit"
|
||||
start-stop-daemon --stop --quiet --exec /usr/bin/monit
|
||||
start-stop-daemon --stop --quiet --exec ${command}
|
||||
eend $?
|
||||
}
|
||||
|
||||
reload() {
|
||||
ebegin "Reloading monit"
|
||||
/usr/bin/monit -c /etc/monitrc reload >/dev/null 2>&1
|
||||
${command} -c /etc/monitrc reload >/dev/null 2>&1
|
||||
eend $?
|
||||
}
|
||||
|
@ -1,47 +0,0 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI="5"
|
||||
inherit pam systemd
|
||||
|
||||
DESCRIPTION="a utility for monitoring and managing daemons or similar programs running on a Unix system"
|
||||
HOMEPAGE="http://mmonit.com/monit/"
|
||||
SRC_URI="http://mmonit.com/monit/dist/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ppc ~ppc64 x86 ~amd64-linux"
|
||||
IUSE="pam ssl"
|
||||
|
||||
RDEPEND="ssl? ( dev-libs/openssl )"
|
||||
DEPEND="${RDEPEND}
|
||||
sys-devel/flex
|
||||
sys-devel/bison
|
||||
pam? ( virtual/pam )"
|
||||
|
||||
src_prepare() {
|
||||
sed -i -e '/^INSTALL_PROG/s/-s//' Makefile.in || die "sed failed in Makefile.in"
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
econf $(use_with ssl) $(use_with pam)
|
||||
}
|
||||
|
||||
src_install() {
|
||||
default
|
||||
|
||||
dodoc README*
|
||||
dohtml -r doc/*
|
||||
|
||||
insinto /etc; insopts -m600; doins monitrc
|
||||
newinitd "${FILESDIR}"/monit.initd-5.0-r1 monit
|
||||
systemd_dounit "${FILESDIR}"/${PN}.service
|
||||
|
||||
use pam && newpamd "${FILESDIR}"/${PN}.pamd ${PN}
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Sample configurations are available at:"
|
||||
elog "http://mmonit.com/monit/documentation/"
|
||||
}
|
@ -1,26 +1,32 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Copyright 1999-2016 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI="5"
|
||||
EAPI=6
|
||||
inherit pam systemd
|
||||
|
||||
DESCRIPTION="a utility for monitoring and managing daemons or similar programs running on a Unix system"
|
||||
HOMEPAGE="http://mmonit.com/monit/"
|
||||
SRC_URI="http://mmonit.com/monit/dist/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-3"
|
||||
LICENSE="AGPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~ppc ~ppc64 ~x86 ~amd64-linux"
|
||||
IUSE="pam ssl"
|
||||
IUSE="libressl pam ssl"
|
||||
|
||||
RDEPEND="ssl? ( dev-libs/openssl )"
|
||||
RDEPEND="
|
||||
ssl? (
|
||||
!libressl? ( dev-libs/openssl:0= )
|
||||
libressl? ( dev-libs/libressl )
|
||||
)"
|
||||
DEPEND="${RDEPEND}
|
||||
sys-devel/flex
|
||||
sys-devel/bison
|
||||
pam? ( virtual/pam )"
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
sed -i -e '/^INSTALL_PROG/s/-s//' Makefile.in || die "sed failed in Makefile.in"
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI="2"
|
||||
inherit systemd
|
||||
|
||||
DESCRIPTION="a utility for monitoring and managing daemons or similar programs running on a Unix system"
|
||||
HOMEPAGE="http://mmonit.com/monit/"
|
||||
SRC_URI="http://mmonit.com/monit/dist/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ppc ~ppc64 x86 ~amd64-linux"
|
||||
IUSE="pam ssl"
|
||||
|
||||
RDEPEND="ssl? ( dev-libs/openssl )"
|
||||
DEPEND="${RDEPEND}
|
||||
sys-devel/flex
|
||||
sys-devel/bison
|
||||
pam? ( virtual/pam )"
|
||||
|
||||
src_prepare() {
|
||||
sed -i -e '/^INSTALL_PROG/s/-s//' Makefile.in || die "sed failed in Makefile.in"
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
econf $(use_with ssl) $(use_with pam) || die "econf failed"
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
emake || die "emake failed"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
make DESTDIR="${D}" install || die "make install failed"
|
||||
|
||||
dodoc README*
|
||||
dohtml -r doc/*
|
||||
|
||||
insinto /etc; insopts -m600; doins monitrc || die "doins monitrc failed"
|
||||
newinitd "${FILESDIR}"/monit.initd-5.0-r1 monit || die "newinitd failed"
|
||||
systemd_dounit "${FILESDIR}"/${PN}.service || die
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Sample configurations are available at:"
|
||||
elog "http://mmonit.com/monit/documentation/"
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
# ChangeLog for app-benchmarks/stress-ng
|
||||
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
|
||||
# (auto-generated from git log)
|
||||
|
||||
*stress-ng-0.05.12 (04 Feb 2016)
|
||||
|
||||
04 Feb 2016; Ian Delaney <idella4@gentoo.org> +metadata.xml,
|
||||
+stress-ng-0.05.12.ebuild:
|
||||
new ebuild sourced form the maintiane-wanted list
|
||||
|
||||
proxy maintainer is Brendan Horan, sourced fron the gentoo bug
|
||||
Fixes the bug
|
||||
|
||||
Gentoo bug: #556620
|
||||
|
||||
Package-Manager: portage-2.2.26
|
||||
|
@ -1,3 +1,4 @@
|
||||
DIST stress-ng-0.05.12.tar.gz 280758 SHA256 081a597bc3b6b7f2993828a04048e5321a81ece6995c7bb9b202dd65e7fb055f SHA512 ee622b1d8fd1b3ddee6119f5a43cedb427e3524bb6ef10f7ac96c305567c9919574e9103949825e2bea3391c302b6e2b5871667bc8f8609844765b64ec760bc8 WHIRLPOOL b9f84501fcbe6494881947a44bbb42ba6fb00120ab6e7fc45ac6b5ece76f7dd95a98a588db9326f0e1bd879020a8ffdcc604dfc5a70f2858924bf85a8a4612c0
|
||||
EBUILD stress-ng-0.05.12.ebuild 425 SHA256 5d63c0f87cba0726c1b0fb4d148188104f5e44017a92c83289ede97d86d2fcb4 SHA512 da6d84b9496af09f282f6d24b72b1bd791de619b8208410701a653a6756f6fc8248e0f9aa08df12cf34ad6420687d65bea891b367b529c9eacc0a8bd2568781c WHIRLPOOL 93fee02cf677031084d66b45f8084943f3c91641dcfe572d0a661f08e3ed582990acb2fc9f299f4faf1625a18eecdb207a6900a8d7a53897f63b82b87e0fa851
|
||||
MISC ChangeLog 463 SHA256 a6d9345229cbf079adec9897ae90c5e8685d2cbc3e9f84f728150c0f753e0cec SHA512 fea9c67c7b5fb2b4a919c76135ed23f757814762d2c3401fac2d8d35ed525ee94ee7c39d8c1c03c6017c7ec3b4528c64866574a9e6bbe2bd8c988e023f6f671e WHIRLPOOL 45a04def57f6c791a195cffd661523cd642bdfcd8c4739c14901da933a788be38fae09a3f9f70d03ca313625a7477d7eb16ab197e8e1dda67478790f19c191d9
|
||||
MISC metadata.xml 430 SHA256 fb96586ec004fcaa17e18cb473ee5d3941a8d7b4a6c306515851f890c754440c SHA512 e25f398d6820b7186bdd2ecdbc0462c5b4f005f3ef3eeb4ca96c9b27c02cb9e852d33a814a850b6b2137258dbce8ba014ba9faba5d1da18133e9ae54b5873470 WHIRLPOOL fc40a4d9476b5cca9a7ac27e93663c9ad13a595b0d32e89dff72dcd9c69c30c31dfe839770dc6fd46efb0f42135414d43f4e5b8ceb2a17aeaf4f5862d58edc74
|
||||
|
@ -1,6 +1,6 @@
|
||||
DIST conf-update-1.0.3.tar.bz2 18296 SHA256 5b8479447904e809338375c7d586803a3e8f8d6150cfc33da2c83763119a9a54 SHA512 7f20a4974f804d73729105d9abc0f3205a7574c6e2c6dbf020404f3161500b5ecc60d141e0833e9ae0f43a814591a74cd885a5033f50864bbcfb36ba452175b7 WHIRLPOOL e078895290de9cc116847a48c6fd6d190bc9a3700001de6d31a5728a7eefd2bc41bb34b67a3922ef10730f4668415a0b519861152ba4e54fe0150ec01232d578
|
||||
EBUILD conf-update-1.0.3-r1.ebuild 894 SHA256 e04f838b928ccffb27015641afbfc526c22fcf4d6a8bbef3df92e7d26f289dbf SHA512 df096e1a63b20cc72a9a5bc85e83ce04bc32006a0ceda4eef5bfdde207d574bed58a527e80fa32ace39ef97864a9d31a6cc30d8530f7d44cb48fce24adb52471 WHIRLPOOL a7e7237c456696b9915b9ad490e36a1be321a3766af08fc0218ec5da82dfff2042e12fcc76c758b197804aa91f09cf219e3a421468ef35d130069dae2aa68497
|
||||
EBUILD conf-update-1.0.3.ebuild 835 SHA256 d88d233a84219de93e5ef7212e8454a622d97091dc08016ec32f5d563122cef4 SHA512 86d96625bea1411f88305be4f87608ab4a00f7173c0a56198d8055a3bd504ded9289e73d4d50e13f4cd5ab8979ab5d1e86f99b2c45f17dcee73626d82dfea554 WHIRLPOOL 79bf562cc377da95ebae91cbf2ddccaf52fcee2f08b428adbb71ff3b0bc573031c0c034f0ec789ffa55c45494333412873eec9243d96cb603763f535296d4924
|
||||
MISC ChangeLog 3505 SHA256 8ba901d7aa3b1e24abd6711fe11e2a67c96c26faf2d429c40455a3acdbdbf6cb SHA512 ad12828f477bdfe470d71a7f82a5946d252afd67b255a7649660f75a202829e24ac90917b324319c61c7ce2d4b95934102d7e86a4dc5390c60207b52c6f5073b WHIRLPOOL 0856473ac75aa1aa3c059b284b13f81c5f425a7674d4b301d996c0cfd3223e7914f6c08ced503195a4997fe478ef2c37b062b9bed9cc5c78d470297e870671a1
|
||||
MISC ChangeLog 3732 SHA256 68f6ddaffbfa2f5fdd2a422281d9f91e1b7a48c29d0b5319364e16cc10394b72 SHA512 5c7282a4a1d0521e66e7466f6229fd0c7dc1338e0cc19450af91e68c7cf8905180e60207ddd59040ff7cd2bb3cf3ba85d43f7732b4802a0c70a42f6b4968d075 WHIRLPOOL fbb2d6a7b06741ff333568c27a18071fcacf9d62695f76d514cd6ff17db76055e1d53d735ea274d1c91bde5252fa80e115478b56419753b16777dd5a15d77a82
|
||||
MISC ChangeLog-2015 5364 SHA256 dec9e79d578a9bda3b5dc99738b64eb59afa8d55cd27e131c1cd14d5123871e2 SHA512 fa58e771bae988cd91afedc083d4bdc3424649cc8b0750ab48a7f26111aa3427533980a11f3a4f1307b5252bd376794054e59496a639aa1140bebc3064599b6a WHIRLPOOL d0d1a520192851d6ed9304798860af425925a719079b348230465ce9618252ad27e470980b713a369514e7fb64baf88751e546ee22a77d2fa0dd7350d35ea3e5
|
||||
MISC metadata.xml 719 SHA256 6f46bd9e78ba0b25fd4e20f27fafcb5ec17c8289334746e5da52739aa8778f2b SHA512 8ec8e0a07735d9ec4f7ebb99bb6e645bf01dbe2ae9c899939198983961fcbd77aa3ce41d987a23fc2ded878e19ee2ee4636e5165bdc7667b45722eeb1096b647 WHIRLPOOL 92a087d2e5663086e25e7c158580bb8231060aad07014d0fe0ec3106d7ae9a37149753509121b5337c09e0f985e949f3e2e9a7929587665f55755fb80c56b7cf
|
||||
|
@ -1,8 +1,10 @@
|
||||
DIST godep-50.tar.gz 70100 SHA256 e474e663e9d696445129201e3d3598a724de9a673ce3ad6652af75a93da2aeed SHA512 b3c114885d7de362c8a3fa3a65f609f37c8610eeb3d9807628f70d49b5b813770a5445c4048bd749df635d9526e5136abcbd2c1d4bd415fd97e86d6599b98438 WHIRLPOOL d4b4e0e2dc3f9ecfd2a1f25cdb56b156b601fc5393527695655769ccb29fa2a45a104b09f95a182df7587e61a5311c1966e5f73ed9bab5cfb891a46fddf35c08
|
||||
DIST godep-51.tar.gz 70357 SHA256 7829d6ed805df5ab3b35d74685e2d471869b66cf4e4e408dabf098d2bfaafebe SHA512 0d2500b19ec804c626b16407df3a925d7307b667a90475e0aad26b2b511e1d24e333bc03341aa62879d6538b48d5a12173341bbe1fcd6fbe1116909d21c4f3d5 WHIRLPOOL 5e0a7db6431a15b2c31e405748f2feb86bd169677bd8710dc1f1a35b19fa807719433d0201283e470bdec49dc3c44e4c11b585f623a27b1f965d10ff38110073
|
||||
DIST godep-52.tar.gz 70407 SHA256 37a526b6af329b05f81ec92b72488b2a4cdc8457aa9ac5643ca20c28844e277d SHA512 76f473a2eb26f480f0d3e61bdc3fffc6eebb968203ac89613519482bd29433a2ef7c25342cba0b6ad424c070b672e89d1731e1529741312ca8c9f5bfe30ca1cd WHIRLPOOL c6dac3af106d99549c22130f0b47fd108938405a135338e1c1c4d883015020f5abc085c7c5ad9d1615be8f866b2b35a2d06eb35db16cebc81ca4b1827ef423a1
|
||||
EBUILD godep-50.ebuild 563 SHA256 9b68ec6c46008470803ef6b86dcde558fdb8df3c3e0ae73bf81897f3f83a460a SHA512 e303f7b2cd19ba6fa34b583314131fabf119c44c87c6294f2970468621f93c3c850c25e62126acb79e5ba1e69de70c1da869b004f0cb713f280029876ac86ccc WHIRLPOOL 4066d579107c1706b7b4d82888ff8cc62809b53d0f11684514d7253b8d4abab68306eba495b09892dbd3924d5f2bc5a3856916782f119c82581cb5eae35745c4
|
||||
EBUILD godep-51.ebuild 563 SHA256 9b68ec6c46008470803ef6b86dcde558fdb8df3c3e0ae73bf81897f3f83a460a SHA512 e303f7b2cd19ba6fa34b583314131fabf119c44c87c6294f2970468621f93c3c850c25e62126acb79e5ba1e69de70c1da869b004f0cb713f280029876ac86ccc WHIRLPOOL 4066d579107c1706b7b4d82888ff8cc62809b53d0f11684514d7253b8d4abab68306eba495b09892dbd3924d5f2bc5a3856916782f119c82581cb5eae35745c4
|
||||
EBUILD godep-52.ebuild 563 SHA256 9b68ec6c46008470803ef6b86dcde558fdb8df3c3e0ae73bf81897f3f83a460a SHA512 e303f7b2cd19ba6fa34b583314131fabf119c44c87c6294f2970468621f93c3c850c25e62126acb79e5ba1e69de70c1da869b004f0cb713f280029876ac86ccc WHIRLPOOL 4066d579107c1706b7b4d82888ff8cc62809b53d0f11684514d7253b8d4abab68306eba495b09892dbd3924d5f2bc5a3856916782f119c82581cb5eae35745c4
|
||||
EBUILD godep-9999.ebuild 563 SHA256 9b68ec6c46008470803ef6b86dcde558fdb8df3c3e0ae73bf81897f3f83a460a SHA512 e303f7b2cd19ba6fa34b583314131fabf119c44c87c6294f2970468621f93c3c850c25e62126acb79e5ba1e69de70c1da869b004f0cb713f280029876ac86ccc WHIRLPOOL 4066d579107c1706b7b4d82888ff8cc62809b53d0f11684514d7253b8d4abab68306eba495b09892dbd3924d5f2bc5a3856916782f119c82581cb5eae35745c4
|
||||
MISC ChangeLog 3287 SHA256 f1f90e95984215dc7a6531e8f816460a1b1edd5673259113af90133cf6d5ab11 SHA512 5c017b8ba2b7e7a68233bf4c8a229c910b4cbb5a7e5fced46ba7e76e0bf012473ca424aae12917947b519861d2e349ee4d322a7594826a37e30847b0e4eaca24 WHIRLPOOL 6323b22e2d169b25dd17e07e5b6d84d96cee31e751ce5b73aa7d73b20b7e3168249087fcb6954a18b9577b65d046668d1efa80daad89cfc46a4295971385b50b
|
||||
MISC ChangeLog 3397 SHA256 63da19531a38d925c9a9f4a1c023ea182c35083fba9cfee983541bbf2873c980 SHA512 bdf9a5ef126a41b0dc121552a4d6033b04110332b767cb77ce36e96b8aa07c0721ff4c4bb9fa7be941c9d15ba57b6a8f165d84b274a62f499f9105615e4d1b31 WHIRLPOOL 9a4b42064cc6a4f01d6ac96180a9b76fb8bb561774c18e0c5740aa48ca3bdf9bae91b09fbe557bfbe7b65ad168b9e958a0658b674fc77733f21de919ba737f86
|
||||
MISC ChangeLog-2015 699 SHA256 716776a06be15bc13064bcb2bf58a78255e9e2ed01609340e1959dbd7e41f834 SHA512 d642d5ed4538a7317c0afe4f51a6557499982592fbd83cbacf0dc940e2c15d272bcf88daf44228e9bb850ca3aba08a536f63952838a8f845653d452507722995 WHIRLPOOL cfd1b43d540f322d225b29243fbcaddaa91c2f667ce1e09d80f3d4e15420ef82e22b6977b93ab97fe32583eb8bf565d1375279b8c330153fa5a9677e36515d02
|
||||
MISC metadata.xml 302 SHA256 d11104ed147db00460aa8ce15f0812902739fe8019bc30f09cda304e947097be SHA512 e30920abb10249687e6eaf2327e3a32d70f351558d0d8d7f0844b74c32601f90312ef56d1c471653f43132884ac1ef5092838b41cd09a2137912220ba75b930d WHIRLPOOL 2fd5d1d3a39ad61af52cd305179a651971a72ae31ee937d858e5bec8e5d2e1a2ebdc8ba0e94777fc0738277573a078bac22d3549e7e35222faba7522134485d2
|
||||
|
@ -0,0 +1,29 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI=5
|
||||
EGO_PN=github.com/tools/godep
|
||||
|
||||
if [[ ${PV} = *9999* ]]; then
|
||||
inherit golang-vcs
|
||||
else
|
||||
KEYWORDS="~amd64"
|
||||
EGIT_COMMIT=v${PV}
|
||||
SRC_URI="https://${EGO_PN}/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
|
||||
inherit golang-vcs-snapshot
|
||||
fi
|
||||
inherit golang-build
|
||||
|
||||
DESCRIPTION="dependency tool for go"
|
||||
HOMEPAGE="https://github.com/tools/godep"
|
||||
LICENSE="BSD"
|
||||
SLOT="0"
|
||||
IUSE=""
|
||||
DEPEND=""
|
||||
RDEPEND=""
|
||||
|
||||
src_install() {
|
||||
dobin godep
|
||||
dodoc src/${EGO_PN}/*.md
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
DIST typesafe-config-1.2.1.zip 287878 SHA256 b3d26a8959bc18b02f78d9ac94e691db7ca103020a700f4a1c9cbe45b254f44b SHA512 178f0df81f081b9355951debd3a5435c7d6aae25893f049917a25861015eba18a305d5370d914b89a7c46e55b5d9f3939ddd0656cfa9a4691bd16cf32c796502 WHIRLPOOL 591e2d61a477b681b842ef45166b1ecab6545d0002c78d3c13c57c0c6bb2a3ae5903cc0d095e2237aae3c284f7d71f2dbed7ca1889dc89a837a38cde06f5a039
|
||||
DIST typesafe-config-1.3.0.zip 363061 SHA256 b3af059bd13e597c5de466595f620cb686d21cfb7abd5bae1fec82d16be42999 SHA512 8b9821de442dc24b8b7be4c5ebc91d57214a32dceda8dc160cfaf801f70b34d2a2df6f8b2cbb744d18be3fbc887f1666f431b52882edcbde408d8adf3681fec4 WHIRLPOOL b2a61f17a269e1d8a533e6235ecdfd2968f452499e4adba61f17b667fe5aa2c07556587f9104d60e990fa268a3220b811f5860f6dd08c2ecd4cb5868833ac1e2
|
||||
DIST v1.3.0.zip 363061 SHA256 b3af059bd13e597c5de466595f620cb686d21cfb7abd5bae1fec82d16be42999 SHA512 8b9821de442dc24b8b7be4c5ebc91d57214a32dceda8dc160cfaf801f70b34d2a2df6f8b2cbb744d18be3fbc887f1666f431b52882edcbde408d8adf3681fec4 WHIRLPOOL b2a61f17a269e1d8a533e6235ecdfd2968f452499e4adba61f17b667fe5aa2c07556587f9104d60e990fa268a3220b811f5860f6dd08c2ecd4cb5868833ac1e2
|
||||
EBUILD typesafe-config-1.3.0-r1.ebuild 548 SHA256 e2a94c6791468ec7863318f12d20dddfcc26187e9470c206b4780d3b430792e2 SHA512 92fc05a1efb0b6efcb8e2eb7b4bbb757a812c486e07bdeeb6d5cd53a64304539f38858c640933540c7d1d4d41ff4e5ea526bc06747287fae4879381853cf9c8e WHIRLPOOL e77157d9532df56acb17de191520eff67819948c4263863128614035deaa275890e22ca319d2690cdeefa1462a912642cd79415cffabf04ebe6f9f0d1916b776
|
||||
EBUILD typesafe-config-1.3.0-r2.ebuild 713 SHA256 81b5d32663d5e7011e7a106b67bcd30826a4feba78031d64dddab09a894ec12c SHA512 5db1f08fa2f3a3d6d96adfadef637840b7d557942138e217ef7073ee5df28d4e556dc9f2266e749dbe2b170a5151dee4663b66f244431f6b58bb6536b59328d5 WHIRLPOOL 2de2a12f8e4b3550ef13cfff6e347d24d7f9eb31bcc30d83871d980881e5c4ce720872daeba702bd24871cdd22bbdcf0179b08c33ad059bcd4015e44afd53b61
|
||||
MISC ChangeLog 2170 SHA256 e461b09d76c891f691cdd075883a05673ad19b505e1e6457b33f8601f9df9e8c SHA512 93def0e27417b8a657ea4c756008e19866dcf319d673cecd95755e472bc06d631dc5f142e5ced478b1430537ea28ee1d79188b8f34da49a4b64c01e6118a3079 WHIRLPOOL c98bf62a0744cd1b2d402ae7ebfecbf9686fc1312f1a37345354c4d48b1f3853d04d149b07ae9954437f2bb3d7e092cf2fcf80f979e4767f19e4b8f08c6dbe3d
|
||||
EBUILD typesafe-config-1.2.1.ebuild 520 SHA256 566a02402a03fca25defa8723f6078c09ed10e38d1e35663b1f73e1f00211d6b SHA512 3631ada20d30a9785f08c17ddc3908bf7a8967b5e57ed7a875dec1892fa71bbf54ee1fdca3bdd37b183f01aefb7f9abd5a2e9b0bbda69b2b50a7514fad7606bd WHIRLPOOL 9d6e2644a4cd532e807e259ce7029018cb1bf77a47fa2f0cc944aee432b94cc358a6c81a0aee6e2d5089ca960ca6596bd6ead8865eb3d480d2daa2d7aac871c3
|
||||
EBUILD typesafe-config-1.3.0-r2.ebuild 516 SHA256 6d76fd11727d067aa58b54276eae163c91b71280521c3868bf41a60590037c4f SHA512 4b58168bf183395f239786849e7aac259c5c5297c52441ca35899622d5945dddcbf4ab3e6edebf01baedb59ab9d2557e64e3e9433b851342c4a173a3336ffa40 WHIRLPOOL 273df8f58c8c37272b9e329159e067effc5a46d8bb47c744387c604db2a353c5afca1d6ce9460f07773ae3dfd8c5fed8c1860e6ac3f83a453855cffeb12d821c
|
||||
MISC ChangeLog 2891 SHA256 bc57026de33522d9cf5d67f2d7ab5b43a5fa765fbb0a8f390267c9d9bd6e7941 SHA512 517a6f13849a44b9d52eed2f400fe50b09311f0726cd5859e392e7384f3c779fa97846dc2c33f4be6f77b4b08cb6ace13220e4b75563d4f3da17e1d00ddacc58 WHIRLPOOL 487a18158fb72a17479619b40177044f27fa732e6e0b37f7916f0f605f8f181520ed32f1e2d9b710d4f5cb20fa7327214df37aea24dae5c11bf9e34a0263a8fd
|
||||
MISC metadata.xml 329 SHA256 4325fe83a18fef1293a786c8f3d4bbd549f110c64a4a4c88b49ca3cbc31dd9ae SHA512 3cd9eea5ad8ba9ff81a44829541064af00336c217a17cfdd95dc0384211de25884054d2b45af68f333655c5dd469fc44f27245a74d0d0aa136941b017fc8bc5a WHIRLPOOL bdecf59206e882fb895d28f75d2b641709e3422bde81e48d334bb8c996a567bc8ba155f5e1e71f62bdf8d3baa21e69af2306e7ff23ecc02965390646e7ec619b
|
||||
|
@ -1,5 +1,5 @@
|
||||
DIST go1.4.3.src.tar.gz 10875170 SHA256 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959 SHA512 12bade4bce9aa4b34e2b9495ae65a1fc6a2449b3a43bc4de85c8b87ba223c2f999b2f37c1e2fe1188d8521118b5e5357d27afb8b85c0b8ebb4503d4125d25273 WHIRLPOOL 1a869385e63343bc54a950ca965a4d11ca072e6551d1189ef4e2e4da2a488a1ef70b59296d65af0c061f63606b78f73399f25040e02132e56a00189f1aae20e3
|
||||
EBUILD go-bootstrap-1.4.3.ebuild 2080 SHA256 3eaca8b2e84c6e55f818e1e9ea7aaefd0324586165d37be4fa15c0aa7382a6c4 SHA512 c6a977f2d4697bdc2c0fd5f0c09129689c711e320104830db70f303962e8fed843a4023402e08112b5d5d4f01dbca4e082932d3a772f9a3f8c6a9bf7e5ec88b9 WHIRLPOOL 82c48d4eaeeb9999c92ffb0cadf12b5dda31e362d443e0715ae1250c79fa8396fe1e29ad4c00a83e4b3f8d4f7041f84e5d2898e5a9b24a3722cac1b553ce3c9f
|
||||
MISC ChangeLog 3453 SHA256 53b06ed6ba66556d4e356757b73380e491efa1a191a065ffb1f48bd78041a4ec SHA512 05e69e8b90dd667a1f5f722e4652ba89f2ed4eee47bd2f70609811ce8a85c998b81f5a186d13c2c28de189dad9432ba08e050c2d99ee65c4b487c05687465f23 WHIRLPOOL c39b980fbf80cb9fc0661a577624beda7a65ab4b402c914c0c37aa8bf8da199c6ecd61a78f8894ae55778fb2e6ea405db0a9eb496889a28c0f2a15ba790d86cb
|
||||
EBUILD go-bootstrap-1.4.3.ebuild 2079 SHA256 364627eb61fbdc2189cee3caa7ac2528b692e50cbf6982d509cd85bfa94c75bf SHA512 3fd9ef23e6c92c88a3478374af0004f04f5110f3c41472834e404057c6d8e7d59ea23c6042fbca4b282bb17ee094d3728768c71843e7c434a9c287406989c531 WHIRLPOOL 9a0319135059d10f6292a8ce0cd8db42156560dfdccd2e39cba2a8de11d78f818a5a218962f58bf0f216e5b1531c46f4b4d4f37dd3032598eb51e544a11deee4
|
||||
MISC ChangeLog 3569 SHA256 64b483fe6fdc4b29e62d52a647125d3bfd1fdc9df1b44063a0f4331541fb44ed SHA512 9389cc3d9fc2de55f87dbab18cc151ff90c6d18449d5bacd0b30fb5de1d6dbec5334a8a190abd50d444bc8a07f3065985c5c6079b6be6225e91a2d3a075b4e46 WHIRLPOOL 13c01b29476e93a310700a7e5937c9e54804a4030b06012ff15c39050cf9314262796dfdd82d4aa5b6b4e3b382ffd9c148128419d0d861efb39caba196b76e78
|
||||
MISC ChangeLog-2015 787 SHA256 f2aa7669465624713b21d95d3853ed405d1e943f70d736594fa740362b9c7c8c SHA512 c74ddc5667a31d45c668c4bb277459a66cbd49ba150f9ce5ae05648903697ed571af23ad9e7766d0ab828562655fb1ccd5bf4d8f476ce7e81e5e21b6faedda1d WHIRLPOOL 80b26195a1e8ac29742930395106b5462f9c01494eddc71ee6439d2c52bb3be0549e286773f1e38a9efca0c36e4a769b5b0200bad9e942149e125bc586907c91
|
||||
MISC metadata.xml 484 SHA256 2dabca0b12a2dee3c21ede478e85d38ac9df76be3481ce201ecb10099bae8d71 SHA512 b99e31a068d9e9def8fdee4b396fcb645e2341b0809d1748d103aa42bc4b15844dc0a0235b5156c88b05436be12a6a396894cbd8376c084af815fd45b3468eae WHIRLPOOL e63640ef0f85243a2a307cafc931215ef08ed753601a8b3e259b0978f2b00ddc16582feaf482d6243edb8cc630fe23757a79dbfd3f9046827586f81d4e2b6c6c
|
||||
|
@ -1,7 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM 'http://www.gentoo.org/dtd/metadata.dtd'>
|
||||
<pkgmetadata>
|
||||
<upstream>
|
||||
<remote-id type="github">google/protobuf</remote-id>
|
||||
</upstream>
|
||||
<maintainer type='person'>
|
||||
<email>vapier@gentoo.org</email>
|
||||
</maintainer>
|
||||
<upstream>
|
||||
<remote-id type='github'>google/protobuf</remote-id>
|
||||
</upstream>
|
||||
</pkgmetadata>
|
||||
|
@ -1,5 +1,5 @@
|
||||
DIST camlp4-4.02.1_p3.tar.gz 646389 SHA256 c28058b20016dac51d492b1a98e6453d2c7097100542c99a0593cc240a3eeada SHA512 59d196be0bb7410ffd48a3d2debff4502ca58e7b032027b27b9d126381c02336f177a47585a7d7a3142049930c21dbe075068852e6369fe7e8a58e3339d96041 WHIRLPOOL bedcbaa86a1282bed6d51a64b1877575e727cbf2485abf38bcbed49b18cbad9e8548e0fb413daf216f3d78fde2710c95de49a5055cbb3548eb284515148a3e7d
|
||||
EBUILD camlp4-4.02.1_p3.ebuild 981 SHA256 5a165385f737a5b678473d3f991ac3a82fda4da69a21cd7295660cba12b9bc18 SHA512 c3357e2d1fcfd3f417fe3e5eac69157ce7eceeb5e60a39b41fc33211ef4a2d0cc5fc2fdb10f8260f50a8e09eee577c19241aa21e1239486ed9db088840890aed WHIRLPOOL 76ece4672c0fa856b2ffc37ae7ea6dd5ef7aaca6f91b6e7740a5385bcafcd9933123dff0d297edf6127ff7a8595232fd3ecf633e979d693829fbaa4c9d1f0d8f
|
||||
MISC ChangeLog 3513 SHA256 86ff44f6ae686de2764c6ff25783c217ba958b8c70090204ae42738d8c08d05c SHA512 a70cb52876286a07c953772d7b7a66683fb087597768fe76bfeaed359e8c09d787c81114a6d17def3204eb64086f578bf7d7d35c1e5fe0f8f4f2f6a55c7f356f WHIRLPOOL f3ca3ed53448dd3567466ec96899f5f75a163cebed9cf83a6cae98b161e1d282810fe0c8639aa7252305c91fc4b63e57f3ff9b57601a93c8870a9115db93670c
|
||||
EBUILD camlp4-4.02.1_p3.ebuild 980 SHA256 ca5eef2405632a54f653987e8e18d2c93173113143ccb500f6561d38e163b93f SHA512 5f4e9c46661422c3b0635866a7f7d42601fb7bd3451666fcdbe8f5ec36c3920bfa92ba12a7871c6fb9934cd829f35bc73aadbf78e12df524d471de1b31f61882 WHIRLPOOL 1194ed609c30a7e6590c8c5a26e75b1798c7b80e09f0aac5b649394648f4b67a9748225e7eac418c3f94e78b7ce28b610cc975b836b3748ce99aa40fb8ba41a1
|
||||
MISC ChangeLog 3670 SHA256 031022a2ca36640b19b563b4c3a3bc36742888f69c820b7220aa151f04d37c7d SHA512 d50b46c0716e1e8d0a8686a5530e39edb86a5f5d90d7390698eaa21c86ab7b683f480487440251385d49c8acae7423d6a5e2e3ee5833fd14a83c1d51ae49eeba WHIRLPOOL 714f08996c31b8bde2d88e2e63db34b306bd8ef8745b1eb373c573da2f7ad6f5605271ac88531ef2b84916b514e846448296ce16de20bdf8089b61b288120a38
|
||||
MISC ChangeLog-2015 1236 SHA256 70b3c7dadda94faeda5ead0990d373f5b61c1af79b8e5374315cebe4793b08ea SHA512 da997ee9065d559466b71662d74cfb19e07c4a7c6b65f1625b4f6824b51140597e1f63688061209229203c9c56167dbc0a7d5a5db5b75286c65581f954a5fb55 WHIRLPOOL 4a49bdd8cf884ee514e4bfd36fec9d5fd866f20f89c3208756cb6f0f4ca4aa08e23a12f7d5200bfb6d96a17f357e73248d3935060e4912876a365676ace58e3c
|
||||
MISC metadata.xml 334 SHA256 5df2b0e0c7aa173f043a4846c32fbe9b87fa8149d5595bb44a13d7fad0af0302 SHA512 195b9f2bf651b9f57c1f4333dcb1e0b7766c1d39df2faafcf01b16e4aab28a67e2434c2368d62bff16bf14ea3763d66d0d5a47714ef9f2282cd90d00cc49328f WHIRLPOOL 9ef1ea82d86083f413959a5e6e1938fd190af97911762e72d552dc79496c594b0faf4efa9cda2ba10deabe8efd00d3e9d480b4053658af29db7ca54a9e26778c
|
||||
|
@ -1,7 +1,7 @@
|
||||
DIST camlp5-6.14.tgz 748674 SHA256 09f9ed12893d2ec39c88106af2306865c966096bedce0250f2fe52b67d2480e2 SHA512 7dd57b8725953099726fc2e5f6dda01ed74485a4bbf41cb30ccd2163ee38bc6dff36fd83069c58d7990522527d266c9e180a8e333b36a42bc216315dc88a25e9 WHIRLPOOL 305bb842e449775352cbbf3c89a301a188419c10462f0959b00e181596218b5251dac50856f152ad471fd680e557e6595978c395e9c2864c38ddacd7287c4e3b
|
||||
DIST camlp5-6.15.tgz 756199 SHA256 2e0e1e31e0537f2179766820dd9bd0a4d424bc5ab9c610e6dbf9145f27747f2b SHA512 658ff32d1d124e91e85d8eba47039bb75573b3807d67fae723335bb06d3237c4151f6d671fb3b068ec4ebffdde03f7956174c9f0ca29eafa5990974987bc2aca WHIRLPOOL d449b7a485967b79efbc030527513d99dd19d4856ebc132133d09d7028c210b4314ac401de65ac7671d3066f6a2184df157a0091fc173f4d6e7ae8bc7ad2c432
|
||||
EBUILD camlp5-6.14.ebuild 1364 SHA256 b56c88f066744c4c09cdad05f2db6d477b9b922a5cd144f7940e35eefab72cad SHA512 e06b9082b7ea0d9ddfadd6da5679061ceda3fca6d6af9cfe042152af99c920bd1b6af378a5f1b0c8ad3c2e0ed16eeb8d3ae0aea9996014e100a1261c35d0a18d WHIRLPOOL 8bacebb79ebd58f41e725aa2695cff2b5f0ec9992991fc3dd877cc9baa42137567aa57e86aea3f5b2e137e70c8fc19502e6e758c8725ce4aa7693b219e4371d5
|
||||
EBUILD camlp5-6.14.ebuild 1370 SHA256 2269b6c7dd18dbb583ae4a962cab2ef4ebec46acd3b3000c6f51f3e28938a2e0 SHA512 763547bcc4b579f8ab46c8055a4fa8f7e320d9e1f44dba6a9bafa35e1e7988f7b44fe22f2819315a167db8a0fec7a4d6fd48e82865fb4a02a93822acf58cd086 WHIRLPOOL b2c1887fadfd7b2c2ca8a46a350d5823d7b7c1caeb18c463a85abcaceff84d0dddb4ce42e0434ed5ac483ac865b2645aad9bf87572e384a594f5beac4cce1929
|
||||
EBUILD camlp5-6.15.ebuild 1367 SHA256 f40a3b6a700a6a6091eec72382b7d9b0733500d8282e190681f8aeccbde82099 SHA512 796b796ca160a7f7d7fe3247e5cf6f9b7b435a44a3d5c8f8cc3a56187c8323be0a4397e661184612d815f6690d2ca09a9af15d447694b0b518920a03384a874d WHIRLPOOL 74340c62a7ba3e6891ec1a9295f12773c6b142bbb82f7b0f73c6dd4cfbebb92a194ca6d7bac8e9a7ed074f6782157b19a4674c3b10d5cce8a890abc4c5dedb20
|
||||
MISC ChangeLog 3459 SHA256 3a4901311d55f482a78e377dfef7f5252b9e81279e69d037bf165181149893bc SHA512 59d60f7c54c2dd3cdea92cc27abf0751a70ca899b8f7246c874bcc8fd2e28af619de33461e92c64007b78b3dd2f7b52bae317baab95dc4c32b20e1bd7d7ae60e WHIRLPOOL c0ab4e21ea49e851e30aa4c6666673b613458cee2515513e66771658b3478fa933954736ff02a6fd45fef83219f3411423240c65842ee4577c99ef98f6c643d1
|
||||
MISC ChangeLog 3611 SHA256 087a4135cc96bece61b80212f354cf4dff49a67b144f50ec1e391fc6baec8510 SHA512 9d8510750b63ac1eb870277f8f2872a536dafdb0d62067deea36e710b13cefd2a89ab18e3c9d2db1079b3418820ae433b6e9ee148c3ac04c42a4facb492b2ea1 WHIRLPOOL c5c950eeb52373e239db06309419a465b4497bc62226f4624d780eb9aebd8e6eb10ac4ddd75c1b235bfb9c12e1d057623e4364a64256fdb1b715af0390f236df
|
||||
MISC ChangeLog-2015 10891 SHA256 bbfbf6eb9cf34740efb86d1bc9d2180bc1389f3645109db736be6b3826bb6c36 SHA512 a3dbea358bfe180547541e5dc44d2b5728c860b775023fe2498e0a6c6b240abada01d02317ec9fc86ae90483f4ebcabc45f5539bc5e0e013f848c0a3f0412494 WHIRLPOOL fa63becb1c672105e9d7113d47ca27561476664ad5fe3cf9eb64eb78ca7ea93693f8898dd3243b20cb5eea65283b232b0fdaca652568d70b56c04c6bdf4cb9a3
|
||||
MISC metadata.xml 243 SHA256 5e9b58b0b795266f973d066675839499e3a56d7d932d702404a4b91ded8eb26c SHA512 1c5b4b2163017e496999d1f87e5c9c5ac6c11b2e9187450ccfb3df258f34e54d278972f04ee0e8429476c6f87e091a869ac2a28c6e8c8e6d20678c3e74061449 WHIRLPOOL 085df2e84901cbe563c7c1d30d04c229547f15f8ee26ac61d44d07c3f6999f2bbfa4cf309963172fb507cce5450d27598b762c3ccab92351601965c3afc05e3a
|
||||
|
@ -1,6 +1,6 @@
|
||||
AUX findlib.patch 645 SHA256 68e6dbe7c2d67e4590949cd1321de9fdd4952c051a9b162f162649c42c0a95b9 SHA512 4f5172bc7d603375bda331d40708ad14e7e9e7374f97cbd11da56473ca704421f7c801559dbcc753fe8004a809b80142158974a1c5c469eb2894580121cc9442 WHIRLPOOL 3fe3567cdb7c51171d60ba2005a547baddf38dbdb32a9d72323e7c94efcdace89ceabd8363ad755d7d6bd9379613a7928e0942b4d70f1517f8518f50dad74079
|
||||
DIST labltk-8.06.0.tar.gz 368790 SHA256 71997dbd6c36e4eb064484dc73037d4bd10e465e180fead07a4b193d21af9764 SHA512 c005f8c177bca982a39bfcfd9d77640bedf7e4cc3a6690fc01fa2a8ebedcfb30ad3677501400ae2e0e276eb13fdd565319e23bb02dce84d78257ae7fbe545f47 WHIRLPOOL e231527f1403fbe9aa1102d0a6bc444df0ce5806e64ce8d1323100580767e823922db0713c0d3423f79ff2e82e162673486160953aaea4ff188b5ae666ea4445
|
||||
EBUILD labltk-8.06.0.ebuild 1028 SHA256 e05481dd201332b6695da4dd2aebaf03e79ae7943aaf391510cc742679b0752a SHA512 229581023ecb75af6172bfc7de81049bd5acf18803d1a0f2cce95953b76aa83b34cbd96a34561fafc3b34d8d6272afcf87173a2c3467418d5cab9db2766a6214 WHIRLPOOL 6467cede92978eaf1cd6582881ffc5e1cffdfc266fe478520018891d66b48910e02b4d27a6ced8855e8255dbd65a42c015afc41eecd6c852029823b2871d2fee
|
||||
MISC ChangeLog 3511 SHA256 887139091d053e7a6921f657360ed5705ab8b8c7d3f03f8090654651a0b909ef SHA512 0bd11b8560684d7e2c56a393f3777b35e2cb8bd779ad55e8247b89c1062ca1901524f5bd71a28e7590788b86a0ba06380b5f78637cbf71c2bc775a22cf8d8b39 WHIRLPOOL a685b77ec29ff49589e8c299be556a6241c78f606f70af1418c480f342555aa7beb3839eb72fffeb8708680475e164864b5287f953f2b4ff96d28be4d3745e5b
|
||||
EBUILD labltk-8.06.0.ebuild 1027 SHA256 9b4d3759e1bd388ead057e81a5109ae0352c536820fa424a5066809d8fe8f62d SHA512 19b8817ca82de546a7db663bf1a0803446bddb9929ee8e2319e05c3a7a402b2d6dcc5261645ade348870d9f7fab86ab215a38df54f792ff7e3ca8b73fce376ab WHIRLPOOL 62781cb3cd701329673573f7a70fc0c90bdede52633ffbdbbe235a5e0d2b12a2211cdbc4c8f5fe55d29e025f3fe5bbf5763694813e13cd435df12668528cc22e
|
||||
MISC ChangeLog 3665 SHA256 19f3d43aa55506a0f5514312086b8a3ef4183e6fc99f72d2838618c433ac99a5 SHA512 d9116f8006df84c9a014faff03fef74b56388b8823d9a2bbfb7bb486fa173e8ce19388892a97e7341bb01a6360e7beba634631feb2c4635e99c2aaf4a6f08c68 WHIRLPOOL 3884117eaef8f60423b7eafb1755b95f68d4393302b8c0cb285f3c10685b50992c057331167e7a872dedaab98ee10807edf7d131ce82a1e2080df084575fe225
|
||||
MISC ChangeLog-2015 890 SHA256 ea96173f7287c7cc4cc11b725bb313ad2ede7223303d08427e0c2d7eb4d00cba SHA512 4690e4a8a73c5ac11ab68626029ec7a738f640fc256514e140a394c4da7288822ca666dfa2874b12891306e13396118dc4183c494545e6bca64cad945d609cef WHIRLPOOL 48cc1be3886754b3a27e687fa3e12d4f3b96874b536ca56aa2bc11f24fad9c7a7a5a7cba03570a5a118f7ad3b80865e2ca00ba1a84260057c5a6140682616c8a
|
||||
MISC metadata.xml 243 SHA256 5e9b58b0b795266f973d066675839499e3a56d7d932d702404a4b91ded8eb26c SHA512 1c5b4b2163017e496999d1f87e5c9c5ac6c11b2e9187450ccfb3df258f34e54d278972f04ee0e8429476c6f87e091a869ac2a28c6e8c8e6d20678c3e74061449 WHIRLPOOL 085df2e84901cbe563c7c1d30d04c229547f15f8ee26ac61d44d07c3f6999f2bbfa4cf309963172fb507cce5450d27598b762c3ccab92351601965c3afc05e3a
|
||||
|
@ -1,7 +1,7 @@
|
||||
DIST Getopt-Mixed-1.11.tar.gz 21162 SHA256 cf0813c52e0ea677b08b251db7447b7fa703783ce1b75b1cb8daa1bdd511eea6 SHA512 7f00e47aa89b0272864a84af97fca4468799032d95e45fa906db2de2dc82f5ab0999a8b7c664f993feaa0f1ea0fc2203f8dc3a63e9fca19d36f7be541fe4eec1 WHIRLPOOL a28acdf976b6163a08878aeff8117c92f130b182123d106dbb0fe53bcf549c021d3df1335df8100a21e0d0467139108c54d8bf3d219c4388bf9df9f826c9cb0f
|
||||
DIST Getopt-Mixed-1.12.tar.gz 21423 SHA256 cb139c3c94c0dc95378b5a33178dfbf69bf11acca6c4592cda4872343b4436c8 SHA512 74e7d0e7cf854d18b69cf36caf9647f78660db1b21ceb6750aae15aec5e40947902834d7f178adeae442f83958157809a2f95f1873c120dc3093c35d1fdc0ad2 WHIRLPOOL 3f8ab2ce0fbdd4e82f2f03d62f9ace049900c9c8b8b9ef24ccb8c76225621b136892dfaa9cb7c5f81df5e9a973b3726fd06aa85c7caf14e5b4bf003b13042f89
|
||||
EBUILD Getopt-Mixed-1.110.0-r1.ebuild 322 SHA256 1e228709fb88492886544520b22b5ed609e3f66a625be6f9b2cc2ce29d51d3eb SHA512 2e1ed8de8ced9fce6b7177bbdbdc01f0a35296dff4537daebbf195eb7cdd358be6b24e415a4545c20f8c3bb1282cbc630e2e9e251445f4c6e5ecbb4b8ac88c43 WHIRLPOOL a13a2263a15b7d5f4bc85f2bba746f09248dede1a775010eaa41227481c5f36521a04cfa431f74c168e17d309dd0e7cd2b736f55df7b27a7cf50aab348c1d6a3
|
||||
EBUILD Getopt-Mixed-1.120.0.ebuild 487 SHA256 c44bc05d161e244b3fae3cfeccbcf59a8cd73779048c510bc1eb2727d9214a00 SHA512 b4eb29364230bcb2464510c3cbbc673780e24c0ed3bc3637cadae749abb1016bf5091dbb6aaf03045027385bc62ff8b84d9ce6b754aac3d02358376db838cd04 WHIRLPOOL dc04c15b90053a27b022597a4a999d5b98ac38dd3b802e53566e8cdde215bca34462cb408c57512c7f3570316acb297ea64eb59136e3a12102fc49f19f1cf46c
|
||||
MISC ChangeLog 2760 SHA256 f03cd0f47f416ed19ef5274b1e53f237968fa746bce6137a14fed5e37d1ef7d1 SHA512 58efa806d95606b177d234115936b4c747a28121e5e41cbce5f5eb47f55d29b6aca39addd284ca4554a6d17ef66a8001144ed82f4840ff4de51abea09fa64b8c WHIRLPOOL 9976e25a273dff8407e0f319f49a69c422d7f7f7bef47ef83cf5b8156338a9a88e73583941c7302c96f2cfdd2bfc82c4b5d8dcf3b931e61a11c5a22888770ad6
|
||||
EBUILD Getopt-Mixed-1.120.0.ebuild 486 SHA256 81cfe9350b7798e6f0cc3d6219d307bee9313e2d653093a886cd8d1e867dfe44 SHA512 a0f8977726b928bc075a59046f19640c19e7184dce9d0d51f682672ab7601c3a5aa51ac52693f7654a69db58f94c86dfb2d4f8bad5cd7cd509241728fcd7172c WHIRLPOOL 89a2619667d6c15d351e28b9dce9b2019ef1fe0959f41304ca93a326d54bf114f3c92be53684535eb12b12c58e5d911b60ab3464c4d162d47d861400cb33d2ff
|
||||
MISC ChangeLog 2923 SHA256 16c00be5050699cb1edc93838bf1eb66486ebe40e7d134c062d03cbb19a77e8b SHA512 fb38b27306030150c571608a1d25118085b95855d00d12cd873facf81ee6f661842ae5f39b592cf7552eab63d605185f68f89f4a49495191b6c1a4df1e77edf2 WHIRLPOOL 4e3d6c15ca151f5cb28fa7dc7f93dae5b2e999f813a03d6b184c10e3f578a92ac4e3dc7426581e72da0e182623fe99383152b11101b1f685116cc953dfd01414
|
||||
MISC ChangeLog-2015 4047 SHA256 0a7ee930c2593c86f9dc0bdeca1e3c955d5ab59ea473b906da5af3385939d4ed SHA512 ada38dd39f8b3589fd34922a339b5b198d64113c181fda5a6d40c1e1664efa15338bbd3035e264d71738aa312d4f61b2b2754625d5a02e23c4b61beb4bf3fca8 WHIRLPOOL f986503eba7a72cde9d247168bdc95b2fa75c20bcae312ef5135ea8136a929a24db2a965f6a2871ca57e387cd5ec41e1da0ca657fb1cb704b220df9f096bca7d
|
||||
MISC metadata.xml 396 SHA256 05eaec4734687242311ac9369efb97f8fbb13518701b97fd4e666fe36bc2a13c SHA512 47dab0acf571b2e97683b7635b2d006aa3ac31bb80769053df689fcc7549186830b0f0db2a18e96a5a5446aa0c2cca2ac68324fdd6405c815e23e492e6c8bccd WHIRLPOOL e66a9870cc0c0848eda80f23d70860964deb6ca005d818820c7a92c02ee7a4a014bccc4fb980f91ef5f1e8ca0e4469a493b85bc05bd5813bc4c56e5875bb2881
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue