protected override void FillResolve(Uri context, string[] entityTypes,
                                            string resolveInput, List <Microsoft.SharePoint.WebControls.PickerEntity> resolved)
        {
            //LDAPUser user = LDAPHelper.FindExact(resolveInput);
            LDAPUser user = LDAPHelper.FindExactMultipleOUs(resolveInput);

            if (null != user)
            {
                PickerEntity entity = GetPickerEntity(user);
                resolved.Add(entity);
            }
        }
        public static LDAPUser FindExactMultipleOUs(string pattern)
        {
            LDAPUser ret = null;
            string   ldapValueInPropertyBag
                = Utility.GetPropertyBagValue(Constants.PROPERTY_BAG_KEY_NAME, true);
            List <string> ldapPaths
                = Utility.SplitAndAppendOU(ldapValueInPropertyBag, CustomLDAPBasePath);

            foreach (var path in ldapPaths)
            {
                ret = FindExact(path, pattern);
                if (ret != null)
                {
                    break;
                }
            }
            return(ret);
        }
        private PickerEntity GetPickerEntity(LDAPUser user)
        {
            PickerEntity entity = CreatePickerEntity();

            //entity.Claim = new SPClaim(LDAPClaimType, user.Mail, LDAPClaimValueType,
            //    SPOriginalIssuers.Format(SPOriginalIssuerType.Forms, SPTrustedIdentityTokenIssuerName));
            entity.Claim = new SPClaim(LDAPClaimType, user.Mail, LDAPClaimValueType,
                                       SPOriginalIssuers.Format(SPOriginalIssuerType.Forms, SPTrustedIdentityTokenIssuerName));
            //entity.Description = user.DisplayName;
            //entity.DisplayText = user.DisplayName;
            entity.Description = user.sAMAccountName;
            entity.DisplayText = user.Mail;
            //entity.EntityData[PeopleEditorEntityDataKeys.DisplayName] = user.DisplayName;
            entity.EntityData[PeopleEditorEntityDataKeys.DisplayName] = user.Mail;
            //entity.EntityData[PeopleEditorEntityDataKeys.Email] = user.Mail;
            entity.EntityData[PeopleEditorEntityDataKeys.Email]       = user.Mail;
            entity.EntityData[PeopleEditorEntityDataKeys.AccountName] = user.sAMAccountName;
            entity.EntityType = SPClaimEntityTypes.User;
            entity.IsResolved = true;
            return(entity);
        }
        public static LDAPUser FindExact(string path, string pattern)
        {
            LDAPUser ret = null;

            //Run with elevated privileges to get the context of the service account
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                //TODO: Where to store the LDAP string?
                using (DirectoryEntry entry = new DirectoryEntry(Constants.LDAP_PREFIX + path))
                {
                    using (DirectorySearcher ds = new DirectorySearcher(entry))
                    {
                        ds.PropertiesToLoad.Add("displayName");
                        ds.PropertiesToLoad.Add("sAMAccountName");
                        ds.PropertiesToLoad.Add("givenName");
                        ds.PropertiesToLoad.Add("sn");
                        ds.PropertiesToLoad.Add("mail");

                        ds.Filter = "(|((displayName=" + pattern + ")(sAMAccountName=" + pattern + ")(givenName=" + pattern + ")(sn=" + pattern + ")(mail=" + pattern + ")))";

                        SearchResult result = ds.FindOne();
                        if (null != result)
                        {
                            ret = new LDAPUser
                            {
                                DisplayName    = result.Properties["displayName"][0].ToString(),
                                sAMAccountName = result.Properties["sAMAccountName"][0].ToString(),
                                //GivenName = result.Properties["givenName"][0].ToString(),
                                //SurName = result.Properties["sn"][0].ToString(),
                                Mail      = result.Properties["mail"][0].ToString(),
                                GivenName = result.Properties["sAMAccountName"][0].ToString(),
                                SurName   = result.Properties["sAMAccountName"][0].ToString(),
                                //Mail = result.Properties["sAMAccountName"][0].ToString()
                            };
                        }
                    }
                }
            });
            return(ret);
        }