Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion gssapi-console.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

# interactive console with easy access to krb5 test harness stuff

from __future__ import print_function

import argparse
import os
import sys
Expand All @@ -25,6 +27,11 @@
parser.add_argument('--mech', default='krb5',
help='Which environment to setup up '
'(supports krb5 [default])')
parser.add_argument('-a, --attach', metavar='IDENTIFIER', nargs='?',
default=None, dest='attach',
help='Attach to an existing gssapi-console environment, '
'indicated by IDENTIFIER.')


PARSED_ARGS = parser.parse_args()

Expand All @@ -48,7 +55,7 @@
try:
# import the env
SAVED_ENV = copy.deepcopy(os.environ)
console = GSSAPIConsole(mech_cls, realm_args=realm_args)
console = GSSAPIConsole(mech_cls, realm_args=realm_args, attach=PARSED_ARGS.attach)
for k, v in console.realm.env.items():
os.environ[k] = v

Expand All @@ -58,6 +65,8 @@
if not PARSED_ARGS.force_interactive:
INTER = False

print('Session: {0}'.format(console.session))

with open(PARSED_ARGS.file) as src:
console.runsource(src.read(), src.name, 'exec')

Expand Down
18 changes: 15 additions & 3 deletions gssapi_console/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,21 @@
Type "help", "copyright", "credits" or "license" for more information about Python.

Functions for controlling the realm are available in `REALM`.
Session: {session}
Mechansim: {mech} ({driver}), Realm: {realm}, User: {user}, Host: {host}"""


class GSSAPIConsole(code.InteractiveConsole):
def __init__(self, driver_cls, use_readline=True, realm_args={}, *args, **kwargs):
def __init__(self, driver_cls, use_readline=True, realm_args={},
attach=None, *args, **kwargs):
code.InteractiveConsole.__init__(self, *args, **kwargs)

self._driver = driver_cls()
self.realm = self._driver.create_realm(realm_args)
if attach is None:
self.realm = self._driver.create_realm(realm_args)
else:
self.realm = self._driver.attach_to_realm(attach, realm_args)

self.locals['REALM'] = self.realm

self.runsource('import gssapi')
Expand All @@ -57,9 +63,14 @@ def stop(self):
def _add_readline(self):
self.runsource(READLINE_SRC, '<readline setup>', 'exec')

@property
def session(self):
return self._driver.identifier(self.realm)

@property
def banner_text(self):
return BANNER.format(ver=sys.version, platform=sys.platform,
session=self.session,
mech=self._driver.MECH_NAME,
driver=self._driver.PROVIDER_NAME,
realm=self.realm.realm,
Expand All @@ -70,4 +81,5 @@ def interact(self, banner=None):
if banner is None:
banner = self.banner_text

super(GSSAPIConsole, self).interact(banner)
# Python 2.7 uses old-style classes :-(
code.InteractiveConsole.interact(self, banner)
17 changes: 15 additions & 2 deletions gssapi_console/drivers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import os
import sys


Expand All @@ -9,6 +10,12 @@ def create_realm(self, realm_args):
return None

def destroy_realm(self, realm):
pass

def attach_to_realm(self, identifier, realm_args={}):
pass

def identifier(self, realm):
return None


Expand All @@ -17,11 +24,17 @@ class Krb5Console(GSSAPIConsoleDriver):
PROVIDER_NAME = 'MIT Kerberos 5'

def __init__(self):
__import__('gssapi.tests.k5test')
self._k5test = sys.modules['gssapi.tests.k5test']
__import__('k5test')
self._k5test = sys.modules['k5test']

def create_realm(self, realm_args):
return self._k5test.K5Realm(**realm_args)

def destroy_realm(self, realm):
realm.stop()

def attach_to_realm(self, identifier, realm_args={}):
return self._k5test.K5Realm(existing=identifier, **realm_args)

def identifier(self, realm):
return realm.tmpdir
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
},
install_requires=[
'gssapi',
'k5test',
'six'
]
)