From 2d1f2791688ced96b9d114870cb68e1d3e48a4bb Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Fri, 27 Jul 2007 18:09:28 +0000
Subject: [PATCH] Fix inconsistent Format Checking for ACI targattrfilter.
---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargAttrFiltersTestCase.java | 4 ++++
opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java | 19 +++++++++++++++++--
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
index e481b31..b2f02c6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
@@ -63,6 +63,13 @@
*/
private static final String ADD_OR_DEL_KEYWORD_GROUP = "(add|del)";
+ /*
+ * Regular expression used to check for valid expression separator.
+ */
+
+ private static final
+ String secondOpSeparator="\\)" + ZERO_OR_MORE_WHITESPACE + ",";
+
/**
* Regular expression used to match the second operation of the filter list.
* If the first was "add" this must be "del", if the first was "del" this
@@ -181,12 +188,20 @@
String message = getMessage(msgID, expression);
throw new AciException(msgID, message);
} else if (filterLists.length == 1) {
- //This check catches the case where there might not be a
- //',' character between the first filter list and the second.
+ //Check if the there is something like ") , deel=". A bad token
+ //that the regular expression didn't pick up.
+ String [] filterList2=subExpression.split(secondOpSeparator);
+ if(filterList2.length == 2) {
+ int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
+ String message = getMessage(msgID, expression);
+ throw new AciException(msgID, message);
+ }
String sOp="del";
if(getMask(firstOp) == TARGATTRFILTERS_DELETE)
sOp="add";
String rg= sOp + "=";
+ //This check catches the case where there might not be a
+ //',' character between the first filter list and the second.
if(subExpression.indexOf(rg) != -1) {
int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
String message = getMessage(msgID, expression);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargAttrFiltersTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargAttrFiltersTestCase.java
index 2fefdbd..79de52f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargAttrFiltersTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargAttrFiltersTestCase.java
@@ -49,6 +49,8 @@
return new Object[][] {
{"add=st:(st=*),del=st:(st=*)"},
{"add=st:(st=*) && cn:(cn=c*), del=st:(st=*) && sn:(sn=s*)"},
+ {"add=st:(st=*)"},
+ {"del=st:(st=*)"},
};
}
@@ -56,6 +58,8 @@
@DataProvider(name = "invalidStatements")
public Object[][] invalids() {
return new Object[][] {
+ {"add=st:(st=*),deeeel =st:(st=*)"},
+ {"add=st:(st=*),foo =st:(st=*)"},
{"add=st:(st=*),,,del=st:(st=*)"},
{"add=st:(st=*),dellll =st:(st=*)"},
{"add=st:(st=*)del=st:(st=*)"},
--
Gitblit v1.10.0