예제 #1
0
        public void DRSR_DRSQuerySitesByCost_cToSites_1_And_rgszToSites_NULL()
        {
            DrsrTestChecker.Check();
            DsSite[] dest = new DsSite[1];
            dest[0] = ((DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2]).Site;
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            BaseTestSite.Assert.AreEqual <uint>(0, ret, null);

            DRS_MSG_QUERYSITESREQ request = drsTestClient.CreateDRS_MSG_QUERYSITESREQ(
                ((DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC1]).Site.CN,
                1,       //cToSites: Invalid value
                null     //rgszToSites: Invalid value
                );

            uint?outVer;
            DRS_MSG_QUERYSITESREPLY?reply = null;

            BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "Begin to call IDL_DRSQuerySitesByCost");

            ret = drsTestClient.DRSClient.DrsQuerySitesByCost(
                EnvironmentConfig.DrsContextStore[EnvironmentConfig.Machine.WritableDC1],
                (uint)DRS_MSG_QUERYSITESREQ_Versions.V1,
                request,
                out outVer,
                out reply);

            BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "End call IDL_DRSQuerySitesByCost with return value " + ret);
            BaseTestSite.Assert.AreEqual <uint>((uint)Win32ErrorCode_32.ERROR_INVALID_PARAMETER, ret, "IDL_DRSQuerySitesByCost should return ERROR_INVALID_PARAMETER for a request with cToSites = 1, rgszToSites = null");
        }
