This is an automated email from the ASF dual-hosted git repository.

kusal pushed a commit to branch WW-5343-sec-extend
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 7e92a8d7b4c2f06a174fb9330786174abbf23b0a
Author: Kusal Kithul-Godage <g...@kusal.io>
AuthorDate: Wed Nov 15 00:23:51 2023 +1100

    WW-5343 Refactor OgnlValueStackFactory to utilise SecurityMemberAccess bean
---
 .../opensymphony/xwork2/ognl/OgnlValueStack.java   | 74 +++++++++++++++++-----
 .../xwork2/ognl/OgnlValueStackFactory.java         | 23 +++----
 2 files changed, 67 insertions(+), 30 deletions(-)

diff --git 
a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java 
b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
index a003972d5..63802717a 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
@@ -75,45 +75,76 @@ public class OgnlValueStack implements Serializable, 
ValueStack, ClearableValueS
     private boolean devMode;
     private boolean logMissingProperties;
 
+    /**
+     * @since 6.4.0
+     */
     protected OgnlValueStack(ValueStack vs,
                              XWorkConverter xworkConverter,
                              CompoundRootAccessor accessor,
                              TextProvider prov,
-                             boolean allowStaticFieldAccess) {
+                             SecurityMemberAccess securityMemberAccess) {
         setRoot(xworkConverter,
                 accessor,
                 vs != null ? new CompoundRoot(vs.getRoot()) : new 
CompoundRoot(),
-                allowStaticFieldAccess);
+                securityMemberAccess);
         if (prov != null) {
             push(prov);
         }
     }
 
+    /**
+     * @since 6.4.0
+     */
+    protected OgnlValueStack(XWorkConverter xworkConverter, 
CompoundRootAccessor accessor, TextProvider prov, SecurityMemberAccess 
securityMemberAccess) {
+        this(null, xworkConverter, accessor, prov, securityMemberAccess);
+    }
+
+    /**
+     * @since 6.4.0
+     */
+    protected OgnlValueStack(ValueStack vs, XWorkConverter xworkConverter, 
CompoundRootAccessor accessor, SecurityMemberAccess securityMemberAccess) {
+        this(vs, xworkConverter, accessor, null, securityMemberAccess);
+    }
+
+    /**
+     * @deprecated since 6.4.0, use {@link #OgnlValueStack(ValueStack, 
XWorkConverter, CompoundRootAccessor, TextProvider, SecurityMemberAccess)} 
instead.
+     */
+    @Deprecated
+    protected OgnlValueStack(ValueStack vs,
+                             XWorkConverter xworkConverter,
+                             CompoundRootAccessor accessor,
+                             TextProvider prov,
+                             boolean allowStaticFieldAccess) {
+        this(vs, xworkConverter, accessor, prov, new 
SecurityMemberAccess(allowStaticFieldAccess));
+    }
+
+    /**
+     * @deprecated since 6.4.0, use {@link #OgnlValueStack(XWorkConverter, 
CompoundRootAccessor, TextProvider, SecurityMemberAccess)} instead.
+     */
+    @Deprecated
     protected OgnlValueStack(XWorkConverter xworkConverter, 
CompoundRootAccessor accessor, TextProvider prov, boolean 
allowStaticFieldAccess) {
-        this(null, xworkConverter, accessor, prov, allowStaticFieldAccess);
+        this(xworkConverter, accessor, prov, new 
SecurityMemberAccess(allowStaticFieldAccess));
     }
 
+    /**
+     * @deprecated since 6.4.0, use {@link #OgnlValueStack(ValueStack, 
XWorkConverter, CompoundRootAccessor, SecurityMemberAccess)} instead.
+     */
+    @Deprecated
     protected OgnlValueStack(ValueStack vs, XWorkConverter xworkConverter, 
CompoundRootAccessor accessor, boolean allowStaticFieldAccess) {
-        this(vs, xworkConverter, accessor, null, allowStaticFieldAccess);
+        this(vs, xworkConverter, accessor, new 
SecurityMemberAccess(allowStaticFieldAccess));
     }
 
     @Inject
     protected void setOgnlUtil(OgnlUtil ognlUtil) {
         this.ognlUtil = ognlUtil;
-        securityMemberAccess.useExcludedClasses(ognlUtil.getExcludedClasses());
-        
securityMemberAccess.useExcludedPackageNamePatterns(ognlUtil.getExcludedPackageNamePatterns());
-        
securityMemberAccess.useExcludedPackageNames(ognlUtil.getExcludedPackageNames());
-        
securityMemberAccess.useExcludedPackageExemptClasses(ognlUtil.getExcludedPackageExemptClasses());
-        
securityMemberAccess.useEnforceAllowlistEnabled(ognlUtil.isEnforceAllowlistEnabled());
-        
securityMemberAccess.useAllowlistClasses(ognlUtil.getAllowlistClasses());
-        
securityMemberAccess.useAllowlistPackageNames(ognlUtil.getAllowlistPackageNames());
-        
securityMemberAccess.disallowProxyMemberAccess(ognlUtil.isDisallowProxyMemberAccess());
-        
securityMemberAccess.disallowDefaultPackageAccess(ognlUtil.isDisallowDefaultPackageAccess());
     }
 
-    protected void setRoot(XWorkConverter xworkConverter, CompoundRootAccessor 
accessor, CompoundRoot compoundRoot, boolean allowStaticFieldAccess) {
+    /**
+     * @since 6.4.0
+     */
+    protected void setRoot(XWorkConverter xworkConverter, CompoundRootAccessor 
accessor, CompoundRoot compoundRoot, SecurityMemberAccess securityMemberAccess) 
{
         this.root = compoundRoot;
-        this.securityMemberAccess = new 
SecurityMemberAccess(allowStaticFieldAccess);
+        this.securityMemberAccess = securityMemberAccess;
         this.context = Ognl.createDefaultContext(this.root, 
securityMemberAccess, accessor, new OgnlTypeConverterWrapper(xworkConverter));
         this.converter = xworkConverter;
         context.put(VALUE_STACK, this);
@@ -121,6 +152,19 @@ public class OgnlValueStack implements Serializable, 
ValueStack, ClearableValueS
         ((OgnlContext) context).setKeepLastEvaluation(false);
     }
 
+    /**
+     * @deprecated since 6.4.0, use {@link #setRoot(XWorkConverter, 
CompoundRootAccessor, CompoundRoot, SecurityMemberAccess)} instead.
+     */
+    @Deprecated
+    protected void setRoot(XWorkConverter xworkConverter, CompoundRootAccessor 
accessor, CompoundRoot compoundRoot, boolean allowStaticFieldAccess) {
+        setRoot(xworkConverter, accessor, compoundRoot, new 
SecurityMemberAccess(allowStaticFieldAccess));
+    }
+
+    @Inject
+    protected void setSecurityMemberAccess(SecurityMemberAccess 
securityMemberAccess) {
+        this.securityMemberAccess = securityMemberAccess;
+    }
+
     @Inject(StrutsConstants.STRUTS_DEVMODE)
     protected void setDevMode(String mode) {
         this.devMode = BooleanUtils.toBoolean(mode);
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java 
b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java
index 69dd54026..111a44d79 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java
@@ -31,11 +31,8 @@ import ognl.MethodAccessor;
 import ognl.OgnlRuntime;
 import ognl.PropertyAccessor;
 import org.apache.commons.lang3.BooleanUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 import org.apache.struts2.StrutsConstants;
 
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -59,21 +56,17 @@ public class OgnlValueStackFactory implements 
ValueStackFactory {
     }
 
     public ValueStack createValueStack() {
-        ValueStack stack = new OgnlValueStack(xworkConverter, 
compoundRootAccessor, textProvider, containerAllowsStaticFieldAccess());
+        ValueStack stack = new OgnlValueStack(
+                xworkConverter, compoundRootAccessor, textProvider, 
container.getInstance(SecurityMemberAccess.class));
         container.inject(stack);
-        return stack.getActionContext()
-            .withContainer(container)
-            .withValueStack(stack)
-            .getValueStack();
+        return 
stack.getActionContext().withContainer(container).withValueStack(stack).getValueStack();
     }
 
     public ValueStack createValueStack(ValueStack stack) {
-        ValueStack result = new OgnlValueStack(stack, xworkConverter, 
compoundRootAccessor, containerAllowsStaticFieldAccess());
+        ValueStack result = new OgnlValueStack(
+                stack, xworkConverter, compoundRootAccessor, 
container.getInstance(SecurityMemberAccess.class));
         container.inject(result);
-        return result.getActionContext()
-            .withContainer(container)
-            .withValueStack(result)
-            .getValueStack();
+        return 
result.getActionContext().withContainer(container).withValueStack(result).getValueStack();
     }
 
     @Inject
@@ -105,10 +98,10 @@ public class OgnlValueStackFactory implements 
ValueStackFactory {
     }
 
     /**
-     * Retrieve allowStaticFieldAccess state from the container (allows for 
lazy fetching)
+     * @deprecated since 6.4.0, no replacement.
      */
+    @Deprecated
     protected boolean containerAllowsStaticFieldAccess() {
         return BooleanUtils.toBoolean(container.getInstance(String.class, 
StrutsConstants.STRUTS_ALLOW_STATIC_FIELD_ACCESS));
     }
-
 }

Reply via email to