Skip to content

Commit dabb66d

Browse files
committed
Add a driver for YALPT
YALPT (https://github.com/directxman12/yalpt) now support "environment drivers" which setup and teardown an environment for the console sessions. This commit adds a GSSAPI environment driver so that GSSAPI Console functionality can be used to run YALPT files.
1 parent 53524c4 commit dabb66d

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

gssapi_console/yalpt_driver.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import pkg_resources as pkgres
2+
import copy
3+
import os
4+
5+
class GSSAPIYalptDriver(object):
6+
DRIVER_NAME = "GSSAPI"
7+
BANNER = """Functions for controlling the realm are available in `REALM`.
8+
Mechansim: {mech} ({driver}), Realm: {realm}, User: {user}, Host: {host}"""
9+
10+
def __init__(self, args=None):
11+
self._realm_args = {}
12+
13+
if args is None:
14+
driver = 'krb5'
15+
else:
16+
args_parts = args.split(';')
17+
driver = args_parts[0]
18+
19+
if len(args_parts) > 1:
20+
realm_args_raw = args_parts[1]
21+
for arg in realm_args_raw.split(','):
22+
key, raw_val = arg.split('=')
23+
self._realm_args[key] = (raw_val.lower() == 'true')
24+
25+
try:
26+
driver_loader = next(
27+
pkgres.iter_entry_points('gssapi_console.drivers',
28+
name=driver))
29+
except StopIteration:
30+
raise ValueError("No such GSSAPI Console driver %s." % driver)
31+
32+
self._driver = driver_loader.load()()
33+
34+
self._saved_env = None
35+
self._realm = None
36+
37+
def setup(self):
38+
self._saved_env = copy.deepcopy(os.environ)
39+
self._realm = self._driver.create_realm(self._realm_args)
40+
for k, v in self._realm.env.items():
41+
os.environ[k] = v
42+
43+
return {'REALM': self._realm}
44+
45+
def teardown(self):
46+
if self._saved_env is not None:
47+
for k in copy.deepcopy(os.environ):
48+
if k in self._saved_env:
49+
os.environ[k] = self._saved_env[k]
50+
else:
51+
del os.environ[k]
52+
53+
self._saved_env = None
54+
55+
self._driver.destroy_realm(self._realm)
56+
57+
@property
58+
def banner(self):
59+
return self.BANNER.format(mech=self._driver.MECH_NAME,
60+
driver=self._driver.PROVIDER_NAME,
61+
realm=self._realm.realm,
62+
user=self._realm.user_princ,
63+
host=self._realm.host_princ)
64+

setup.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
'gssapi_console.drivers': [
3030
'krb5 = gssapi_console.drivers:Krb5Console',
3131
],
32+
'yalpt.env_drivers': [
33+
'gssapi = gssapi_console.yalpt_driver:GSSAPIYalptDriver',
34+
],
3235
},
3336
install_requires=[
3437
'gssapi',

0 commit comments

Comments
 (0)