2013-01-11 203 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) 。 –