2010-06-29 16 views
6

Je me demande si quelqu'un a une solution élégante pour vérifier un ticket Kerberos valide en utilisant Python. Je ne vois pas de toute façon avec kinit ou klist qui montrera si un ticket a expiré avec un code de retour mais je pourrais exécuter klist et utiliser une regex pour la sortie.python: valider ticket Kerberos

Répondre

3

Vous avez deux options: la première est d'utiliser 'klist -s' et de vérifier le code retour. L'option plus agréable est d'utiliser le module 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

Notez que ce ne sont pas equivalent: klist -s sort également non nul s'il y a un ccache avec un TGT, mais le TGT a expiré. Le code krbV ci-dessus ne vérifie pas si le ticket a expiré; seulement qu'il y a un ccache (en lisant le principal par défaut). Et, le PO a spécifiquement posé des questions sur l'expiration du ticket. –

+1

Qu'en est-il de Python 3? krbV ne semble pas fonctionner. – dmranck

+0

Un, il ne compile pas. Deuxièmement, cela ne répond pas à la question. Il n'a aucune information sur si le billet a expiré ou non. Apprenez à écrire des réponses qui répondent réellement à la question, au lieu de vomir des déchets aléatoires. –

4

Une autre option est de vérifier l'état de la sortie de « klist -s » semble plus courte et ne pas utiliser krbV:

import subprocess 

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

Plus succinctement, 'return pas subprocess.call (['klist', '-s'])'? – scubbo