2012-10-01 18 views
7

निम्नलिखित कोड बिना किसी समस्या के 3 महीने के लिए काम कर रहा था। आज से मुझे निम्न त्रुटि मिल रही है; "एक आमंत्रण के लक्ष्य से अपवाद को फेंक दिया गया है" और आंतरिक अपवाद; । "। पहुँच HRESULT से इनकार किया है (अपवाद: 0x80070005 (E_ACCESSDENIED)"एलडीएपी सेटपैसवर्ड एक्सेस अस्वीकार कर दिया गया है

प्रमाणीकरण समारोह काम करता है यहाँ मेरी कार्य हैं;

public bool Authenticate(string strUserName, string strPassword) 
    { 
     bool authenticated = false; 
     using (
       var entry = new DirectoryEntry("LDAP://myldapserver", strUserName + "@domain", strPassword, 
               AuthenticationTypes.Secure)) 
     { 
      try 
      { 
       object nativeObject = entry.NativeObject; 
       authenticated = true; 
      } 
      catch (DirectoryServicesCOMException ex) 
      { 
       return false; 
      } 

     } 
     return authenticated; 
    } 

और ChangePassword विधि;

public bool ChangePassword(string strUserName, string strOldPassword, string strNewPassword) 
    { 
     const long ADS_OPTION_PASSWORD_PORTNUMBER = 6; 
     const long ADS_OPTION_PASSWORD_METHOD = 7; 
     const int ADS_PASSWORD_ENCODE_REQUIRE_SSL = 0; 
     const int ADS_PASSWORD_ENCODE_CLEAR = 1; 
     string strPort = "636"; 
     int intPort; 
     intPort = Int32.Parse(strPort); 

     try 
     { 
      string strUserString = "domain" + @"\" + strUserName.Trim(); 

      var entry = new DirectoryEntry("LDAP://myldapserver", strUserString, strOldPassword, 
              AuthenticationTypes.Secure); 
      var search = new DirectorySearcher(entry); 
      string strFilter = "(SAMAccountName=" + strUserName + ")"; 
      search.Filter = strFilter; 
      SearchResult result = search.FindOne(); 
      DirectoryEntry user = result.GetDirectoryEntry(); 

      user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort }); 
      user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR }); 
      **user.Invoke("SetPassword", new object[] { strNewPassword });** 
      user.CommitChanges(); 
      user.Close(); 
     } 

     catch (Exception exception) 
     { 
      string msg = exception.InnerException.Message; 
      return false; 
     } 
     return true; 
    } 

यह जब मैं SetPassword प्रॉपर्टी का आह्वान करता हूं तो एक्सपेटियन फेंकता है। किसी भी मदद की सराहना की जाएगी।

+0

कौन सी लाइन असफल रही है? क्या विधि विफल रही है? –

+1

ChangePassword वह है जो लाइन उपयोगकर्ता पर विफल रहता है। इन्वोक ("सेटपासवर्ड", नई ऑब्जेक्ट [] {strNewPassword}); – user1595357

+0

आपके द्वारा शीर्ष पर पोस्ट किया गया संदेश, आंतरिक अपवाद है? मैं पूछता हूं क्योंकि आंतरिक अपवाद में वास्तविक COM अपवाद प्राप्त होता है। –

उत्तर

1

यहां वें है ई उदाहरण: -

PrincipalContext pr = new PrincipalContext(ContextType.Domain, "corp.local", "OU=" + OU + ",OU=Users,dc=corp,dc=local", username, password); 
UserPrincipal us = new UserPrincipal(pr); 

पासवर्ड

user.SetPassword("setPassword"); 

बदलने के लिए आप उपयोगकर्ता अगले लॉग ऑन पर पासवर्ड बदलने चाहिए चाहते हैं, तो आप इस तरह उपयोग कर सकते हैं।

user.ExpirePasswordNow(); 

यहाँ अपना पूरा कोड है: -

public static Boolean ResetPassword(string username, string password, string DomainId, string setpassword, Boolean UnlockAccount,Boolean NextLogon) 
{ 
    PrincipalContext pr = new PrincipalContext(ContextType.Domain, "corp.local", "dc=corp,dc=local", username, password); 
    UserPrincipal user = UserPrincipal.FindByIdentity(pr, DomainId); 

    Boolean flag = false; 
    if (user != null && user.Enabled == true) 
    { 
     if (UnlockAccount) 
     { 
      user.UnlockAccount(); 
     } 
     user.SetPassword(setpassword); 
     if (NextLogon) 
     { 
      user.ExpirePasswordNow(); 
     } 
     user.Save(); 
     flag = true; 
    } 
    else 
     { 
     flag = false; 
     } 
    user.Dispose(); 
    pr.Dispose(); 
    return flag; 
    } 

मैं, यहाँ एक अच्छा लेख मिला आप अपने तरीके से उपयोग करना चाहते हैं एक नज़र यहाँ है,

http://www.primaryobjects.com/cms/article66.aspx

+0

धन्यवाद, तरह होगा सर। – user1595357

+0

यह यू के लिए काम किया है? – RL89

+0

मैं परिणाम पोस्ट करेंगे यह काम करने के लिए कोशिश कर रहा हूँ,। – user1595357

संबंधित मुद्दे