2010-06-29 5 views
6

Zastanawiam się - jeśli ktoś ma eleganckie rozwiązanie do sprawdzania ważnego biletu Kerberos za pomocą Pythona. I tak nie widzę z kinit lub klist, który pokaże, czy bilet wygasł z kodem powrotu, ale mógłbym uruchomić klist i użyć wyrażenia regularnego dla wyjścia.python: sprawdź bilet Kerberos

Odpowiedz

3

Masz dwie opcje: pierwszą jest użycie "klist -s" i sprawdzenie kodu powrotu. Ładniejszy opcją jest użycie modułu 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

Należy zauważyć, że nie są one odpowiednik: klist -s również kończy działanie niezerowe, jeśli istnieje cache z TGT, ale TGT wygasł. Powyższy kod krbV nie sprawdza, czy bilet wygasł; tylko, że w ogóle istnieje cache (przez odczytanie domyślnej wartości głównej z niego). A PO szczegółowo zapytał o wygaśnięcie biletu. –

+1

A co z Pythonem 3? krbV nie działa. – dmranck

+0

Po pierwsze, nie kompiluje się. Po drugie, nie odpowiada na pytanie. Nie ma żadnych informacji o tym, czy bilet wygasł, czy nie. Naucz się pisać odpowiedzi, które faktycznie odpowiadają na pytanie, zamiast wyrzucać losowe śmieci. –

4

Inną opcją jest, aby sprawdzić status wyjścia „klist -s” wygląda krótszy i nie używa krbV:

import subprocess 

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

Bardziej zwięźle: 'return not not not subprocess.call (['klist', '-s'])'? – scubbo