From 968d5d7b886f894d4df08eef09d0fc21539f60fc Mon Sep 17 00:00:00 2001 From: Yuce Tekol Date: Fri, 3 May 2019 09:51:18 +0300 Subject: added restrict script --- examples/restrict.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 examples/restrict.py (limited to 'examples') diff --git a/examples/restrict.py b/examples/restrict.py new file mode 100644 index 0000000..5fb002b --- /dev/null +++ b/examples/restrict.py @@ -0,0 +1,55 @@ +#! /usr/bin/env python + +from __future__ import print_function +import sys +import os + +from openbsd import pledge, unveil + +""" +A little utilty that pledges and unveils. +python3 restrict.py rpath stdio /tmp/foo:r /bin/cat:x -x cat /tmp/foo +""" + +def extract_args(args): + promises = set() + rviews = [] + cmd_args = [] + eop = False + + for arg in args: + if eop: + cmd_args.append(arg) + continue + if arg == "-x": + eop = True + continue + if ":" in arg: + rviews.append(tuple(arg.split(":", 1)[:2])) + else: + promises.add(arg) + + promises = None if "ALL" in promises else " ".join(promises) + return promises, rviews, eop, cmd_args + + +def print_usage(): + print("Usage: %s [ALL | promise1 promise2 ...] -x cmd [arg1 arg2 ...]" % sys.argv[0], file=sys.stderr) + sys.exit(1) + + +def main(): + promises, rviews, eop, cmd_args = extract_args(sys.argv[1:]) + if not eop: + print_usage() + + if rviews: + for path, perm in rviews: + unveil(path, perm) + + pledge("exec stdio rpath", promises) + os.execvp(cmd_args[0], cmd_args) + +if __name__ == "__main__": + main() + -- cgit 1.4.1-2-gfad0