2013-01-11 3 views
-1

사용자가 컴퓨터에 액세스 할 수 있는지 확인하려고합니다.Windows 사용자가 파이썬이 있는지 확인하십시오.

내가 설명 hereLogonUser를 사용하려고 해요 :

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') 

그러나 나는 name 또는 password로두고 어떤 (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인지 이해하지 못합니다. 질문은 파이썬 101에서 온 것이 아닙니다. 분명히 게시하기 전에 연구하려고했습니다. –

+0

코드가 완전히 다른 시점에 원래 질문 한 질문에 대답했기 때문에. 이제 완전히 다른 질문을하기 위해 편집합니다. 내 지금 삭제 된 답변 코드를 사용하십시오. –

답변

3

, 내가 사용하는 앱에서 성공적으로 사용하는 방법은 LOGON32_LOGON_INTERACTIVE 플래그 대신 LOGON32_LOGON_NETWORK 플래그를 사용하는 것입니다. 그러나 우리 제품이 수행하는 작업에 대해서는 Desktop Interactivity에 대한 특정 요구 사항이 있으며 실제로 결과에 영향을 줄 수있는 변경 사항이라고 생각됩니다.

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) . –

관련 문제