]> git.nothing2do.fr Git - get-hack-src.git/commitdiff
Fixed canari command shell and debug to include sudo functionality.
authorallfro <ndouba@gmail.com>
Sun, 21 Oct 2012 18:19:16 +0000 (14:19 -0400)
committerallfro <ndouba@gmail.com>
Sun, 21 Oct 2012 18:19:16 +0000 (14:19 -0400)
src/canari/commands/common.py
src/canari/commands/debug_transform.py
src/canari/commands/shell.py

index 7e19c3d6be752db8d4f8beb5cae2d6ddc020a671..3ffd126c86c18d4f6a00eeb3c89d6f4461a852aa 100644 (file)
@@ -124,6 +124,11 @@ def import_transform(script):
     return __import__(script, globals(), locals(), ['dotransform'])
 
 
+def import_package(package):
+    fix_pypath()
+    return __import__(package, globals(), locals(), ['*'])
+
+
 def cmd_name(name):
     return name.replace('canari.commands.', '').replace('_', '-')
 
index 34b02aefa89c8fd033a52cbdbd622ccbeefc1ee7..f20fdca89411455ab34bcf4b540ebea746b200b3 100644 (file)
@@ -5,8 +5,7 @@ from common import croak, import_transform, cmd_name, console_message, fix_binpa
 from ..maltego.utils import onterminate, parseargs
 from ..config import config
 
-from distutils.sysconfig import get_config_var
-from os import execvp, geteuid, name, path
+from os import execvp, geteuid, name
 from argparse import ArgumentParser
 from traceback import format_exc
 from sys import argv
@@ -66,13 +65,12 @@ def run(args):
     [transform, params, value, fields] = parseargs(['canari %s' % cmd_name(__name__)] + args)
 
     m = None
-    pysudo = path.join(get_config_var('BINDIR'), 'pysudo')
     fix_binpath(config['default/path'])
     try:
         m = import_transform(transform)
 
         if name == 'posix' and hasattr(m.dotransform, 'privileged') and geteuid():
-            execvp(pysudo, [pysudo] + list(argv))
+            execvp('sudo', ['sudo'] + list(argv))
             exit(-1)
 
         if hasattr(m, 'onterminate'):
index f700f3e3232802f7b04b0fd64d97e8c7f7b6dadd..355f259819fc0e28e346ae5d9675462a65242a30 100644 (file)
@@ -1,14 +1,15 @@
 #!/usr/bin/env python
 
-from common import console_message, cmd_name, highlight, fix_pypath, fix_binpath
+from common import console_message, cmd_name, highlight, fix_pypath, fix_binpath, import_package
 from ..maltego.message import MaltegoTransformResponseMessage
 from ..config import config
 
+from distutils.sysconfig import get_config_var
+from os import path, name, geteuid, execvp
 from code import InteractiveConsole
 from argparse import ArgumentParser
-from os import path, environ
 from atexit import register
-from re import sub, match
+from sys import argv
 import readline
 
 
@@ -43,37 +44,41 @@ def description():
     return parser.description
 
 
-class MtgConsole(InteractiveConsole):
+class ShellCommand(object):
 
-    def __init__(self, package):
-        m = __import__(package, globals(), locals(), ['*'])
-        m.__dict__[MaltegoTransformResponseMessage.__name__] = MaltegoTransformResponseMessage
-        m.__dict__['message'] = console_message
-        InteractiveConsole.__init__(self, locals=m.__dict__)
-        self.init_history(path.expanduser('~/.mtgsh_history'))
+    def __init__(self, mod):
+        self.mod = mod
+        self.sudoargs = ['sudo'] + list(argv)
 
-    def raw_input(self, prompt):
-        line = InteractiveConsole.raw_input(self, prompt=highlight('mtg> ', None, True))
-        r = match(r'([^(]+)\((.*?)\)', line)
-        if r is not None:
-            g = r.groups()
-            if g[0] in self.locals:
-                line = eval(sub(r'([^\(]+)\((.*)\)', r'self.docall("\1", \2)', line))
-        return line
-
-    def docall(self, *args, **kwargs):
-        return """message(%s.dotransform(
+    def __call__(self, value, *args, **kwargs):
+        if name == 'posix' and hasattr(self.mod.dotransform, 'privileged') and geteuid():
+            print highlight("Need to be root to run this transform... sudo'ing...", 'green', True)
+            execvp('sudo', self.sudoargs)
+            return
+        return console_message(self.mod.dotransform(
             type(
                 'MaltegoTransformRequestMessage',
                 (object,),
-                {
-                    'value' : %s,
-                    'fields' : %s,
-                    'params' : %s
+                    {
+                    'value' : value,
+                    'params' : list(args),
+                    'fields' : kwargs
                 }
             )(),
             MaltegoTransformResponseMessage()
-        ))""" % (args[0], repr(args[1]) if len(args) != 1 else repr(''), repr(kwargs), repr(args[2:]))
+        ))
+
+
+class MtgConsole(InteractiveConsole):
+
+    def __init__(self, package):
+        package = import_package(package)
+        transforms = dict(dir=dir)
+        for name, mod in package.__dict__.iteritems():
+            if getattr(mod, 'dotransform', ''):
+                transforms[name] = ShellCommand(mod)
+        InteractiveConsole.__init__(self, locals=transforms)
+        self.init_history(path.expanduser('~/.mtgsh_history'))
 
     def init_history(self, histfile):
         readline.parse_and_bind('tab: complete')