Example #1
0
        private Expression <Func <LdapExtension, bool> > FilterExtension(LdapFilter filter)
        {
            var visitor = new LdapExtensionFilterVisitor();

            visitor.Visit(filter);
            return(visitor.Filter);
        }
Example #2
0
        private Expression <Func <LdapEvent, bool> > FilterEvent(LdapFilter filter)
        {
            var visitor = new LdapEventFilterVisitor();

            visitor.Visit(filter);
            return(visitor.Filter);
        }
Example #3
0
        public void Z_Complex_1()
        {
            // Arrange
            var expected = "(&(objectCategory=person)(objectClass=user)"
                           + "(!(userAccountControl:1.2.840.113556.1.4.803:=65536))"
                           + "(!(userAccountControl:1.2.840.113556.1.4.803:=2))"
                           + "(!samaccountname=gen-*)(!samaccountname=tst-*)"
                           + "(!samaccountname=adm-*)(!samaccountname=res-*)"
                           + "(!samaccountname=tmp-*)(!samaccountname=trn-*)"
                           + "(!samaccountname=app-*)(!samaccountname=svc-*)"
                           + "(!samaccountname=*test*)(!samaccountname=*$))";

            // Act
            var filter =
                LdapFilter.And(
                    new LdapFilter("objectCategory=person"),
                    new LdapFilter("objectClass=user"),
                    new LdapFilter("userAccountControl:1.2.840.113556.1.4.803:=65536").Not(),
                    new LdapFilter("userAccountControl:1.2.840.113556.1.4.803:=2").Not(),
                    new LdapFilter("samaccountname=gen-*").Not(),
                    new LdapFilter("samaccountname=tst-*").Not(),
                    new LdapFilter("samaccountname=adm-*").Not(),
                    new LdapFilter("samaccountname=res-*").Not(),
                    new LdapFilter("samaccountname=tmp-*").Not(),
                    new LdapFilter("samaccountname=trn-*").Not(),
                    new LdapFilter("samaccountname=app-*").Not(),
                    new LdapFilter("samaccountname=svc-*").Not(),
                    new LdapFilter("samaccountname=*test*").Not(),
                    new LdapFilter("samaccountname=*$").Not());

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #4
0
        public void CanParseFilter(string filter, string expected = null)
        {
            var ldapFilter = LdapFilter.Parse(filter);
            var text       = ldapFilter.ToString();

            Assert.Equal(expected ?? filter, text);
        }
Example #5
0
 /// <summary>
 /// Returns an LdapFilter for Users and contacts in a group.
 /// </summary>
 /// <param name="group">The group's Distinguished Name.</param>
 /// <returns>LdapFilter for the Users and Contacts.</returns>
 public static LdapFilter UsersContactsInGroup(DistinguishedName group) =>
 LdapFilter.And(
     new LdapFilter("objectCategory=person"),
     LdapFilter.Or(
         new LdapFilter("objectClass=contact"),
         new LdapFilter("objectClass=user")),
     new LdapFilter("memberOf", "=", $"{group}"));
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GroupPolicyObject"/> class.
        /// </summary>
        /// <param name="domainName">The Name of the Domain where the GPO resides.</param>
        /// <param name="nameOfGpo">The name of the GPO.</param>
        public GroupPolicyObject(string domainName, string nameOfGpo)
        {
            if (string.IsNullOrEmpty(domainName))
            {
                throw new ArgumentNullException(nameof(domainName));
            }

            if (string.IsNullOrEmpty(nameOfGpo))
            {
                throw new ArgumentNullException(nameof(nameOfGpo));
            }

            DomainName = domainName;
            Name       = nameOfGpo;
            string dn;

            try
            {
                var context = new DirectoryContext(DirectoryContextType.Domain, domainName);

                var domainObject = Domain.GetDomain(context).GetDirectoryEntry();

                dn = (string)domainObject.Properties["distinguishedName"][0];
                _log.Debug($"_DomainDN: {dn}");
            }
            catch (Exception ex)
            {
                _log.Error($"Could not find domain: {domainName}", ex);
                throw;
            }

            // Let look up the GPO and put the information into the properties
            _log.Debug($"Looking up GPO: {nameOfGpo}");

            try
            {
                var name   = $"CN=Policies,CN=System,{dn}";
                var path   = DirectoryServices.DistinguishedName.Parse(name);
                var filter = new LdapFilter("displayName", "=", nameOfGpo);

                using (var query = new LdapQuery(path, filter, false))
                {
                    var result = query.FindOne();

                    DistinguishedName = result.Properties["distinguishedName"][0] as string;
                    _log.Debug($"GPO DistinguishedName: {DistinguishedName}");
                }
            }
            catch (Exception ex)
            {
                _log.Error($"Could not find GPO: {nameOfGpo}. Exception: {ex.Message}", ex);
                throw;
            }
        }
Example #7
0
        public void Compound_Element_And_Append_Using_Single_String()
        {
            // Arrange
            var expected = "(&(cn=Babs J*)(sn=Jensen))";

            // Act
            var filter = new LdapFilter("cn=Babs J*").And("sn=Jensen", true);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #8
0
        public void Bitwise_Filter_Must_Be_A_Embedded_Filter_When_Not_Is_Used()
        {
            // Arrange
            var expected = "(!(UserAccountControl:1.2.840.113556.1.4.803:=65536))";

            // Act
            var filter = new LdapFilter("UserAccountControl:1.2.840.113556.1.4.803:=65536").Not();

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #9
0
        public static SearchResultCollection FindAllByUserName(this DirectorySearcher searcher, string accountFilder = "*", string givenNameFilter = "*", string surnameFilter = "*", string emailFilter = "*")
        {
            var filter = new LdapFilter(LdapQueryFilterBuilder.LdapFilterExpression.AND);

            filter.Add(new LdapQueryFilterCondition("objectClass", LdapQueryFilterCondition.LdapFilterOperators.EQUALTO, "user"));
            filter.Add(new LdapQueryFilterCondition("objectClass", LdapQueryFilterCondition.LdapFilterOperators.EQUALTO, "user"));

            searcher.Filter = $"(&(objectClass=user)(&(sAMAccountName={accountFilder})(givenName={givenNameFilter})(sn={surnameFilter})(Mail={emailFilter})))";

            return(searcher.FindAll());
        }
Example #10
0
        public void Single_Element_Filter_Using_Wildcard()
        {
            // Arrange
            var expected = "(cn=*)";

            // Act
            var filter = new LdapFilter("cn", "=", LdapFilter.Any);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #11
0
        public void Single_Element_Filter_With_Parenthesis()
        {
            // Arrange
            var expected = "(cn=Babs Jensen)";

            // Act
            var filter = new LdapFilter("(cn=Babs Jensen)");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #12
0
        public void Single_Element_Filter_Using_Individual_Strings()
        {
            // Arrange
            var expected = "(cn=Babs Jensen)";

            // Act
            var filter = new LdapFilter("cn", "=", "Babs Jensen");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #13
0
        public void Single_Element_Filter_Using_Less_Filter_Type()
        {
            // Arrange
            var expected = "(cn<=Babs Jensen)";

            // Act
            var filter = new LdapFilter("cn", LdapFilter.Less, "Babs Jensen");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #14
0
        public void Single_Element_Filter_Not()
        {
            // Arrange
            var expected = "(!samaccountname=*$)";

            // Act
            var filter = new LdapFilter("samaccountname=*$").Not();

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #15
0
        public void Compound_Element_Or_Using_Single_String()
        {
            // Arrange
            var expected = "(|(sn=Jensen)(cn=Babs J*))";

            // Act
            var filter = new LdapFilter("cn=Babs J*").Or("sn=Jensen");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #16
0
        public void Compound_Element_And_Using_Individual_Strings()
        {
            // Arrange
            var expected = "(&(sn=Jensen)(cn=Babs J*))";

            // Act
            var filter = new LdapFilter("cn=Babs J*").And("sn", "=", "Jensen");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #17
0
        public void Complex_Filter_1()
        {
            // Arrange
            var expected = "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))";

            // Act
            var filter = new LdapFilter("cn=Babs J*")
                         .Or("sn=Jensen")
                         .And("objectClass=Person");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #18
0
        public void Compound_Element_Or_Append_Using_LdapFilter()
        {
            // Arrange
            var expected = "(|(cn=Babs J*)(sn=Jensen))";

            var filter1 = new LdapFilter("sn=Jensen");

            // Act
            var filter = new LdapFilter("cn=Babs J*").Or(filter1, true);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #19
0
        public void Compound_Element_Not()
        {
            // Arrange
            var expected = "(!(|(cn=Tim Howes)(cn=Julian Easterling)))";

            // Act
            var filter = new LdapFilter("cn=Julian Easterling")
                         .Or("cn=Tim Howes")
                         .Not();

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #20
0
        public void Z_Complex_3()
        {
            // Arrange
            var expected = "(&(objectClass=organizationalUnit)(|(ou:dn:=Domain Controllers)(ou:dn:=Computers)))";

            // Act
            var filter = new LdapFilter("ou:dn:=Computers")
                         .Or("ou:dn:=Domain Controllers")
                         .And("objectClass=organizationalUnit");

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #21
0
        public void Compound_Element_And_Using_Single_String()
        {
            // Arrange

            // Act

            // Assert
            var expected = "(&(sn=Jensen)(cn=Babs J*))";

            var filter = new LdapFilter("cn=Babs J*").And("sn=Jensen");

            Assert.Equal(expected, filter.ToString());
        }
Example #22
0
        public void Compound_Element_And_Multiple_Filters()
        {
            // Arrange
            var expected = "(&(objectCategory=person)(objectClass=contact)(sn=Easterling))";
            var filter1  = new LdapFilter("objectCategory=person");
            var filter2  = new LdapFilter("objectClass=contact");
            var filter3  = new LdapFilter("sn=Easterling");

            // Act
            var filter = LdapFilter.And(filter1, filter2, filter3);

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Users_Who_Are_Locked_Out()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=user))"
                                    + "(userAccountControl:1.2.840.113556.1.4.803:=16))";

            // Act
            var filter = LdapFilter.And(
                ActiveDirectoryCommonFilters.Users,
                ActiveDirectoryCommonFilters.UserAccessControl(ADS_USER_FLAG.LOCKOUT));

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
        public void Users_Whose_Passwords_Do_Not_Expire()
        {
            // Arrange
            const string expected = "(&(&(objectCategory=person)(objectClass=user))"
                                    + "(userAccountControl:1.2.840.113556.1.4.803:=65536))";

            // Act
            var filter = LdapFilter.And(
                ActiveDirectoryCommonFilters.Users,
                ActiveDirectoryCommonFilters.UserAccessControl(ADS_USER_FLAG.DONT_EXPIRE_PASSWD));

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #25
0
        public void Z_Complex_2()
        {
            // Arrange
            var expected = "(&(objectCategory=person)(objectClass=contact)(|(sn=Easterling)(sn=Zivuku)))";

            // Act
            var filter =
                LdapFilter.And(
                    new LdapFilter("objectCategory=person"),
                    new LdapFilter("objectClass=contact"),
                    new LdapFilter("sn=Zivuku").Or("sn=Easterling"));

            // Assert
            Assert.Equal(expected, filter.ToString());
        }
Example #26
0
 public virtual void Visit(LdapFilter filter)
 {
     if (filter is LdapAndFilter and)
     {
         VisitAnd(and);
     }
     else if (filter is LdapOrFilter or)
     {
         VisitOr(or);
     }
     else if (filter is LdapNotFilter not)
     {
         VisitNot(not);
     }
     else if (filter is LdapEqualityFilter equality)
     {
         VisitEquality(equality);
     }
     else if (filter is LdapSubstringFilter substring)
     {
         VisitSubstring(substring);
     }
     else if (filter is LdapGreaterOrEqualFilter greaterOrEqual)
     {
         VisitGreaterOrEqual(greaterOrEqual);
     }
     else if (filter is LdapLessOrEqualFilter lessOrEqual)
     {
         VisitLessOrEqual(lessOrEqual);
     }
     else if (filter is LdapPresentFilter present)
     {
         VisitPresent(present);
     }
     else if (filter is LdapApproxMatchFilter approxMatch)
     {
         VisitApproxMatch(approxMatch);
     }
     else if (filter is LdapExtensibleMatchFilter extensibleMatch)
     {
         VisitExtensibleMatch(extensibleMatch);
     }
 }
Example #27
0
 private void LoadBaseDNData()
 {
     using (LdapConnHelper ldapConn = new LdapConnHelper(DomainName, LdapConnHelper.DefaultLdapPortNum, true, false))
     {
         ldapConn.TryConnection(new TimeSpan(0, 1, 0), CredentialCache.DefaultNetworkCredentials, 3, AuthType.Basic);
         if (ldapConn.IsConnected)
         {
             WriteTrace("Connected to: " + DomainName);
         }
         LdapFilter        ldapFilter = new LdapFilter(LdapFilter.AllObjects);
         LdapSearchRequest searchReq  = new LdapSearchRequest(RootOU, ldapFilter,
                                                              System.DirectoryServices.Protocols.SearchScope.OneLevel, null);
         SearchResponse searchResp = ldapConn.PerformSearch(searchReq);
         foreach (SearchResultEntry sre in searchResp.Entries)
         {
             DdBaseDN.Items.Add(sre.DistinguishedName);
         }
     }
 }
Example #28
0
 private void BtnSearch_Click(object sender, EventArgs e)
 {
     using (LdapConnHelper ldapConn = new LdapConnHelper(DomainName, LdapConnHelper.DefaultLdapPortNum, true, false))
     {
         ldapConn.TryConnection(new TimeSpan(0, 1, 0), CredentialCache.DefaultNetworkCredentials, 3, AuthType.Basic);
         if (ldapConn.IsConnected)
         {
             WriteTrace("Connected to: " + DomainName);
         }
         LdapFilter        ldapFilter = new LdapFilter(TxtSearchFilter.Text.Trim());
         LdapSearchRequest searchReq  = new LdapSearchRequest(DdBaseDN.Text, ldapFilter,
                                                              System.DirectoryServices.Protocols.SearchScope.Subtree, LdapSearchRequest.UserAttributes);
         SearchResponse searchResp = ldapConn.PerformSearch(searchReq);
         foreach (SearchResultEntry sre in searchResp.Entries)
         {
             LdapUserRecord usrRecord = new LdapUserRecord(sre);
             if (usrRecord.IsValidUser())
             {
                 WriteTrace(usrRecord.ToString());
             }
         }
     }
 }
Example #29
0
        public static SearchResultCollection FindAll(this DirectorySearcher searcher, LdapFilter filter)
        {
            var filterString = LdapQueryFilterBuilder.GetFilter(filter, out string error);

            searcher.Filter = filterString;

            return(searcher.FindAll());
        }
Example #30
0
 /// <summary>
 /// Returns an LdapFilter for Users that were created before the specified date.
 /// </summary>
 /// <param name="firstDate">The first date of the range.</param>
 /// <param name="secondDate">The second date of the range.</param>
 /// <returns>LdapFilter for the Users.</returns>
 public static LdapFilter UsersCreatedBetweenDates(DateTime firstDate, DateTime secondDate) =>
 Users.And(
     LdapFilter.And(
         new LdapFilter("whenCreated", ">=", AdDateTime.ToLdapDateTime(firstDate)),
         new LdapFilter("whenCreated", "<=", AdDateTime.ToLdapDateTime(secondDate))),
     true);