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
6
A
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
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
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. –
A co z Pythonem 3? krbV nie działa. – dmranck
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. –