diff options
Diffstat (limited to 'ipapython/ipautil.py')
-rw-r--r-- | ipapython/ipautil.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index 22c8e2937..bed5435b5 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -42,6 +42,7 @@ import xmlrpclib import datetime import netaddr import time +import krbV from dns import resolver, rdatatype from dns.exception import DNSException @@ -1086,3 +1087,25 @@ def wait_for_open_socket(socket_name, timeout=0): time.sleep(1) else: raise e + +def kinit_hostprincipal(keytab, ccachedir, principal): + """ + Given a ccache directory and a principal kinit as that user. + + This blindly overwrites the current CCNAME so if you need to save + it do so before calling this function. + + Thus far this is used to kinit as the local host. + """ + try: + ccache_file = 'FILE:%s/ccache' % ccachedir + krbcontext = krbV.default_context() + ktab = krbV.Keytab(name=keytab, context=krbcontext) + princ = krbV.Principal(name=principal, context=krbcontext) + os.environ['KRB5CCNAME'] = ccache_file + ccache = krbV.CCache(name=ccache_file, context=krbcontext, primary_principal=princ) + ccache.init(princ) + ccache.init_creds_keytab(keytab=ktab, principal=princ) + return ccache_file + except krbV.Krb5Error, e: + raise StandardError('Error initializing principal %s in %s: %s' % (principal, keytab, str(e))) |