X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fporterbox%2Ffiles%2Fdd-schroot-cmd;h=41993b2c12cc09aef5513ad8d7b39b2b6a67f595;hb=51c79070603003701cef47513835b6d3e41e64fc;hp=76f3c9d113d62253554764432da9bf2b57fd3518;hpb=48bc7ea6289b52409b355c4f0a08bbb27128eae6;p=mirror%2Fdsa-puppet.git diff --git a/modules/porterbox/files/dd-schroot-cmd b/modules/porterbox/files/dd-schroot-cmd index 76f3c9d11..41993b2c1 100755 --- a/modules/porterbox/files/dd-schroot-cmd +++ b/modules/porterbox/files/dd-schroot-cmd @@ -6,7 +6,7 @@ ## -# Copyright (c) 2013 Peter Palfrader +# Copyright (c) 2013, 2017 Peter Palfrader # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the @@ -56,7 +56,7 @@ def die(s): sys.exit(1) def get_session_owner(session): - if re.search('[^0-9a-zA-Z_-]', session): + if re.search('^\.|~$|[^0-9a-zA-Z_.~-]', session): die("Invalid session name.") path = os.path.join('/var/lib/schroot/session', session) @@ -80,7 +80,7 @@ def ensure_ok(session): die("Session owner mismatch.") def os_supports_unshare(): - if platform.uname()[0] == 'GNU/kFreeBSD': + if platform.uname()[0] in ('GNU/kFreeBSD', 'GNU'): return False return True @@ -88,7 +88,7 @@ class WrappedRunner(): def __init__(self, session, args, unshare=True): self.unshare = unshare if not os_supports_unshare(): self.unshare = False - s,r = self.run('schroot', '-c', session, '--run-session', '--', 'env', 'DEBIAN_FRONTEND=noninteractive', *args) + s,r = self.run('schroot', '-c', session, '--directory=/', '--run-session', '--', 'env', 'DEBIAN_FRONTEND=noninteractive', *args) if s != 0: die("Command %s exited due to signal %d."%(' '.join(args), s)) if r != 0: @@ -154,7 +154,12 @@ class AptSchroot: elif op == "install": self.apt_install(args) elif op == "build-dep": - self.apt_build_dep(args) + try: + args.remove("--arch-only") + archonly = True + except ValueError: + archonly = False + self.apt_build_dep(args, archonly) else: die("Invalid operation %s"%(op,)) @@ -172,10 +177,13 @@ class AptSchroot: self.apt_simulate_and_ask(['dist-upgrade']) def apt_install(self, packages): + packages = self.reject_invalid_packages(packages) self.apt_simulate_and_ask(['install', '--'] + packages) - def apt_build_dep(self, packages): - self.apt_simulate_and_ask(['build-dep', '--'] + packages) + def apt_build_dep(self, packages, archonly=False): + packages = self.reject_invalid_packages(packages) + cmd = (['--arch-only'] if archonly else []) + ['build-dep', '--'] + self.apt_simulate_and_ask(cmd + packages) def apt_simulate_and_ask(self, cmd, split_download=True, run_clean=True): if not self.assume_yes: @@ -191,6 +199,21 @@ class AptSchroot: def secure_run(self, args, unshare=True): WrappedRunner(self.session, args, unshare) + @staticmethod + def reject_invalid_packages(pkgs): + """filter package names + + reject package names that start with . or /, as they are + not valid package names, but can be used to install local files + which we do not want. + """ + new_pkgs = [] + for p in pkgs: + if p.startswith('.') or p.startswith('/'): + die("invalid package name: %s"%(p,)) + new_pkgs.append(p) + return new_pkgs + parser = optparse.OptionParser() parser.set_usage("""%prog [options] -c [-y] --