def main(args=None): args = parser.parse_args(args) # Add source domain information, required by qrexec-client for establishing # connection caller_ident = args.process_ident + "," + args.domain + "," + args.domain_id log = logging.getLogger('qubespolicy') log.setLevel(logging.INFO) handler = logging.handlers.SysLogHandler(address='/dev/log') log.addHandler(handler) log_prefix = 'qrexec: {}: {} -> {}: '.format(args.service_name, args.domain, args.target) try: system_info = qubespolicy.get_system_info() except qubespolicy.QubesMgmtException as e: log.error(log_prefix + 'error getting system info: ' + str(e)) return 1 try: policy = qubespolicy.Policy(args.service_name) action = policy.evaluate(system_info, args.domain, args.target) if action.action == qubespolicy.Action.ask: # late import to save on time for allow/deny actions import pydbus bus = pydbus.SystemBus() proxy = bus.get('org.qubesos.PolicyAgent', '/org/qubesos/PolicyAgent') icons = { name: system_info['domains'][name]['icon'] for name in system_info['domains'].keys() } for dispvm_base in system_info['domains']: if not system_info['domains'][dispvm_base]['dispvm_allowed']: continue dispvm_api_name = '$dispvm:' + dispvm_base icons[dispvm_api_name] = \ system_info['domains'][dispvm_base]['icon'] icons[dispvm_api_name] = \ icons[dispvm_api_name].replace('app', 'disp') response = proxy.Ask(args.domain, args.service_name, action.targets_for_ask, action.target or '', icons) if response: action.handle_user_response(True, response) else: action.handle_user_response(False) log.info(log_prefix + 'allowed to {}'.format(action.target)) action.execute(caller_ident) except qubespolicy.PolicySyntaxError as e: log.error(log_prefix + 'error loading policy: ' + str(e)) return 1 except qubespolicy.AccessDenied as e: log.info(log_prefix + 'denied: ' + str(e)) return 1 return 0
def main(args=None): args = parser.parse_args(args) output = sys.stdout if args.output: output = open(args.output, 'w') if args.system_info: with open(args.system_info) as f_system_info: system_info = json.load(f_system_info) else: system_info = qubespolicy.get_system_info() sources = list(system_info['domains'].keys()) if args.source: sources = args.source targets = list(system_info['domains'].keys()) targets.append('$dispvm') targets.extend('$dispvm:' + dom for dom in system_info['domains'] if system_info['domains'][dom]['template_for_dispvms']) connections = set() output.write('digraph g {\n') for service in os.listdir(args.policy_dir): if os.path.isdir(os.path.join(args.policy_dir, service)): continue if args.service and service not in args.service and \ not any(service.startswith(srv + '+') for srv in args.service): continue policy = qubespolicy.Policy(service, args.policy_dir) for source in sources: for target in targets: try: action = policy.evaluate(system_info, source, target) line = handle_single_action(args, action) if line in connections: continue if line: output.write(line) connections.add(line) except qubespolicy.AccessDenied: continue output.write('}\n') if args.output: output.close()
def main(args=None): args = parser.parse_args(args) output = sys.stdout if args.output: output = open(args.output, 'w') if args.system_info: with open(args.system_info) as f_system_info: system_info = json.load(f_system_info) else: system_info = qubespolicy.get_system_info() sources = list(system_info['domains'].keys()) if args.source: sources = args.source targets = list(system_info['domains'].keys()) targets.append('@dispvm') targets.extend('@dispvm:' + dom for dom in system_info['domains'] if system_info['domains'][dom]['template_for_dispvms']) connections = set() output.write('digraph g {\n') for service in os.listdir(args.policy_dir): if os.path.isdir(os.path.join(args.policy_dir, service)): continue if args.service and service not in args.service and \ not any(service.startswith(srv + '+') for srv in args.service): continue policy = qubespolicy.Policy(service, args.policy_dir) for source in sources: for target in targets: try: action = policy.evaluate(system_info, source, target) line = handle_single_action(args, action) if line in connections: continue if line: output.write(line) connections.add(line) except qubespolicy.AccessDenied: continue output.write('}\n') if args.output: output.close()
def main(args=None): args = parser.parse_args(args) # Add source domain information, required by qrexec-client for establishing # connection caller_ident = args.process_ident + "," + args.domain + "," + args.domain_id log = logging.getLogger('qubespolicy') log.setLevel(logging.INFO) if not log.handlers: handler = logging.handlers.SysLogHandler(address='/dev/log') log.addHandler(handler) log_prefix = 'qrexec: {}: {} -> {}:'.format(args.service_name, args.domain, args.target) try: system_info = qubespolicy.get_system_info() except qubespolicy.QubesMgmtException as e: log.error('%s error getting system info: %s', log_prefix, str(e)) return 1 try: try: policy = qubespolicy.Policy(args.service_name) except qubespolicy.PolicyNotFound: service_name = args.service_name.split('+')[0] import pydbus bus = pydbus.SystemBus() proxy = bus.get('org.qubesos.PolicyAgent', '/org/qubesos/PolicyAgent') create_policy = proxy.ConfirmPolicyCreate(args.domain, service_name) if create_policy: create_default_policy(service_name) policy = qubespolicy.Policy(args.service_name) else: raise action = policy.evaluate(system_info, args.domain, args.target) if args.assume_yes_for_ask and action.action == qubespolicy.Action.ask: action.action = qubespolicy.Action.allow if args.just_evaluate: return { qubespolicy.Action.allow: 0, qubespolicy.Action.deny: 1, qubespolicy.Action.ask: 1, }[action.action] if action.action == qubespolicy.Action.ask: # late import to save on time for allow/deny actions import pydbus bus = pydbus.SystemBus() proxy = bus.get('org.qubesos.PolicyAgent', '/org/qubesos/PolicyAgent') icons = { name: system_info['domains'][name]['icon'] for name in system_info['domains'].keys() } for dispvm_base in system_info['domains']: if not (system_info['domains'][dispvm_base] ['template_for_dispvms']): continue dispvm_api_name = '@dispvm:' + dispvm_base icons[dispvm_api_name] = \ system_info['domains'][dispvm_base]['icon'] icons[dispvm_api_name] = \ icons[dispvm_api_name].replace('app', 'disp') response = proxy.Ask(args.domain, args.service_name, action.targets_for_ask, action.target or '', icons) if response: action.handle_user_response(True, response) else: action.handle_user_response(False) log.info('%s allowed to %s', log_prefix, str(action.target)) action.execute(caller_ident) except qubespolicy.PolicySyntaxError as e: log.error('%s error loading policy: %s', log_prefix, str(e)) return 1 except qubespolicy.AccessDenied as e: log.info('%s denied: %s', log_prefix, str(e)) return 1 return 0
def main(args=None): args = parser.parse_args(args) # Add source domain information, required by qrexec-client for establishing # connection caller_ident = args.process_ident + "," + args.domain + "," + args.domain_id log = logging.getLogger('qubespolicy') log.setLevel(logging.INFO) if not log.handlers: handler = logging.handlers.SysLogHandler(address='/dev/log') log.addHandler(handler) log_prefix = 'qrexec: {}: {} -> {}: '.format( args.service_name, args.domain, args.target) try: system_info = qubespolicy.get_system_info() except qubespolicy.QubesMgmtException as e: log.error(log_prefix + 'error getting system info: ' + str(e)) return 1 try: try: policy = qubespolicy.Policy(args.service_name) except qubespolicy.PolicyNotFound: service_name = args.service_name.split('+')[0] import pydbus bus = pydbus.SystemBus() proxy = bus.get('org.qubesos.PolicyAgent', '/org/qubesos/PolicyAgent') create_policy = proxy.ConfirmPolicyCreate( args.domain, service_name) if create_policy: create_default_policy(service_name) policy = qubespolicy.Policy(args.service_name) else: raise action = policy.evaluate(system_info, args.domain, args.target) if args.assume_yes_for_ask and action.action == qubespolicy.Action.ask: action.action = qubespolicy.Action.allow if args.just_evaluate: return { qubespolicy.Action.allow: 0, qubespolicy.Action.deny: 1, qubespolicy.Action.ask: 1, }[action.action] if action.action == qubespolicy.Action.ask: # late import to save on time for allow/deny actions import pydbus bus = pydbus.SystemBus() proxy = bus.get('org.qubesos.PolicyAgent', '/org/qubesos/PolicyAgent') icons = {name: system_info['domains'][name]['icon'] for name in system_info['domains'].keys()} for dispvm_base in system_info['domains']: if not (system_info['domains'][dispvm_base] ['template_for_dispvms']): continue dispvm_api_name = '@dispvm:' + dispvm_base icons[dispvm_api_name] = \ system_info['domains'][dispvm_base]['icon'] icons[dispvm_api_name] = \ icons[dispvm_api_name].replace('app', 'disp') response = proxy.Ask(args.domain, args.service_name, action.targets_for_ask, action.target or '', icons) if response: action.handle_user_response(True, response) else: action.handle_user_response(False) log.info(log_prefix + 'allowed to {}'.format(action.target)) action.execute(caller_ident) except qubespolicy.PolicySyntaxError as e: log.error(log_prefix + 'error loading policy: ' + str(e)) return 1 except qubespolicy.AccessDenied as e: log.info(log_prefix + 'denied: ' + str(e)) return 1 return 0