void ProcessLocalGroupMember(List <SPUserInfo> users, string machineName, string domainAndName) { DomainAndName names = new DomainAndName(domainAndName); if (string.Compare(names.Domain, machineName, true, CultureInfo.InvariantCulture) == 0) { // Same machine so is a local group IntPtr bufPtr = IntPtr.Zero; try { if (NetUserGetInfo(names.Domain, names.LoginName, 2, out bufPtr) == 0) { USER_INFO_2 user = new USER_INFO_2(); user = (USER_INFO_2)Marshal.PtrToStructure(bufPtr, typeof(USER_INFO_2)); SPUserInfo spUser = new SPUserInfo(); spUser.LoginName = domainAndName; spUser.Name = user.usri2_full_name; users.Add(spUser); } } finally { if (bufPtr != IntPtr.Zero) { NetApiBufferFree(bufPtr); } } } else { // Domain user try { using (DirectoryEntry root = new DirectoryEntry("LDAP://" + names.Domain)) { string filter = string.Format(CultureInfo.InvariantCulture, "(sAMAccountname={0})", names.LoginName); using (DirectorySearcher searcher = new DirectorySearcher(root, filter, searchAttributes, SearchScope.Subtree)) { ProcessSearchResults(searcher, users); } } } catch (COMException ex) { throw new DomainGroupEnumerationException(String.Format(culture.Culture, culture.Resources.DomainGroupEnumFailed, "LDAP://" + names.Domain), ex); } } }
SPUserInfo ProcessUser(SearchResult result, string distinguishedName) { SPUserInfo info; if (processed.TryGetValue(distinguishedName, out info) == false) { info = new SPUserInfo(); info.Name = ResultValue(result, "displayName"); if (string.IsNullOrEmpty(info.Name)) { info.Name = ResultValue(result, "name"); } info.Email = ResultValue(result, "mail"); byte[] sid = (byte[])result.Properties["objectSid"][0]; SecurityIdentifier identifier = new SecurityIdentifier(sid, 0); NTAccount account = (NTAccount)identifier.Translate(typeof(NTAccount)); info.LoginName = account.ToString(); processed.Add(distinguishedName, info); } return(info); }
public static void InitializeSiteCollection() { #if DEBUG TestSiteCollUri = new Uri("http://spsites/sites/" + TestContext.Parameters["TestSiteCollectionName"]); return; // Uncommented when debugging LDAPCP code from unit tests #endif logFileListener = new TextWriterTraceListener(TestContext.Parameters["TestLogFileName"]); Trace.Listeners.Add(logFileListener); Trace.AutoFlush = true; Trace.TraceInformation($"{DateTime.Now.ToString("s")} Start integration tests of {ClaimsProviderName} {FileVersionInfo.GetVersionInfo(Assembly.GetAssembly(typeof(ldapcp.LDAPCP)).Location).FileVersion}."); Trace.WriteLine($"{DateTime.Now.ToString("s")} DataFile_AllAccounts_Search: {DataFile_AllAccounts_Search}"); Trace.WriteLine($"{DateTime.Now.ToString("s")} DataFile_AllAccounts_Validate: {DataFile_AllAccounts_Validate}"); Trace.WriteLine($"{DateTime.Now.ToString("s")} TestSiteCollectionName: {TestContext.Parameters["TestSiteCollectionName"]}"); if (SPTrust == null) { Trace.TraceError($"{DateTime.Now.ToString("s")} SPTrust: is null"); } else { Trace.WriteLine($"{DateTime.Now.ToString("s")} SPTrust: {SPTrust.Name}"); } LDAPCPConfig config = LDAPCPConfig.GetConfiguration(UnitTestsHelper.ClaimsProviderConfigName, UnitTestsHelper.SPTrust.Name); if (config == null) { LDAPCPConfig.CreateConfiguration(ClaimsProviderConstants.CONFIG_ID, ClaimsProviderConstants.CONFIG_NAME, SPTrust.Name); } var service = SPFarm.Local.Services.GetValue <SPWebService>(String.Empty); SPWebApplication wa = service.WebApplications.FirstOrDefault(); if (wa != null) { Trace.WriteLine($"{DateTime.Now.ToString("s")} Web application {wa.Name} found."); SPClaimProviderManager claimMgr = SPClaimProviderManager.Local; string encodedClaim = claimMgr.EncodeClaim(TrustedGroup); SPUserInfo userInfo = new SPUserInfo { LoginName = encodedClaim, Name = TrustedGroupToAdd_ClaimValue }; // The root site may not exist, but it must be present for tests to run Uri rootWebAppUri = wa.GetResponseUri(0); if (!SPSite.Exists(rootWebAppUri)) { Trace.WriteLine($"{DateTime.Now.ToString("s")} Creating root site collection {rootWebAppUri.AbsoluteUri}..."); SPSite spSite = wa.Sites.Add(rootWebAppUri.AbsoluteUri, "root", "root", 1033, "STS#1", FarmAdmin, String.Empty, String.Empty); spSite.RootWeb.CreateDefaultAssociatedGroups(FarmAdmin, FarmAdmin, spSite.RootWeb.Title); SPGroup membersGroup = spSite.RootWeb.AssociatedMemberGroup; membersGroup.AddUser(userInfo.LoginName, userInfo.Email, userInfo.Name, userInfo.Notes); spSite.Dispose(); } if (!Uri.TryCreate(rootWebAppUri, TestSiteRelativePath, out TestSiteCollUri)) { Trace.TraceError($"{DateTime.Now.ToString("s")} Unable to generate Uri of test site collection from Web application Uri {rootWebAppUri.AbsolutePath} and relative path {TestSiteRelativePath}."); } if (!SPSite.Exists(TestSiteCollUri)) { Trace.WriteLine($"{DateTime.Now.ToString("s")} Creating site collection {TestSiteCollUri.AbsoluteUri}..."); SPSite spSite = wa.Sites.Add(TestSiteCollUri.AbsoluteUri, ClaimsProviderName, ClaimsProviderName, 1033, "STS#1", FarmAdmin, String.Empty, String.Empty); spSite.RootWeb.CreateDefaultAssociatedGroups(FarmAdmin, FarmAdmin, spSite.RootWeb.Title); SPGroup membersGroup = spSite.RootWeb.AssociatedMemberGroup; membersGroup.AddUser(userInfo.LoginName, userInfo.Email, userInfo.Name, userInfo.Notes); spSite.Dispose(); } else { using (SPSite spSite = new SPSite(TestSiteCollUri.AbsoluteUri)) { SPGroup membersGroup = spSite.RootWeb.AssociatedMemberGroup; membersGroup.AddUser(userInfo.LoginName, userInfo.Email, userInfo.Name, userInfo.Notes); } } } else { Trace.TraceError($"{DateTime.Now.ToString("s")} Web application was NOT found."); } }