qubes/tools: add common --force-root option

This commit is contained in:
Wojtek Porczyk 2015-06-25 11:18:13 +02:00
parent 6dc5f328f3
commit b11b8cdbde

View File

@ -27,22 +27,29 @@
import argparse import argparse
import importlib import importlib
import os
# TODO --verbose, logger setup # TODO --verbose, logger setup
def get_parser_base(*args, **kwargs): def get_parser_base(want_force_root=False, **kwargs):
'''Get base parser with options common to all Qubes OS tools. '''Get base parser with options common to all Qubes OS tools.
Currently supported options: ``--xml``. :param bool want_force_root: add ``--force-root`` option
*kwargs* are passed to :py:class:`argparser.ArgumentParser`.
*args* and *kwargs* are passed to :py:class:`argparser.ArgumentParser`. Currently supported options: ``--force-root`` (optional), ``--xml``.
''' '''
parser = argparse.ArgumentParser(*args, **kwargs) parser = argparse.ArgumentParser(**kwargs)
parser.add_argument('--xml', metavar='XMLFILE', parser.add_argument('--xml', metavar='XMLFILE',
action='store', action='store',
help='Qubes OS store file') help='Qubes OS store file')
if want_force_root:
parser.add_argument('--force-root',
action='store_true', default=False,
help='Force to run as root.')
return parser return parser
@ -67,3 +74,21 @@ def get_parser_for_command(command):
raise AttributeError('cannot find parser in module') raise AttributeError('cannot find parser in module')
return parser return parser
def dont_run_as_root(parser, args):
'''Prevent running as root.
:param argparse.ArgumentParser parser: parser on which we invoke error
:param argparse.Namespace args: if there is ``.force_root`` attribute set \
to true, run anyway
:return: If we should back off
:rtype bool:
'''
try:
euid = os.geteuid()
except AttributeError: # no geteuid(), probably NT
return
if euid == 0 and not args.force_root:
parser.error('refusing to run as root; add --force-root to override')