|
20 | 20 |
|
21 | 21 | import java.util.Date; |
22 | 22 |
|
| 23 | +import org.apache.cxf.jaxrs.ext.search.ConditionType; |
| 24 | +import org.apache.cxf.jaxrs.ext.search.SearchBean; |
23 | 25 | import org.apache.cxf.jaxrs.ext.search.SearchCondition; |
24 | 26 | import org.apache.cxf.jaxrs.ext.search.SearchParseException; |
| 27 | +import org.apache.cxf.jaxrs.ext.search.SimpleSearchCondition; |
25 | 28 | import org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser; |
26 | 29 |
|
27 | 30 | import org.junit.Ignore; |
@@ -86,6 +89,33 @@ public void testComplexQuery() throws SearchParseException { |
86 | 89 | assertEquals("(&(|(name=test)(level=18))(|(name=test1)(!level=19)))", ldap); |
87 | 90 | } |
88 | 91 |
|
| 92 | + @Test |
| 93 | + public void testLdapFilterInjectionViaUnencodedPropertyName() throws SearchParseException { |
| 94 | + SearchBean bean = new SearchBean(); |
| 95 | + bean.set("cn)(|(sn", "admin"); |
| 96 | + |
| 97 | + SearchCondition<SearchBean> filter = |
| 98 | + new SimpleSearchCondition<>(ConditionType.EQUALS, bean); |
| 99 | + LdapQueryVisitor<SearchBean> visitor = new LdapQueryVisitor<>(); |
| 100 | + filter.accept(visitor.visitor()); |
| 101 | + |
| 102 | + assertEquals("(cn\\29\\28|\\28sn=admin)", visitor.getQuery()); |
| 103 | + } |
| 104 | + |
| 105 | + @Test |
| 106 | + public void testLdapFilterInjectionViaUnencodedPropertyNameWithRawValue() throws SearchParseException { |
| 107 | + SearchBean bean = new SearchBean(); |
| 108 | + bean.set("cn)(|(sn", "admin*"); |
| 109 | + |
| 110 | + SearchCondition<SearchBean> filter = |
| 111 | + new SimpleSearchCondition<>(ConditionType.EQUALS, bean); |
| 112 | + LdapQueryVisitor<SearchBean> visitor = new LdapQueryVisitor<>(); |
| 113 | + visitor.setEncodeQueryValues(false); |
| 114 | + filter.accept(visitor.visitor()); |
| 115 | + |
| 116 | + assertEquals("(cn\\29\\28|\\28sn=admin*)", visitor.getQuery()); |
| 117 | + } |
| 118 | + |
89 | 119 |
|
90 | 120 | @Ignore |
91 | 121 | public static class Condition { |
|
0 commit comments