예제 #2
0
        public void DRSR_DRSQuerySitesByCost_fromSite_Invalid()
        {
            DrsrTestChecker.Check();
            DsSite[] dest = new DsSite[1];
            dest[0] = ((DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2]).Site;
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            BaseTestSite.Assert.AreEqual <uint>(0, ret, null);

            string[] sites = new string[dest.Length];
            for (int i = 0; i < dest.Length; i++)
            {
                sites[i] = dest[i].CN;
            }
            DRS_MSG_QUERYSITESREQ request = drsTestClient.CreateDRS_MSG_QUERYSITESREQ(
                "InvalidFromSite",   //fromSite: Invalid value
                (uint)dest.Length,
                sites
                );

            uint?outVer;
            DRS_MSG_QUERYSITESREPLY?reply = null;

            BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "Begin to call IDL_DRSQuerySitesByCost");

            ret = drsTestClient.DRSClient.DrsQuerySitesByCost(
                EnvironmentConfig.DrsContextStore[EnvironmentConfig.Machine.WritableDC1],
                (uint)DRS_MSG_QUERYSITESREQ_Versions.V1,
                request,
                out outVer,
                out reply);

            BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "End call IDL_DRSQuerySitesByCost with return value " + ret);
            BaseTestSite.Assert.AreEqual <uint>((uint)Win32ErrorCode_32.ERROR_DS_OBJ_NOT_FOUND, ret, "IDL_DRSQuerySitesByCost should return ERROR_DS_OBJ_NOT_FOUND for a request with fromSite invalid");
        }
        public void DRSR_DRSQuerySitesByCost_From_Site1_To_Site2()
        {
            DrsrTestChecker.Check();
            DsSite[] dest = new DsSite[1];
            dest[0] = ((DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2]).Site;
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            BaseTestSite.Assert.AreEqual <uint>(0, ret, null);

            ret = drsTestClient.DrsQuerySitesByCost(EnvironmentConfig.Machine.WritableDC1, DRS_MSG_QUERYSITESREQ_Versions.V1, ((DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC1]).Site, dest);
            BaseTestSite.Assert.AreEqual <uint>(0, ret, "IDL_DRSQuerySItesByCost: Checking return value - got: {0}, expect: 0, should return 0x0 for a request for correct request", ret);
        }
        void VerifyCrackNamesListDomainsInSite(
            DsServer dc,
            DRS_MSG_CRACKREQ req,
            DRS_MSG_CRACKREPLY?reply)
        {
            string siteDn = req.V1.rpNames[0];
            DsSite site   = ldapAd.GetSite(dc, siteDn);

            string[] domains = new string[site.Domains.Length];

            testSite.Assert.IsTrue(
                reply.Value.V1.pResult[0].cItems == domains.Length,
                "IDL_DRSCrackNames: DS_LIST_DOMAINS_IN_SITE: wrong domain count, expect:{0}, got:{1}",
                domains.Length,
                reply.Value.V1.pResult[0].cItems
                );

            for (int i = 0; i < site.Domains.Length; ++i)
            {
                domains[i] = site.Domains[i].Name;
            }

            string[] drsrDomains = new string[reply.Value.V1.pResult[0].cItems];
            for (int i = 0; i < reply.Value.V1.pResult[0].cItems; ++i)
            {
                drsrDomains[i] = reply.Value.V1.pResult[0].rItems[i].pName;
                testSite.Assert.IsTrue(
                    reply.Value.V1.pResult[0].rItems[i].status == DS_NAME_ERROR.DS_NAME_NO_ERROR,
                    "IDL_DRSCrackNames: DS_LIST_DOMAINS_IN_SITE: return status should be 0, got {0}",
                    reply.Value.V1.pResult[0].rItems[i].status
                    );
            }

            testSite.Assert.IsTrue(
                DrsrHelper.IsStringArrayEqual(domains, drsrDomains),
                "IDL_DRSCrackNames: DS_LIST_DOMAINS_IN_SITE: failed to verify servers in site {0}",
                siteDn
                );
        }
        public DsSite GetSite(DsServer dc, string dn)
        {
            DsSite site = new DsSite();

            site.DN = dn;

            // servers
            // find all "server" objects under the site dn
            SearchResultEntryCollection results = null;
            ResultCode ret = Search(
                dc,
                dn,
                "(objectClass=server)",
                System.DirectoryServices.Protocols.SearchScope.Subtree,
                null,
                out results
                );

            List <DsServer> servers = new List <DsServer>();

            foreach (SearchResultEntry e in results)
            {
                DsServer srv = new DsServer();
                srv.NtdsDsaObjectName = e.DistinguishedName;
                servers.Add(srv);
            }
            site.Servers = servers.ToArray();

            // Look into every NTDS DSA object to find the domain it is in.
            List <string> domainNcs = new List <string>();

            foreach (DsServer s in site.Servers)
            {
                string[] ncs = LdapUtility.GetAttributeValuesString(
                    dc,
                    s.NtdsDsaObjectName,
                    "hasMasterNCs",
                    "(objectClass=nTDSDSA)",
                    System.DirectoryServices.Protocols.SearchScope.Subtree);
                if (ncs == null)
                {
                    continue;
                }
                foreach (string nc in ncs)
                {
                    bool newNc = true;
                    foreach (string oldNc in domainNcs)
                    {
                        if (oldNc == nc)
                        {
                            newNc = false;
                            break;
                        }
                    }
                    if (newNc)
                    {
                        domainNcs.Add(nc);
                    }
                }
            }

            /*
             * string[] domainNcs = LdapUtility.GetAttributeValuesString(
             *  dc,
             *  site.DN,
             *  "hasMasterNCs", //"msDS-HasDomainNCs",
             *  "(objectClass=nTDSDSA)",
             *  System.DirectoryServices.Protocols.SearchScope.Subtree);
             */

            bool isAdlds = !EnvironmentConfig.TestDS;

            if (domainNcs == null && isAdlds)
            {
                return(site);
            }

            // Eliminate ConfigNC and SchemaNC
            List <string> filteredDomainNcs = new List <string>();

            foreach (string d in domainNcs)
            {
                if (d.StartsWith("CN=Configuration") || d.StartsWith("CN=Schema"))
                {
                    continue;
                }
                filteredDomainNcs.Add(d);
            }

            List <DsDomain> domains = new List <DsDomain>();

            foreach (string tdn in filteredDomainNcs)
            {
                bool n = true;
                foreach (DsDomain d in domains)
                {
                    if (d.Name == tdn)
                    {
                        n = false;
                        break;
                    }
                }

                if (n)
                {
                    DsDomain nd;
                    if (isAdlds)
                    {
                        nd = new AdldsDomain();
                    }
                    else
                    {
                        nd = new AddsDomain();
                    }
                    nd.Name = tdn;
                    domains.Add(nd);
                }
            }
            site.Domains = domains.ToArray();
            return(site);
        }