diff --git a/common/src/main/java/com/zimbra/common/account/ZAttrProvisioning.java b/common/src/main/java/com/zimbra/common/account/ZAttrProvisioning.java
index 4bf1a617f4e..f9170537516 100644
--- a/common/src/main/java/com/zimbra/common/account/ZAttrProvisioning.java
+++ b/common/src/main/java/com/zimbra/common/account/ZAttrProvisioning.java
@@ -2870,6 +2870,15 @@ public static TwoFactorAuthSecretEncoding fromString(String s) throws ServiceExc
@ZAttr(id=3120)
public static final String A_carbonioClamAVDatabaseCustomURL = "carbonioClamAVDatabaseCustomURL";
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public static final String A_carbonioClamAVReadTimeout = "carbonioClamAVReadTimeout";
+
/**
* Whether the Chat App usages enabled for account or COS
*
diff --git a/store/conf/attrs/attrs.xml b/store/conf/attrs/attrs.xml
index 485bcfa2f6d..a28f1b7a2cd 100755
--- a/store/conf/attrs/attrs.xml
+++ b/store/conf/attrs/attrs.xml
@@ -10118,4 +10118,9 @@ TODO: delete them permanently from here
Logout URL for Carbonio Admin web client to send the user to upon explicit logging out
+
+
+ 900
+ Waiting for data from a client socket connected to ClamAV will timeout after this time (seconds)
+
diff --git a/store/ldap/src/updates/attrs/1697206170.json b/store/ldap/src/updates/attrs/1697206170.json
new file mode 100644
index 00000000000..100428f50dc
--- /dev/null
+++ b/store/ldap/src/updates/attrs/1697206170.json
@@ -0,0 +1,5 @@
+{
+ "zimbra_globalconfig": [
+ "carbonioClamAVReadTimeout"
+ ]
+}
diff --git a/store/src/main/java/com/zimbra/cs/account/ZAttrConfig.java b/store/src/main/java/com/zimbra/cs/account/ZAttrConfig.java
index 84ff536e5b1..f67678f235c 100644
--- a/store/src/main/java/com/zimbra/cs/account/ZAttrConfig.java
+++ b/store/src/main/java/com/zimbra/cs/account/ZAttrConfig.java
@@ -1374,6 +1374,83 @@ public Map unsetCarbonioClamAVDatabaseCustomURL(Map attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, Integer.toString(carbonioClamAVReadTimeout));
+ getProvisioning().modifyAttrs(this, attrs);
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @param carbonioClamAVReadTimeout new value
+ * @param attrs existing map to populate, or null to create a new map
+ * @return populated map to pass into Provisioning.modifyAttrs
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public Map setCarbonioClamAVReadTimeout(int carbonioClamAVReadTimeout, Map attrs) {
+ if (attrs == null) attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, Integer.toString(carbonioClamAVReadTimeout));
+ return attrs;
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @throws com.zimbra.common.service.ServiceException if error during update
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public void unsetCarbonioClamAVReadTimeout() throws com.zimbra.common.service.ServiceException {
+ HashMap attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, "");
+ getProvisioning().modifyAttrs(this, attrs);
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @param attrs existing map to populate, or null to create a new map
+ * @return populated map to pass into Provisioning.modifyAttrs
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public Map unsetCarbonioClamAVReadTimeout(Map attrs) {
+ if (attrs == null) attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, "");
+ return attrs;
+ }
+
/**
* Logo URL for domain
*
diff --git a/store/src/main/java/com/zimbra/cs/account/ZAttrServer.java b/store/src/main/java/com/zimbra/cs/account/ZAttrServer.java
index 63920a30e6b..ca1d22ec9de 100644
--- a/store/src/main/java/com/zimbra/cs/account/ZAttrServer.java
+++ b/store/src/main/java/com/zimbra/cs/account/ZAttrServer.java
@@ -226,6 +226,83 @@ public Map unsetCarbonioAmavisDisableVirusCheck(Map attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, Integer.toString(carbonioClamAVReadTimeout));
+ getProvisioning().modifyAttrs(this, attrs);
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @param carbonioClamAVReadTimeout new value
+ * @param attrs existing map to populate, or null to create a new map
+ * @return populated map to pass into Provisioning.modifyAttrs
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public Map setCarbonioClamAVReadTimeout(int carbonioClamAVReadTimeout, Map attrs) {
+ if (attrs == null) attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, Integer.toString(carbonioClamAVReadTimeout));
+ return attrs;
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @throws com.zimbra.common.service.ServiceException if error during update
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public void unsetCarbonioClamAVReadTimeout() throws com.zimbra.common.service.ServiceException {
+ HashMap attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, "");
+ getProvisioning().modifyAttrs(this, attrs);
+ }
+
+ /**
+ * Waiting for data from a client socket connected to ClamAV will timeout
+ * after this time (seconds)
+ *
+ * @param attrs existing map to populate, or null to create a new map
+ * @return populated map to pass into Provisioning.modifyAttrs
+ *
+ * @since ZCS 23.11.0
+ */
+ @ZAttr(id=3140)
+ public Map unsetCarbonioClamAVReadTimeout(Map attrs) {
+ if (attrs == null) attrs = new HashMap<>();
+ attrs.put(ZAttrProvisioning.A_carbonioClamAVReadTimeout, "");
+ return attrs;
+ }
+
/**
* RFC2256: common name(s) for which the entity is known by
*