2010-06-29 36 views
6

Tôi tự hỏi - nếu có ai có giải pháp thanh lịch để kiểm tra vé Kerberos hợp lệ bằng cách sử dụng Python. Tuy nhiên, tôi không thấy bất cứ điều gì với kinit hoặc klist sẽ hiển thị nếu vé hết hạn với mã trả lại nhưng tôi có thể chạy klist và sử dụng regex cho đầu ra.python: xác thực vé kerberos

Trả lời

3

Bạn có hai tùy chọn: đầu tiên là sử dụng 'klist -s' và kiểm tra mã trả lại. Các tùy chọn đẹp hơn là sử dụng mô-đun 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

Lưu ý rằng đây không phải là tương đương: klist -s cũng thoát ra khác 0 nếu có một ccache với TGT, nhưng TGT đã hết hạn. Mã krbV ở trên không kiểm tra xem vé đã hết hạn hay chưa; chỉ có một ccache ở tất cả (bằng cách đọc hiệu trưởng mặc định từ nó). Và, OP đặc biệt hỏi về vé hết hạn. –

+1

Điều gì về Python 3? krbV dường như không hoạt động. – dmranck

+0

Một, nó không biên dịch. Hai, nó không trả lời câu hỏi. Nó không có bất kỳ thông tin nào về việc vé có hết hạn hay không. Tìm hiểu để viết câu trả lời thực sự trả lời câu hỏi, thay vì phun một số rác ngẫu nhiên. –

4

Một lựa chọn khác là để kiểm tra trạng thái thoát của 'klist -s' trông ngắn hơn và không sử dụng krbV:

import subprocess 

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

Ngắn gọn hơn, 'trả về không phải là subprocess.call (['klist', '-s'])'? – scubbo

Các vấn đề liên quan