You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2013/04/10 06:15:16 UTC
svn commit: r1466326 - in /portals/jetspeed-2/portal/trunk: ./
components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/
components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/
components/jetspeed-page-ma...
Author: rwatler
Date: Wed Apr 10 04:15:16 2013
New Revision: 1466326
URL: http://svn.apache.org/r1466326
Log:
Update apa-webcontent version to 1.4-SNAPSHOT
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/document/psml/CastorFileSystemDocumentHandler.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestMappings.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureCastorXmlPageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureDatabasePageManager.java
portals/jetspeed-2/portal/trunk/pom.xml
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/SecurityConstraintsImpl.java Wed Apr 10 04:15:16 2013
@@ -16,14 +16,18 @@
*/
package org.apache.jetspeed.om.page.impl;
-import java.util.Iterator;
-import java.util.List;
-
import org.apache.jetspeed.om.common.SecurityConstraints;
import org.apache.jetspeed.om.page.PageSecurity;
import org.apache.jetspeed.om.page.SecurityConstraintImpl;
-import org.apache.jetspeed.om.page.SecurityConstraintsDef;
+import org.apache.jetspeed.om.page.SecurityConstraintsRefExpression;
+import org.apache.jetspeed.om.page.SecurityConstraintsRefParser;
import org.apache.jetspeed.page.impl.DatabasePageManagerUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
/**
* SecurityConstraintsImpl
@@ -33,6 +37,8 @@ import org.apache.jetspeed.page.impl.Dat
*/
public class SecurityConstraintsImpl implements SecurityConstraints
{
+ private final static Logger log = LoggerFactory.getLogger(SecurityConstraintsImpl.class);
+
private String owner;
private List constraints;
private List constraintsRefs;
@@ -120,72 +126,100 @@ public class SecurityConstraintsImpl imp
return;
}
- // skip missing or empty constraints: permit all access
- List checkConstraints = getAllSecurityConstraints(pageSecurity);
- if ((checkConstraints != null) && !checkConstraints.isEmpty())
- {
- // test each action, constraints check passes only
- // if all actions are permitted for principals
- Iterator actionsIter = actions.iterator();
- while (actionsIter.hasNext())
+ try
+ {
+ // skip missing or empty constraints: permit all access
+ List checkConstraints = getAllSecurityConstraints(pageSecurity);
+ if ((checkConstraints != null) && !checkConstraints.isEmpty())
{
- // check each action:
- // - if any actions explicity permitted, (including owner),
- // assume no permissions are permitted by default
- // - if all constraints do not specify a permission, assume
- // access is permitted by default
- String action = (String)actionsIter.next();
- boolean actionPermitted = false;
- boolean actionNotPermitted = false;
- boolean anyActionsPermitted = (getOwner() != null);
-
- // check against constraints
- Iterator checkConstraintsIter = checkConstraints.iterator();
- while (checkConstraintsIter.hasNext())
+ // test each action, constraints check passes only
+ // if all actions are permitted for principals
+ Iterator actionsIter = actions.iterator();
+ while (actionsIter.hasNext())
{
- SecurityConstraintImpl constraint = (SecurityConstraintImpl)checkConstraintsIter.next();
-
- // if permissions specified, attempt to match constraint
- if (constraint.getPermissions() != null)
+ // check each action:
+ // - if any actions explicitly permitted, (including owner),
+ // assume no permissions are permitted by default
+ // - if all constraints do not specify a permission or an
+ // expression, assume access is permitted by default
+ String action = (String)actionsIter.next();
+ boolean actionPermitted = false;
+ boolean actionNotPermitted = false;
+ boolean anyActionsPermitted = (getOwner() != null);
+
+ // check against constraints and constraint ref expressions
+ Iterator checkConstraintsIter = checkConstraints.iterator();
+ while (checkConstraintsIter.hasNext())
{
- // explicit actions permitted
- anyActionsPermitted = true;
+ Object constraintOrExpression = checkConstraintsIter.next();
+ if (constraintOrExpression instanceof SecurityConstraintImpl)
+ {
+ // check constraint
+ SecurityConstraintImpl constraint = (SecurityConstraintImpl)constraintOrExpression;
- // test action permission match and user/role/group principal match
- if (constraint.actionMatch(action) &&
- constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, true))
+ // if permissions specified, attempt to match constraint
+ if (constraint.getPermissions() != null)
+ {
+ // explicit actions permitted
+ anyActionsPermitted = true;
+
+ // test action permission match and user/role/group principal match
+ if (constraint.actionMatch(action) &&
+ constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, true))
+ {
+ actionPermitted = true;
+ break;
+ }
+ }
+ else
+ {
+ // permissions not specified: not permitted if any principal matched
+ if (constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, false))
+ {
+ actionNotPermitted = true;
+ break;
+ }
+ }
+ }
+ else if (constraintOrExpression instanceof SecurityConstraintsRefExpression)
{
- actionPermitted = true;
- break;
+ // check expression
+ SecurityConstraintsRefExpression expression = (SecurityConstraintsRefExpression)constraintOrExpression;
+
+ // assume actions are permitted in expression
+ anyActionsPermitted = true;
+
+ // check expression with action permission and user/role/group principals
+ if (expression.checkExpression(action, userPrincipals, rolePrincipals, groupPrincipals))
+ {
+ actionPermitted = true;
+ break;
+ }
}
}
- else
+
+ // fail if any action not permitted
+ if ((!actionPermitted && anyActionsPermitted) || actionNotPermitted)
{
- // permissions not specified: not permitted if any principal matched
- if (constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, false))
- {
- actionNotPermitted = true;
- break;
- }
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted.");
}
}
-
- // fail if any action not permitted
- if ((!actionPermitted && anyActionsPermitted) || actionNotPermitted)
+ }
+ else
+ {
+ // fail for any action if owner specified
+ // since no other constraints were found
+ if ((getOwner() != null) && !actions.isEmpty())
{
- throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted.");
+ String action = (String)actions.get(0);
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted, (not owner).");
}
}
}
- else
+ catch (Exception e)
{
- // fail for any action if owner specified
- // since no other constraints were found
- if ((getOwner() != null) && !actions.isEmpty())
- {
- String action = (String)actions.get(0);
- throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted, (not owner).");
- }
+ log.error("Security constraints check exception: "+e);
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Exception detected: "+e);
}
}
@@ -202,7 +236,8 @@ public class SecurityConstraintsImpl imp
* getAllSecurityConstraints
*
* @param pageSecurity page security definitions
- * @return all security constraints
+ * @return all security constraints and constraints ref expressions
+ * @throws RuntimeException if expression parsing error occurs
*/
private synchronized List getAllSecurityConstraints(PageSecurity pageSecurity)
{
@@ -213,12 +248,12 @@ public class SecurityConstraintsImpl imp
}
// construct new ordered security constraints list
- allConstraints = DatabasePageManagerUtils.createList();
+ List newAllConstraints = new ArrayList();
// add any defined security constraints
if ((getSecurityConstraints() != null) && !getSecurityConstraints().isEmpty())
{
- allConstraints.addAll(securityConstraints);
+ newAllConstraints.addAll(securityConstraints);
}
// add any security constraints references
@@ -227,11 +262,11 @@ public class SecurityConstraintsImpl imp
List referencedConstraints = dereferenceSecurityConstraintsRefs(getSecurityConstraintsRefs(), pageSecurity);
if (referencedConstraints != null)
{
- allConstraints.addAll(referencedConstraints);
+ newAllConstraints.addAll(referencedConstraints);
}
}
- // add any global decurity constraints references
+ // add any global security constraints references
if (pageSecurity != null)
{
List globalConstraintsRefs = pageSecurity.getGlobalSecurityConstraintsRefs();
@@ -240,12 +275,12 @@ public class SecurityConstraintsImpl imp
List referencedConstraints = dereferenceSecurityConstraintsRefs(globalConstraintsRefs, pageSecurity);
if (referencedConstraints != null)
{
- allConstraints.addAll(referencedConstraints);
+ newAllConstraints.addAll(referencedConstraints);
}
}
}
-
- return allConstraints;
+
+ return allConstraints = newAllConstraints;
}
/**
@@ -260,9 +295,10 @@ public class SecurityConstraintsImpl imp
/**
* dereferenceSecurityConstraintsRefs
*
- * @param constraintsRefs contstraints references to be dereferenced
+ * @param constraintsRefs constraints references to be dereferenced
* @param pageSecurity page security definitions
- * @return security constraints
+ * @return security constraints and constraints ref expressions
+ * @throws RuntimeException if expression parsing error occurs
*/
private List dereferenceSecurityConstraintsRefs(List constraintsRefs, PageSecurity pageSecurity)
{
@@ -274,17 +310,34 @@ public class SecurityConstraintsImpl imp
while (constraintsRefsIter.hasNext())
{
String constraintsRef = (String)constraintsRefsIter.next();
- SecurityConstraintsDef securityConstraintsDef = pageSecurity.getSecurityConstraintsDef(constraintsRef);
- if ((securityConstraintsDef != null) && (securityConstraintsDef.getSecurityConstraints() != null))
+ // parse constraints ref and return constraints/constraints ref expressions
+ Object constraintsOrExpression = SecurityConstraintsRefParser.parse(constraintsRef, pageSecurity);
+ if (constraintsOrExpression instanceof List)
{
if (constraints == null)
{
- constraints = DatabasePageManagerUtils.createList();
+ constraints = new ArrayList();
}
- constraints.addAll(securityConstraintsDef.getSecurityConstraints());
+ constraints.addAll((List)constraintsOrExpression);
+ }
+ else if (constraintsOrExpression instanceof SecurityConstraintsRefExpression)
+ {
+ if (constraints == null)
+ {
+ constraints = new ArrayList();
+ }
+ constraints.add(constraintsOrExpression);
+ }
+ else if (constraintsOrExpression != null)
+ {
+ throw new RuntimeException("Unexpected security constraints ref parser result");
}
}
}
+ else
+ {
+ throw new RuntimeException("Page security definitions not available");
+ }
return constraints;
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsImpl.java Wed Apr 10 04:15:16 2013
@@ -16,18 +16,19 @@
*/
package org.apache.jetspeed.om.page.psml;
+import org.apache.jetspeed.om.common.SecurityConstraints;
+import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.SecurityConstraintImpl;
+import org.apache.jetspeed.om.page.SecurityConstraintsRefExpression;
+import org.apache.jetspeed.om.page.SecurityConstraintsRefParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.jetspeed.om.common.SecurityConstraints;
-import org.apache.jetspeed.om.page.PageSecurity;
-import org.apache.jetspeed.om.page.SecurityConstraintImpl;
-import org.apache.jetspeed.om.page.SecurityConstraintsDef;
-
/**
* <p>
* SecurityConstraintsImpl
@@ -171,63 +172,101 @@ public class SecurityConstraintsImpl imp
return;
}
- // skip missing or empty constraints: permit all access
- List checkConstraints = getAllSecurityConstraints(pageSecurity);
- if ((checkConstraints != null) && !checkConstraints.isEmpty())
+ try
{
- // test each action, constraints check passes only
- // if all actions are permitted for principals
- Iterator actionsIter = actions.iterator();
- while (actionsIter.hasNext())
+ // skip missing or empty constraints: permit all access
+ List checkConstraints = getAllSecurityConstraints(pageSecurity);
+ if ((checkConstraints != null) && !checkConstraints.isEmpty())
{
- // check each action:
- // - if any actions explicity permitted, assume no permissions
- // are permitted by default
- // - if all constraints do not specify a permission, assume
- // access is permitted by default
- String action = (String)actionsIter.next();
- boolean actionPermitted = false;
- boolean actionNotPermitted = false;
- boolean anyActionsPermitted = false;
-
- // check against constraints
- Iterator checkConstraintsIter = checkConstraints.iterator();
- while (checkConstraintsIter.hasNext())
+ // test each action, constraints check passes only
+ // if all actions are permitted for principals
+ Iterator actionsIter = actions.iterator();
+ while (actionsIter.hasNext())
{
- SecurityConstraintImpl constraint = (SecurityConstraintImpl)checkConstraintsIter.next();
-
- // if permissions specified, attempt to match constraint
- if (constraint.getPermissions() != null)
+ // check each action:
+ // - if any actions explicitly permitted, (including owner),
+ // assume no permissions are permitted by default
+ // - if all constraints do not specify a permission or an
+ // expression, assume access is permitted by default
+ String action = (String)actionsIter.next();
+ boolean actionPermitted = false;
+ boolean actionNotPermitted = false;
+ boolean anyActionsPermitted = (getOwner() != null);
+
+ // check against constraints and constraint ref expressions
+ Iterator checkConstraintsIter = checkConstraints.iterator();
+ while (checkConstraintsIter.hasNext())
{
- // explicit actions permitted
- anyActionsPermitted = true;
+ Object constraintOrExpression = checkConstraintsIter.next();
+ if (constraintOrExpression instanceof SecurityConstraintImpl)
+ {
+ // check constraint
+ SecurityConstraintImpl constraint = (SecurityConstraintImpl)constraintOrExpression;
- // test action permission match and user/role/group principal match
- if (constraint.actionMatch(action) &&
- constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, true))
+ // if permissions specified, attempt to match constraint
+ if (constraint.getPermissions() != null)
+ {
+ // explicit actions permitted
+ anyActionsPermitted = true;
+
+ // test action permission match and user/role/group principal match
+ if (constraint.actionMatch(action) &&
+ constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, true))
+ {
+ actionPermitted = true;
+ break;
+ }
+ }
+ else
+ {
+ // permissions not specified: not permitted if any principal matched
+ if (constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, false))
+ {
+ actionNotPermitted = true;
+ break;
+ }
+ }
+ }
+ else if (constraintOrExpression instanceof SecurityConstraintsRefExpression)
{
- actionPermitted = true;
- break;
+ // check expression
+ SecurityConstraintsRefExpression expression = (SecurityConstraintsRefExpression)constraintOrExpression;
+
+ // assume actions are permitted in expression
+ anyActionsPermitted = true;
+
+ // check expression with action permission and user/role/group principals
+ if (expression.checkExpression(action, userPrincipals, rolePrincipals, groupPrincipals))
+ {
+ actionPermitted = true;
+ break;
+ }
}
}
- else
+
+ // fail if any action not permitted
+ if ((!actionPermitted && anyActionsPermitted) || actionNotPermitted)
{
- // permissions not specified: not permitted if any principal matched
- if (constraint.principalsMatch(userPrincipals, rolePrincipals, groupPrincipals, false))
- {
- actionNotPermitted = true;
- break;
- }
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted.");
}
}
-
- // fail if any action not permitted
- if ((!actionPermitted && anyActionsPermitted) || actionNotPermitted)
+ }
+ else
+ {
+ // fail for any action if owner specified
+ // since no other constraints were found
+ if ((getOwner() != null) && !actions.isEmpty())
{
- throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted.");
+ String action = (String)actions.get(0);
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Access for " + action + " not permitted, (not owner).");
}
}
}
+ catch (Exception e)
+ {
+ log.error("Security constraints check exception: "+e);
+ throw new SecurityException("SecurityConstraintsImpl.checkConstraints(): Exception detected: "+e);
+ }
}
/**
@@ -236,7 +275,8 @@ public class SecurityConstraintsImpl imp
* </p>
*
* @param pageSecurity
- * @return all security constraints
+ * @return all security constraints and constraints ref expressions
+ * @throws RuntimeException if expression parsing error occurs
*/
private synchronized List getAllSecurityConstraints(PageSecurity pageSecurity)
{
@@ -248,12 +288,12 @@ public class SecurityConstraintsImpl imp
}
// construct new ordered security constraints list
- allConstraints = Collections.synchronizedList(new ArrayList(8));
+ List newAllConstraints = new ArrayList();
// add any defined security constraints
if (constraints != null)
{
- allConstraints.addAll(constraints);
+ newAllConstraints.addAll(constraints);
}
// add any security constraints references
@@ -262,7 +302,7 @@ public class SecurityConstraintsImpl imp
List referencedConstraints = dereferenceSecurityConstraintsRefs(constraintsRefs, pageSecurity);
if (referencedConstraints != null)
{
- allConstraints.addAll(referencedConstraints);
+ newAllConstraints.addAll(referencedConstraints);
}
}
@@ -275,12 +315,12 @@ public class SecurityConstraintsImpl imp
List referencedConstraints = dereferenceSecurityConstraintsRefs(globalConstraintsRefs, pageSecurity);
if (referencedConstraints != null)
{
- allConstraints.addAll(referencedConstraints);
+ newAllConstraints.addAll(referencedConstraints);
}
}
}
- return allConstraints;
+ return allConstraints = newAllConstraints;
}
/**
@@ -288,14 +328,15 @@ public class SecurityConstraintsImpl imp
* dereferenceSecurityConstraintsRefs
* </p>
*
- * @param constraintsRefs
- * @param pageSecurity
- * @return security constraints
+ * @param constraintsRefs constraints references to be dereferenced
+ * @param pageSecurity page security definitions
+ * @return security constraints and constraints ref expressions
+ * @throws RuntimeException if expression parsing error occurs
*/
private List dereferenceSecurityConstraintsRefs(List constraintsRefs, PageSecurity pageSecurity)
{
// access security document to dereference security
- // constriants definitions
+ // constraints definitions
List constraints = null;
if (pageSecurity != null)
{
@@ -304,26 +345,34 @@ public class SecurityConstraintsImpl imp
while (constraintsRefsIter.hasNext())
{
String constraintsRef = (String)constraintsRefsIter.next();
- SecurityConstraintsDef securityConstraintsDef = pageSecurity.getSecurityConstraintsDef(constraintsRef);
- if ((securityConstraintsDef != null) && (securityConstraintsDef.getSecurityConstraints() != null))
+ // parse constraints ref and return constraints/constraints ref expressions
+ Object constraintsOrExpression = SecurityConstraintsRefParser.parse(constraintsRef, pageSecurity);
+ if (constraintsOrExpression instanceof List)
+ {
+ if (constraints == null)
+ {
+ constraints = new ArrayList();
+ }
+ constraints.addAll((List)constraintsOrExpression);
+ }
+ else if (constraintsOrExpression instanceof SecurityConstraintsRefExpression)
{
if (constraints == null)
{
- constraints = Collections.synchronizedList(new ArrayList(constraintsRefs.size()));
+ constraints = new ArrayList();
}
- constraints.addAll(securityConstraintsDef.getSecurityConstraints());
+ constraints.add(constraintsOrExpression);
}
- else
+ else if (constraintsOrExpression != null)
{
- log.error("dereferenceSecurityConstraintsRefs(): Unable to dereference \"" + constraintsRef + "\" security constraints definition.");
+ throw new RuntimeException("Unexpected security constraints ref parser result");
}
}
}
else
{
- log.error("dereferenceSecurityConstraintsRefs(): Missing page security, unable to dereference security constraints definitions.");
+ throw new RuntimeException("Page security definitions not available");
}
-
return constraints;
}
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/document/psml/CastorFileSystemDocumentHandler.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/document/psml/CastorFileSystemDocumentHandler.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/document/psml/CastorFileSystemDocumentHandler.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/document/psml/CastorFileSystemDocumentHandler.java Wed Apr 10 04:15:16 2013
@@ -126,7 +126,13 @@ public class CastorFileSystemDocumentHan
this.format = new OutputFormat(" ", true, PSML_DOCUMENT_ENCODING);
this.format.setXHTML(true);
this.format.setExpandEmptyElements(false);
-
+
+ String javaVersion = System.getProperty("java.version");
+ if ((javaVersion.startsWith("1.3.") || javaVersion.startsWith("1.4.")) && (System.getProperty("org.xml.sax.driver") == null))
+ {
+ System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser");
+ log.info("SAX driver configured: "+System.getProperty("org.xml.sax.driver"));
+ }
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java Wed Apr 10 04:15:16 2013
@@ -16,34 +16,11 @@
*/
package org.apache.jetspeed.page;
-import java.io.File;
-import java.io.FileFilter;
-import java.security.CodeSource;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.Policy;
-import java.security.Principal;
-import java.security.PrivilegedAction;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.security.auth.Subject;
-
import junit.framework.TestCase;
-
import net.sf.ehcache.CacheManager;
-
import org.apache.jetspeed.JetspeedActions;
import org.apache.jetspeed.cache.file.FileCache;
+import org.apache.jetspeed.cache.impl.EhCacheImpl;
import org.apache.jetspeed.idgenerator.IdGenerator;
import org.apache.jetspeed.idgenerator.JetspeedIdGenerator;
import org.apache.jetspeed.om.common.SecurityConstraint;
@@ -73,11 +50,11 @@ import org.apache.jetspeed.page.document
import org.apache.jetspeed.page.document.psml.DocumentHandlerFactoryImpl;
import org.apache.jetspeed.page.document.psml.FileSystemFolderHandler;
import org.apache.jetspeed.page.psml.CastorXmlPageManager;
+import org.apache.jetspeed.security.Group;
import org.apache.jetspeed.security.JSSubject;
import org.apache.jetspeed.security.JetspeedPermission;
import org.apache.jetspeed.security.JetspeedPrincipal;
import org.apache.jetspeed.security.JetspeedPrincipalType;
-import org.apache.jetspeed.security.Group;
import org.apache.jetspeed.security.PermissionFactory;
import org.apache.jetspeed.security.PrincipalsSet;
import org.apache.jetspeed.security.Role;
@@ -89,7 +66,27 @@ import org.apache.jetspeed.security.spi.
import org.apache.jetspeed.security.spi.impl.FragmentPermission;
import org.apache.jetspeed.security.spi.impl.JetspeedPermissionFactory;
import org.apache.jetspeed.security.spi.impl.PagePermission;
-import org.apache.jetspeed.cache.impl.EhCacheImpl;
+
+import javax.security.auth.Subject;
+import java.io.File;
+import java.io.FileFilter;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.security.Principal;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
/**
* PageManagerTestShared
@@ -243,8 +240,8 @@ public interface PageManagerTestShared
/**
* testSecurePageManager
*
- * @param test case
- * @param page manager
+ * @param test test case
+ * @param pageManager page manager
*/
static void testSecurePageManager(final TestCase test, final PageManager pageManager) throws Exception
{
@@ -719,6 +716,449 @@ public interface PageManagerTestShared
throw cleanup;
}
}
+
+ /**
+ * testSecurityConstraintsRefExpressions
+ *
+ * @param test test case
+ * @param pageManager page manager
+ */
+ static void testSecurityConstraintsRefExpressions(final TestCase test, final PageManager pageManager) throws Exception
+ {
+ // reset page manager cache
+ pageManager.reset();
+
+ // setup test subjects
+ Set principals = new PrincipalsSet();
+ principals.add(new TestUser("admin"));
+ Subject adminSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ principals = new PrincipalsSet();
+ principals.add(new TestUser("user-with-admin"));
+ principals.add(new TestRole("admin"));
+ Subject userWithAdminSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ principals = new PrincipalsSet();
+ principals.add(new TestUser("user"));
+ Subject userSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ principals = new PrincipalsSet();
+ principals.add(new TestUser("test-group-user"));
+ principals.add(new TestGroup("test-group"));
+ Subject testGroupUserSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ principals = new PrincipalsSet();
+ principals.add(new TestUser("test-role-user"));
+ principals.add(new TestRole("test-role"));
+ Subject testRoleUserSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ principals = new PrincipalsSet();
+ principals.add(new TestUser("test-group-role-user"));
+ principals.add(new TestGroup("test-group"));
+ principals.add(new TestRole("test-role"));
+ Subject testGroupRoleUserSubject = new Subject(true, principals, new HashSet(), new HashSet());
+
+ // setup test as admin
+ Exception setup = (Exception) JSSubject.doAsPrivileged(adminSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ // reset page manager to initial state
+ try
+ {
+ Folder removeRootFolder = pageManager.getFolder("/");
+ pageManager.removeFolder(removeRootFolder);
+ pageManager.reset();
+ }
+ catch (FolderNotFoundException e)
+ {
+ }
+
+ // create test documents and folders
+ Folder folder = pageManager.newFolder("/");
+ SecurityConstraints constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ List constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("public-view");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ folder.setSecurityConstraints(constraints);
+ pageManager.updateFolder(folder);
+
+ PageSecurity pageSecurity = pageManager.newPageSecurity();
+ List constraintsDefs = new ArrayList(5);
+ SecurityConstraintsDef constraintsDef = pageManager.newSecurityConstraintsDef();
+ constraintsDef.setName("public-view");
+ List defConstraints = new ArrayList(1);
+ SecurityConstraint defConstraint = pageManager.newPageSecuritySecurityConstraint();
+ defConstraint.setUsers(Shared.makeListFromCSV("*"));
+ defConstraint.setPermissions(Shared.makeListFromCSV("view"));
+ defConstraints.add(defConstraint);
+ constraintsDef.setSecurityConstraints(defConstraints);
+ constraintsDefs.add(constraintsDef);
+ constraintsDef = pageManager.newSecurityConstraintsDef();
+ constraintsDef.setName("test-group");
+ defConstraints = new ArrayList(1);
+ defConstraint = pageManager.newPageSecuritySecurityConstraint();
+ defConstraint.setGroups(Shared.makeListFromCSV("test-group"));
+ defConstraint.setPermissions(Shared.makeListFromCSV("view"));
+ defConstraints.add(defConstraint);
+ constraintsDef.setSecurityConstraints(defConstraints);
+ constraintsDefs.add(constraintsDef);
+ constraintsDef = pageManager.newSecurityConstraintsDef();
+ constraintsDef.setName("test-role");
+ defConstraints = new ArrayList(1);
+ defConstraint = pageManager.newPageSecuritySecurityConstraint();
+ defConstraint.setRoles(Shared.makeListFromCSV("test-role"));
+ defConstraint.setPermissions(Shared.makeListFromCSV("view"));
+ defConstraints.add(defConstraint);
+ constraintsDef.setSecurityConstraints(defConstraints);
+ constraintsDefs.add(constraintsDef);
+ constraintsDef = pageManager.newSecurityConstraintsDef();
+ constraintsDef.setName("admin-role");
+ defConstraints = new ArrayList(1);
+ defConstraint = pageManager.newPageSecuritySecurityConstraint();
+ defConstraint.setRoles(Shared.makeListFromCSV("admin"));
+ defConstraint.setPermissions(Shared.makeListFromCSV("view,edit"));
+ defConstraints.add(defConstraint);
+ constraintsDef.setSecurityConstraints(defConstraints);
+ constraintsDefs.add(constraintsDef);
+ constraintsDef = pageManager.newSecurityConstraintsDef();
+ constraintsDef.setName("admin-user");
+ defConstraints = new ArrayList(1);
+ defConstraint = pageManager.newPageSecuritySecurityConstraint();
+ defConstraint.setUsers(Shared.makeListFromCSV("admin"));
+ defConstraint.setPermissions(Shared.makeListFromCSV("view,edit"));
+ defConstraints.add(defConstraint);
+ constraintsDef.setSecurityConstraints(defConstraints);
+ constraintsDefs.add(constraintsDef);
+ pageSecurity.setSecurityConstraintsDefs(constraintsDefs);
+ List globalConstraintsRefs = new ArrayList(1);
+ globalConstraintsRefs.add("admin-role or admin-user");
+ pageSecurity.setGlobalSecurityConstraintsRefs(globalConstraintsRefs);
+ pageManager.updatePageSecurity(pageSecurity);
+
+ Page page = pageManager.newPage("/default-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("public-view");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ page = pageManager.newPage("/or-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ List inlineConstraints = new ArrayList(1);
+ SecurityConstraint constraint = pageManager.newPageSecurityConstraint();
+ constraint.setUsers(Shared.makeListFromCSV("user"));
+ constraint.setPermissions(Shared.makeListFromCSV("view"));
+ inlineConstraints.add(constraint);
+ constraints.setSecurityConstraints(inlineConstraints);
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("test-group || test-role");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ page = pageManager.newPage("/and-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("test-group and test-role");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ page = pageManager.newPage("/not-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("not test-role");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ page = pageManager.newPage("/and-not-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("public-view and not test-group");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ page = pageManager.newPage("/paren-page.psml");
+ constraints = pageManager.newSecurityConstraints();
+ constraints.setOwner("admin");
+ constraintsRefs = new ArrayList(1);
+ constraintsRefs.add("((test-group||test-role)&&!admin-role)");
+ constraints.setSecurityConstraintsRefs(constraintsRefs);
+ page.setSecurityConstraints(constraints);
+ pageManager.updatePage(page);
+
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (setup != null)
+ {
+ throw setup;
+ }
+
+ // reset page manager
+ pageManager.reset();
+
+ // test as admin
+ Exception adminAccess = (Exception) JSSubject.doAsPrivileged(adminSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessGranted(pageManager, "/and-page.psml");
+ assertPageAccessGranted(pageManager, "/not-page.psml");
+ assertPageAccessGranted(pageManager, "/and-not-page.psml");
+ assertPageAccessGranted(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (adminAccess != null)
+ {
+ throw adminAccess;
+ }
+
+ // test as user with admin
+ Exception userWithAdminAccess = (Exception) JSSubject.doAsPrivileged(userWithAdminSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessGranted(pageManager, "/and-page.psml");
+ assertPageAccessGranted(pageManager, "/not-page.psml");
+ assertPageAccessGranted(pageManager, "/and-not-page.psml");
+ assertPageAccessGranted(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (userWithAdminAccess != null)
+ {
+ throw userWithAdminAccess;
+ }
+
+ // test as user
+ Exception userAccess = (Exception) JSSubject.doAsPrivileged(userSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessDenied(pageManager, "/and-page.psml");
+ assertPageAccessGranted(pageManager, "/not-page.psml");
+ assertPageAccessGranted(pageManager, "/and-not-page.psml");
+ assertPageAccessDenied(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (userAccess != null)
+ {
+ throw userAccess;
+ }
+
+ // test as test group user
+ Exception testGroupUserAccess = (Exception) JSSubject.doAsPrivileged(testGroupUserSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessDenied(pageManager, "/and-page.psml");
+ assertPageAccessGranted(pageManager, "/not-page.psml");
+ assertPageAccessDenied(pageManager, "/and-not-page.psml");
+ assertPageAccessGranted(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (testGroupUserAccess != null)
+ {
+ throw testGroupUserAccess;
+ }
+
+ // test as test role user
+ Exception testRoleUserAccess = (Exception) JSSubject.doAsPrivileged(testRoleUserSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessDenied(pageManager, "/and-page.psml");
+ assertPageAccessDenied(pageManager, "/not-page.psml");
+ assertPageAccessGranted(pageManager, "/and-not-page.psml");
+ assertPageAccessGranted(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (testRoleUserAccess != null)
+ {
+ throw testRoleUserAccess;
+ }
+
+ // test as test group role user
+ Exception testGroupRoleUserAccess = (Exception) JSSubject.doAsPrivileged(testGroupRoleUserSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ assertPageAccessGranted(pageManager, "/default-page.psml");
+ assertPageAccessGranted(pageManager, "/or-page.psml");
+ assertPageAccessGranted(pageManager, "/and-page.psml");
+ assertPageAccessDenied(pageManager, "/not-page.psml");
+ assertPageAccessDenied(pageManager, "/and-not-page.psml");
+ assertPageAccessGranted(pageManager, "/paren-page.psml");
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (testGroupRoleUserAccess != null)
+ {
+ throw testGroupRoleUserAccess;
+ }
+
+ // cleanup test as admin user
+ Exception cleanup = (Exception)JSSubject.doAsPrivileged(adminSubject, new PrivilegedAction()
+ {
+ public Object run()
+ {
+ try
+ {
+ // cleanup by removing root folder
+ try
+ {
+ Folder remove = pageManager.getFolder("/");
+ TestCase.assertEquals("/", remove.getPath());
+ pageManager.removeFolder(remove);
+ }
+ catch (FolderNotFoundException e)
+ {
+ TestCase.assertTrue("Folder / NOT FOUND", false);
+ }
+
+ return null;
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ finally
+ {
+ JSSubject.clearSubject();
+ }
+ }
+ }, null);
+ if (cleanup != null)
+ {
+ throw cleanup;
+ }
+ }
+
+ static void assertPageAccessGranted(PageManager pageManager, String path) throws Exception
+ {
+ try
+ {
+ pageManager.getPage(path);
+ }
+ catch (SecurityException se)
+ {
+ TestCase.fail("Page "+path+" access denied");
+ }
+ }
+
+ static void assertPageAccessDenied(PageManager pageManager, String path) throws Exception
+ {
+ try
+ {
+ pageManager.getPage(path);
+ TestCase.fail("Page "+path+" access granted");
+ }
+ catch (SecurityException se)
+ {
+ }
+ }
}
/**
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestMappings.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestMappings.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestMappings.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestMappings.java Wed Apr 10 04:15:16 2013
@@ -38,6 +38,7 @@ public class TestMappings extends TestCa
"JETSPEED-INF/castor/page-mapping.xml")));
// 2. Unmarshal the data
+ System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser");
Unmarshaller unmar = new Unmarshaller(mapping);
Fragment fragment = (Fragment) unmar.unmarshal(new InputSource(getClass().getClassLoader().getResourceAsStream(
"fragment-test.xml")));
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureCastorXmlPageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureCastorXmlPageManager.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureCastorXmlPageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureCastorXmlPageManager.java Wed Apr 10 04:15:16 2013
@@ -93,4 +93,13 @@ public class TestSecureCastorXmlPageMana
// utilize standard secure page manager test
Shared.testSecurePageManager(this, pageManager);
}
+
+ public void testSecurityConstraintsRefExpressions() throws Exception
+ {
+ if (pageManager.getConstraintsEnabled())
+ {
+ // utilize standard secure page manager test
+ Shared.testSecurityConstraintsRefExpressions(this, pageManager);
+ }
+ }
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureDatabasePageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureDatabasePageManager.java?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureDatabasePageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestSecureDatabasePageManager.java Wed Apr 10 04:15:16 2013
@@ -49,6 +49,17 @@ public class TestSecureDatabasePageManag
public void testSecurePageManager() throws Exception
{
// utilize standard secure page manager test
- Shared.testSecurePageManager(this, (PageManager)scm.getComponent("pageManager"));
+ PageManager pageManager = (PageManager)scm.getComponent("pageManager");
+ Shared.testSecurePageManager(this, pageManager);
+ }
+
+ public void testSecurityConstraintsRefExpressions() throws Exception
+ {
+ PageManager pageManager = (PageManager)scm.getComponent("pageManager");
+ if (pageManager.getConstraintsEnabled())
+ {
+ // utilize standard secure page manager test
+ Shared.testSecurityConstraintsRefExpressions(this, pageManager);
+ }
}
}
Modified: portals/jetspeed-2/portal/trunk/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/pom.xml?rev=1466326&r1=1466325&r2=1466326&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/pom.xml Wed Apr 10 04:15:16 2013
@@ -280,7 +280,7 @@
<org.apache.portals.applications.apa-gems.version>1.1</org.apache.portals.applications.apa-gems.version>
<org.apache.portals.applications.apa-logging.version>1.0</org.apache.portals.applications.apa-logging.version>
<org.apache.portals.applications.apa-rss.version>1.2</org.apache.portals.applications.apa-rss.version>
- <org.apache.portals.applications.apa-webcontent.version>1.3-SNAPSHOT</org.apache.portals.applications.apa-webcontent.version>
+ <org.apache.portals.applications.apa-webcontent.version>1.4-SNAPSHOT</org.apache.portals.applications.apa-webcontent.version>
<org.apache.portals.applications.apa-dbbrowser.version>1.2</org.apache.portals.applications.apa-dbbrowser.version>
<org.openid4java.version>0.9.5</org.openid4java.version>
<oro.version>2.0.8</oro.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org