Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# LDAP SetPassword throws The RPC server is unavailable

I am trying to create a new user -> set password and enable account .

earlier i was using 1 single object , but after looking at a few posts i decided to use 'using' for 3 different operations

        string strDisplayName = txtFirstName.Text + " " + txtLastName.Text;
        string strUser = txtLoginName.Text;

        string pw = "pass@123";


        using (var objADAM = new DirectoryEntry("LDAP://" + adlink + "/CN=Users,DC=SS,DC=COM", "ss\\luser", "pass@123", AuthenticationTypes.Secure))
        {


            const long ADS_OPTION_PASSWORD_PORTNUMBER = 6;
            const long ADS_OPTION_PASSWORD_METHOD = 7;

            const int ADS_PASSWORD_ENCODE_CLEAR = 1;
            string strPort = "389";
            int intPort = Int32.Parse(strPort);

            using (var objUser = objADAM.Children.Add("CN=" + strUser, "user"))
            {
                objUser.Properties["sAMAccountName"].Add(strUser);
                objUser.CommitChanges();
            }
        }

        using (var user = new DirectoryEntry("LDAP://" + adlink + "/CN=" + strUser + ",CN=Users,DC=SS,DC=COM", "ss\\rluser", "pass@123"))
        {
            user.Invoke("SetPassword", new object[] { "password" });
            user.CommitChanges();
        }



        using (var user = new DirectoryEntry("LDAP://" + adlink + "/CN=" + strUser + ",CN=Users,DC=SS,DC=COM", "ss\\rluser", "pass@123"))
        {

            //Enable account and change password on first logon flag
            user.Properties["userAccountControl"].Value = 0x200;
            user.Properties["pwdLastSet"].Value = 0;
            user.CommitChanges();

        }

I must mention, that i am outside the domian, and trying to connect to a remote AD on another domain . The credential's passed however are the ADMIN

The user creation goes on smoothly (after some hiccups with port opening & LDAP connections) , but the issue occurs when the invoke ->setpassword is called .

The error is :"the RPC server is unavailable " , just to make sure i am not doing something wrong in my code, i downloaded a LDAP admin tool and tried to reset the password of an existing user ->same error

steps -checked the RPC service running -opened RPC ports -135 ,blah blah..basically every port there is to open :|

any help is appreciated .

Thanks Rajat

like image 814
Rajat banerjee Avatar asked Nov 11 '22 20:11

Rajat banerjee


1 Answers

For example:

            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://dnsname.domain.com:389/OU=Companies;

Microsoft recommends accessing using DNS. if the machine you are accessing is connected to a different domain, you must specify it as "ip dnsname" in the hosts file in the "C:\Windows\System32\drivers\etc " directory.

like image 182
ban Avatar answered Jan 04 '23 03:01

ban