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

luozenglin pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new aedb9ed16c3 [cherry-pick](udf) add the switch enable_java_udf to 
control the creation and use of java_udf. (#26213) (#26411)
aedb9ed16c3 is described below

commit aedb9ed16c306797eb4610d5a03df29c800b14bd
Author: luozenglin <luozeng...@baidu.com>
AuthorDate: Fri Nov 3 19:32:47 2023 +0800

    [cherry-pick](udf) add the switch enable_java_udf to control the creation 
and use of java_udf. (#26213) (#26411)
---
 .../src/main/java/org/apache/doris/common/Config.java       |  8 ++++++++
 .../java/org/apache/doris/analysis/CreateFunctionStmt.java  |  3 +++
 .../java/org/apache/doris/analysis/FunctionCallExpr.java    |  4 ++++
 .../java/org/apache/doris/catalog/FunctionRegistry.java     |  1 +
 .../main/java/org/apache/doris/catalog/FunctionUtil.java    | 13 +++++++++++++
 5 files changed, 29 insertions(+)

diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 74c6de0b4e5..053ab159521 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -2207,6 +2207,14 @@ public class Config extends ConfigBase {
     })
     public static String access_control_allowed_origin_domain = "*";
 
+    @ConfField(description = {
+            "开启java_udf, 
默认为true。如果该配置为false,则禁止创建和使用java_udf。在一些场景下关闭该配置可防止命令注入攻击。",
+            "Used to enable java_udf, default is true. if this configuration 
is false, creation and use of java_udf is "
+                    + "disabled. in some scenarios it may be necessary to 
disable this configuration to prevent "
+                    + "command injection attacks."
+    })
+    public static boolean enable_java_udf = true;
+
     @ConfField(description = {
             "是否忽略 Image 文件中未知的模块。如果为 true,不在 PersistMetaModules.MODULE_NAMES 
中的元数据模块将被忽略并跳过。"
                     + "默认为 false,如果 Image 文件中包含未知的模块,Doris 将会抛出异常。"
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
index c50acda716f..ac1ba1b4e65 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
@@ -23,6 +23,7 @@ import org.apache.doris.catalog.ArrayType;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.Function;
 import org.apache.doris.catalog.Function.NullableMode;
+import org.apache.doris.catalog.FunctionUtil;
 import org.apache.doris.catalog.MapType;
 import org.apache.doris.catalog.ScalarFunction;
 import org.apache.doris.catalog.ScalarType;
@@ -260,6 +261,8 @@ public class CreateFunctionStmt extends DdlStmt {
             }
         }
         if (binaryType == TFunctionBinaryType.JAVA_UDF) {
+            FunctionUtil.checkEnableJavaUdf();
+
             String returnNullModeStr = properties.get(IS_RETURN_NULL);
             if (returnNullModeStr == null) {
                 return;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index d02c5e5ddc0..6345c25395a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -28,6 +28,7 @@ import org.apache.doris.catalog.DatabaseIf;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.Function;
 import org.apache.doris.catalog.FunctionSet;
+import org.apache.doris.catalog.FunctionUtil;
 import org.apache.doris.catalog.MapType;
 import org.apache.doris.catalog.ScalarFunction;
 import org.apache.doris.catalog.ScalarType;
@@ -1602,6 +1603,9 @@ public class FunctionCallExpr extends Expr {
                     if (analyzer.isReAnalyze() && fn instanceof AliasFunction) 
{
                         throw new AnalysisException("a UDF in the original 
function of a alias function");
                     }
+                    if (fn != null) {
+                        FunctionUtil.checkEnableJavaUdf();
+                    }
                 }
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java
index f320f753ec7..bb26f2bef52 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java
@@ -146,6 +146,7 @@ public class FunctionRegistry {
                 List<FunctionBuilder> candidate = 
name2UdfBuilders.getOrDefault(scope, ImmutableMap.of())
                         .get(name.toLowerCase());
                 if (candidate != null && !candidate.isEmpty()) {
+                    FunctionUtil.checkEnableJavaUdfForNereids();
                     return candidate;
                 }
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
index 34f3a8b6f94..9f9c59e1074 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
@@ -21,6 +21,7 @@ import org.apache.doris.analysis.Analyzer;
 import org.apache.doris.analysis.SetType;
 import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.Config;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
@@ -257,4 +258,16 @@ public class FunctionUtil {
         }
         return false;
     }
+
+    public static void checkEnableJavaUdf() throws AnalysisException {
+        if (!Config.enable_java_udf) {
+            throw new AnalysisException("java_udf has been disabled.");
+        }
+    }
+
+    public static void checkEnableJavaUdfForNereids() {
+        if (!Config.enable_java_udf) {
+            throw new 
org.apache.doris.nereids.exceptions.AnalysisException("java_udf has been 
disabled.");
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to