fix: remove builder proxy declarations from exported package environments
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import importlib.util
|
||||
import bz2
|
||||
import json
|
||||
import os
|
||||
import shlex
|
||||
@@ -73,6 +74,36 @@ class ImageTests(unittest.TestCase):
|
||||
self.assertEqual((self.root / 'etc/hostname').read_text(), 'hydra-os\n')
|
||||
self.assertTrue((self.root / 'etc/resolv.conf').is_symlink())
|
||||
|
||||
def test_export_filters_saved_environment_proxies_but_retains_package_metadata(self):
|
||||
self.assertTrue(callable(getattr(image, 'sanitize_saved_environments', None)), 'saved environment scrubber is missing')
|
||||
# Portable stand-in for the external Portage filter API, not the scrubber.
|
||||
helper = self.file('usr/lib/portage/python3.14/filter-bash-environment.py',
|
||||
"import re\ndef filter_bash_environment(pattern, source, output):\n"
|
||||
" for line in source:\n"
|
||||
" match = re.match(rb'declare -x ([A-Za-z_][A-Za-z0-9_]*)=', line)\n"
|
||||
" if not match or not pattern.fullmatch(match.group(1)):\n"
|
||||
" output.write(line)\n")
|
||||
path = self.root / 'var/db/pkg/app-emulation/qemu-9.2.4/environment.bz2'
|
||||
path.parent.mkdir(parents=True)
|
||||
package_metadata = b'declare -x LICENSE="GPL-2"\ndeclare -x EAPI="8"\n'
|
||||
path.write_bytes(bz2.compress(package_metadata + b'declare -x HTTPS_PROXY="https://user:secret@builder.invalid"\n'
|
||||
b'declare -x HTTP_PROXY="http://127.0.0.1:1234"\n'
|
||||
b'declare -x NO_PROXY="localhost"\n'))
|
||||
result = image.sanitize_saved_environments(self.root)
|
||||
self.assertEqual(bz2.decompress(path.read_bytes()), package_metadata)
|
||||
self.assertEqual(result['filtered_files'], 1)
|
||||
self.assertEqual(result['variable_names'], ['HTTPS_PROXY', 'HTTP_PROXY', 'NO_PROXY'])
|
||||
|
||||
def test_saved_environment_filter_refuses_missing_portage_helper(self):
|
||||
self.assertTrue(callable(getattr(image, 'sanitize_saved_environments', None)), 'saved environment scrubber is missing')
|
||||
path = self.root / 'var/db/pkg/app-emulation/qemu-9.2.4/environment.bz2'
|
||||
path.parent.mkdir(parents=True)
|
||||
original = bz2.compress(b'declare -x HTTPS_PROXY="private"\n')
|
||||
path.write_bytes(original)
|
||||
with self.assertRaises(image.ImageError):
|
||||
image.sanitize_saved_environments(self.root)
|
||||
self.assertEqual(path.read_bytes(), original)
|
||||
|
||||
def test_sanitization_cannot_follow_exported_symlink_to_host(self):
|
||||
outside = Path(self.tmp.name) / 'host'
|
||||
outside.mkdir()
|
||||
|
||||
Reference in New Issue
Block a user