Skip to content
Snippets Groups Projects
Commit 55df7f97 authored by gpotter2's avatar gpotter2
Browse files

Fix overwritten imports

parent 359b0930
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
Run commands when the Scapy interpreter starts. Run commands when the Scapy interpreter starts.
""" """
import code,sys import code, sys, importlib
from scapy.config import conf from scapy.config import conf
from scapy.themes import * from scapy.themes import *
from scapy.error import Scapy_Exception from scapy.error import Scapy_Exception
...@@ -36,13 +36,16 @@ class ScapyAutorunInterpreter(code.InteractiveInterpreter): ...@@ -36,13 +36,16 @@ class ScapyAutorunInterpreter(code.InteractiveInterpreter):
return code.InteractiveInterpreter.showtraceback(self, *args, **kargs) return code.InteractiveInterpreter.showtraceback(self, *args, **kargs)
def autorun_commands(cmds,my_globals=None,verb=0): def autorun_commands(cmds, my_globals=None, ignore_globals=None, verb=0):
sv = conf.verb sv = conf.verb
import __builtin__ import __builtin__
try: try:
try: try:
if my_globals is None: if my_globals is None:
my_globals = __import__("scapy.all").all.__dict__ my_globals = importlib.import_module(".all", "scapy").__dict__
if ignore_globals:
for ig in ignore_globals:
my_globals.pop(ig, None)
conf.verb = verb conf.verb = verb
interp = ScapyAutorunInterpreter(my_globals) interp = ScapyAutorunInterpreter(my_globals)
cmd = "" cmd = ""
......
...@@ -7,15 +7,22 @@ ...@@ -7,15 +7,22 @@
All layers. Configurable with conf.load_layers. All layers. Configurable with conf.load_layers.
""" """
import __builtin__
from scapy.config import conf from scapy.config import conf
from scapy.error import log_loading from scapy.error import log_loading
import logging import logging, importlib
ignored = list(__builtin__.__dict__.keys()) + ["sys"]
log = logging.getLogger("scapy.loading") log = logging.getLogger("scapy.loading")
__all__ = [] __all__ = []
def _validate_local(x):
global ignored
return x[0] != "_" and not x in ignored
def _import_star(m): def _import_star(m):
mod = __import__(m, globals(), locals()) mod = importlib.import_module("." + m, "scapy.layers")
if '__all__' in mod.__dict__: if '__all__' in mod.__dict__:
# only import the exported symbols in __all__ # only import the exported symbols in __all__
for name in mod.__dict__['__all__']: for name in mod.__dict__['__all__']:
...@@ -24,7 +31,7 @@ def _import_star(m): ...@@ -24,7 +31,7 @@ def _import_star(m):
else: else:
# import all the non-private symbols # import all the non-private symbols
for name, sym in mod.__dict__.iteritems(): for name, sym in mod.__dict__.iteritems():
if name[0] != '_': if _validate_local(name):
__all__.append(name) __all__.append(name)
globals()[name] = sym globals()[name] = sym
......
...@@ -11,8 +11,10 @@ import os,sys ...@@ -11,8 +11,10 @@ import os,sys
import glob import glob
import types import types
import gzip import gzip
import importlib
import cPickle import cPickle
import __builtin__ import __builtin__
ignored = list(__builtin__.__dict__.keys())
from scapy.error import * from scapy.error import *
...@@ -35,6 +37,9 @@ def _read_config_file(cf): ...@@ -35,6 +37,9 @@ def _read_config_file(cf):
except Exception,e: except Exception,e:
log_loading.exception("Error during evaluation of config file [%s]" % cf) log_loading.exception("Error during evaluation of config file [%s]" % cf)
def _validate_local(x):
global ignored
return x[0] != "_" and not x in ignored
DEFAULT_PRESTART_FILE = _probe_config_file(".scapy_prestart.py") DEFAULT_PRESTART_FILE = _probe_config_file(".scapy_prestart.py")
DEFAULT_STARTUP_FILE = _probe_config_file(".scapy_startup.py") DEFAULT_STARTUP_FILE = _probe_config_file(".scapy_startup.py")
...@@ -58,7 +63,7 @@ from scapy.themes import DefaultTheme ...@@ -58,7 +63,7 @@ from scapy.themes import DefaultTheme
def _load(module): def _load(module):
try: try:
mod = __import__(module,globals(),locals(),".") mod = importlib.import_module(module)
if '__all__' in mod.__dict__: if '__all__' in mod.__dict__:
# import listed symbols # import listed symbols
for name in mod.__dict__['__all__']: for name in mod.__dict__['__all__']:
...@@ -66,7 +71,7 @@ def _load(module): ...@@ -66,7 +71,7 @@ def _load(module):
else: else:
# only import non-private symbols # only import non-private symbols
for name, sym in mod.__dict__.iteritems(): for name, sym in mod.__dict__.iteritems():
if name[0] != '_': if _validate_local(name):
__builtin__.__dict__[name] = sym __builtin__.__dict__[name] = sym
except Exception,e: except Exception,e:
log_interactive.error(e) log_interactive.error(e)
...@@ -79,7 +84,7 @@ def load_layer(name): ...@@ -79,7 +84,7 @@ def load_layer(name):
def load_contrib(name): def load_contrib(name):
try: try:
__import__("scapy.contrib." + name) importlib.import_module("scapy.contrib." + name)
_load("scapy.contrib." + name) _load("scapy.contrib." + name)
except ImportError: except ImportError:
# if layer not found in contrib, try in layers # if layer not found in contrib, try in layers
...@@ -180,11 +185,11 @@ def init_session(session_name, mydict=None): ...@@ -180,11 +185,11 @@ def init_session(session_name, mydict=None):
global session global session
global globkeys global globkeys
scapy_builtins = __import__("all",globals(),locals(),".").__dict__ scapy_builtins = importlib.import_module(".all", "scapy").__dict__
for name, sym in scapy_builtins.iteritems(): for name, sym in scapy_builtins.iteritems():
if name [0] != '_': if _validate_local(name):
__builtin__.__dict__[name] = sym __builtin__.__dict__[name] = sym
globkeys = scapy_builtins.keys() globkeys = list(scapy_builtins.keys())
globkeys.append("scapy_session") globkeys.append("scapy_session")
scapy_builtins=None # XXX replace with "with" statement scapy_builtins=None # XXX replace with "with" statement
if mydict is not None: if mydict is not None:
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
Unit testing infrastructure for Scapy Unit testing infrastructure for Scapy
""" """
import sys, getopt, imp, glob import sys, getopt, imp, glob, importlib
import bz2, base64, os.path, time, traceback, zlib, sha import bz2, base64, os.path, time, traceback, zlib, sha
from scapy.consts import WINDOWS from scapy.consts import WINDOWS
...@@ -355,17 +355,17 @@ def remove_empty_testsets(test_campaign): ...@@ -355,17 +355,17 @@ def remove_empty_testsets(test_campaign):
#### RUN CAMPAIGN ##### #### RUN CAMPAIGN #####
def run_campaign(test_campaign, get_interactive_session, verb=3): def run_campaign(test_campaign, get_interactive_session, verb=3, ignore_globals=None):
if WINDOWS: if WINDOWS:
# Add a route to 127.0.0.1 and ::1 # Add a route to 127.0.0.1 and ::1
from scapy.arch.windows import route_add_loopback from scapy.arch.windows import route_add_loopback
route_add_loopback() route_add_loopback()
passed=failed=0 passed=failed=0
if test_campaign.preexec: if test_campaign.preexec:
test_campaign.preexec_output = get_interactive_session(test_campaign.preexec.strip())[0] test_campaign.preexec_output = get_interactive_session(test_campaign.preexec.strip(), ignore_globals=ignore_globals)[0]
for testset in test_campaign: for testset in test_campaign:
for t in testset: for t in testset:
t.output,res = get_interactive_session(t.test.strip()) t.output,res = get_interactive_session(t.test.strip(), ignore_globals=ignore_globals)
the_res = False the_res = False
try: try:
if res is None or res: if res is None or res:
...@@ -607,7 +607,7 @@ def usage(): ...@@ -607,7 +607,7 @@ def usage():
#### MAIN #### #### MAIN ####
def execute_campaign(TESTFILE, OUTPUTFILE, PREEXEC, NUM, KW_OK, KW_KO, DUMP, def execute_campaign(TESTFILE, OUTPUTFILE, PREEXEC, NUM, KW_OK, KW_KO, DUMP,
FORMAT, VERB, ONLYFAILED, CRC, autorun_func, pos_begin=0): FORMAT, VERB, ONLYFAILED, CRC, autorun_func, pos_begin=0, ignore_globals=None):
# Parse test file # Parse test file
test_campaign = parse_campaign_file(TESTFILE) test_campaign = parse_campaign_file(TESTFILE)
...@@ -637,7 +637,7 @@ def execute_campaign(TESTFILE, OUTPUTFILE, PREEXEC, NUM, KW_OK, KW_KO, DUMP, ...@@ -637,7 +637,7 @@ def execute_campaign(TESTFILE, OUTPUTFILE, PREEXEC, NUM, KW_OK, KW_KO, DUMP,
# Run tests # Run tests
test_campaign.output_file = OUTPUTFILE test_campaign.output_file = OUTPUTFILE
result = run_campaign(test_campaign, autorun_func[FORMAT], verb=VERB) result = run_campaign(test_campaign, autorun_func[FORMAT], verb=VERB, ignore_globals=None)
# Shrink passed # Shrink passed
if ONLYFAILED: if ONLYFAILED:
...@@ -672,6 +672,7 @@ def resolve_testfiles(TESTFILES): ...@@ -672,6 +672,7 @@ def resolve_testfiles(TESTFILES):
def main(argv): def main(argv):
import __builtin__ import __builtin__
ignore_globals = list(__builtin__.__dict__.keys()) + ["sys"]
# Parse arguments # Parse arguments
...@@ -815,7 +816,7 @@ def main(argv): ...@@ -815,7 +816,7 @@ def main(argv):
output, result, campaign = execute_campaign(open(TESTFILE), OUTPUTFILE, output, result, campaign = execute_campaign(open(TESTFILE), OUTPUTFILE,
PREEXEC, NUM, KW_OK, KW_KO, PREEXEC, NUM, KW_OK, KW_KO,
DUMP, FORMAT, VERB, ONLYFAILED, DUMP, FORMAT, VERB, ONLYFAILED,
CRC, autorun_func, pos_begin) CRC, autorun_func, pos_begin, ignore_globals)
runned_campaigns.append(campaign) runned_campaigns.append(campaign)
pos_begin = campaign.end_pos pos_begin = campaign.end_pos
if UNIQUE: if UNIQUE:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment