2010-06-29 19 views
6

Me pregunto si alguien tiene una solución elegante para buscar un vale de Kerberos válido usando Python. No estoy viendo de todos modos con kinit o klist que mostrará si un ticket está vencido con un código de retorno, pero podría ejecutar klist y usar una expresión regular para la salida.python: validar el ticket de kerberos

Respuesta

3

Tiene dos opciones: la primera es usar 'klist -s' y verificar el código de retorno. La opción más agradable es utilizar el módulo python-krbV:

import krbV 

def has_ticket(): 
    ''' 
    Checks to see if the user has a valid ticket. 
    ''' 
    ctx = krbV.default_context() 
    cc = ctx.default_ccache() 
    try: 
     princ = cc.principal() 
     retval = True 
    except krbV.Krb5Error: 
     retval = False 

    return retval 
+0

Tenga en cuenta que estos no son equivalente: klist -s también sale de cero si hay un ccache con un TGT, pero el TGT ha expirado. El código krbV anterior no verifica si el ticket ha expirado; solo que hay un caché en absoluto (leyendo el principal predeterminado de él). Y, el OP específicamente preguntó sobre la expiración del boleto. –

+1

¿Qué tal para Python 3? krbV no parece funcionar. – dmranck

+0

Uno, no compila. Dos, no responde la pregunta. No tiene información sobre si el ticket expiró o no. Aprenda a escribir las respuestas que realmente respondan la pregunta, en lugar de arrojar basura al azar. –

4

Otra opción es comprobar el estado de salida de 'klist -s' parece más corto y no utiliza krbV:

import subprocess 

def has_kerberos_ticket(): 
    return True if subprocess.call(['klist', '-s']) == 0 else False 
+1

Más sucintamente, 'return not no subprocess.call (['klist', '-s'])'? – scubbo

Cuestiones relacionadas