2013-01-11 121 views
-1

我正在嘗試驗證用戶是否有權訪問機器。檢查Windows用戶是否存在python

我試圖用LogonUser描述here

logging.info("checking credentials") 
    try: 
     win32security.LogonUser (
      name, 
      domain, 
      password, 
      win32security.LOGON32_LOGON_NETWORK, 
      win32security.LOGON32_PROVIDER_DEFAULT 
     ) 
    except win32security.error, e: 
     logging.warn(e) 
     raise e 
    else: 
     logging.info('pass') 

但是無論我把爲namepassword(說domain = None)它總是通過。

我錯過了什麼嗎?

UPDATE:重現:

import win32security 

print win32security.LogonUser (
       "asdasdasdasdfagf", 
       None, 
       "asdasdasdasdasda", 
       win32security.LOGON32_LOGON_NETWORK, 
       win32security.LOGON32_PROVIDER_DEFAULT 
      ) 

輸出:

<PyHANDLE at 34009576 (276)> 
+0

那麼,你的編輯肯定會改變這個問題!謝謝你浪費我的時間。 –

+0

@DavidHeffernan,我不太明白爲什麼-1。這個問題不是來自Python 101.很明顯,我在發佈之前試圖進行研究。 –

+0

因爲我回答了你最初詢問代碼完全不同的問題。現在你編輯問一個完全不同的問題。使用我現在刪除的答案中的代碼。 –

回答

3

雖然我懷疑它實際上是你以後的答案,唯一的區別我可以爲您做什麼測試之間看,並且我在使用的應用程序中成功的方式是使用LOGON32_LOGON_NETWORK標誌而不是LOGON32_LOGON_INTERACTIVE標誌。對於我們的產品所做的事情,我們對桌面交互性有特定的要求,我懷疑它實際上是一個會影響結果的變化。

def testLogin(self): 
    try: 
    LogonUser(self.wrappers['User'].GetValue(), 
       self.wrappers['Domain'].GetValue(), 
       self.wrappers['Password'].GetRawValue(), 
       LOGON32_LOGON_INTERACTIVE, 
       LOGON32_PROVIDER_DEFAULT) 
    RevertToSelf() 
    except Exception, e: 
    wx.MessageBox(unicode(e), _("Error")) 
    return False 
    return True 

None域值應該是當前域,所以如果你是實實在在地能夠與您的系統上運行此代碼的任何用戶名和密碼,那麼無論你的系統有問題,或者您的域名有問題。

+0

太棒了!謝謝!使用'win32security.LOGON32_LOGON_INTERACTIVE'它實際上失敗,憑證錯誤,並且與LOCAL和DOMAIN帳戶一起使用! –

+0

我真的沒有得到問題的根本原因:也許這是域配置不正確(我爲一些測試創建了一個與AD DS一起)或環境(我的管理員有完整的企業版權,它是Windows 2008 R2) 。 –