From 80bfd4b587ee5adc86953ca0ea56c46b7f789d90 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Mon, 09 Sep 2024 09:05:44 +0000
Subject: [PATCH] [#376] FIX SNMP monitoring config (#381)

---
 opendj-server-legacy/src/main/java/org/opends/server/config/JMXMBean.java           |    9 +++-
 opendj-server-legacy/src/main/assembly/opendj-archive-component.xml                 |    3 +
 opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java |   17 +++++---
 opendj-doc-generated-ref/src/main/docbkx/admin-guide/chap-monitoring.xml            |   11 +----
 opendj-server-legacy/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java      |    5 ++
 opendj-server-legacy/resource/bin/_script-util.bat                                  |    5 +-
 opendj-server-legacy/resource/bin/_script-util.sh                                   |    6 +-
 opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java           |    5 +-
 8 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/opendj-doc-generated-ref/src/main/docbkx/admin-guide/chap-monitoring.xml b/opendj-doc-generated-ref/src/main/docbkx/admin-guide/chap-monitoring.xml
index 29a6758..e4c85d6 100644
--- a/opendj-doc-generated-ref/src/main/docbkx/admin-guide/chap-monitoring.xml
+++ b/opendj-doc-generated-ref/src/main/docbkx/admin-guide/chap-monitoring.xml
@@ -91,14 +91,9 @@
   Server Monitoring MIB</link>.</para>
   
   <para>OpenDJ SNMP-based monitoring depends on OpenDMK, which you must
-  <link xlink:href="http://opendmk.java.net/download/" xlink:show="new">download
-  separately</link>. Install the <link xlink:show="new"
-  xlink:href="http://java.net/projects/opendmk/content/download/opendmk-1.0-b02-bin-dual-01-Oct-2007_19-17-46.jar"
-  >Full Binary Bundle</link> by using the graphical installer, which requires
-  that you accept the <link xlink:show="new"
-  xlink:href="http://java.net/projects/opendmk/content/legal_notices/LICENSE_BINARY.txt"
-  >Binary License for Project OpenDMK</link>. OpenDJ directory server that you
-  download from ForgeRock is built with OpenDMK, but due to licensing OpenDMK
+  <link xlink:href="https://github.com/OpenIdentityPlatform/OpenDJ/raw/master/opendj-server-legacy/opendmk/jdmkrt.jar" xlink:show="new">download
+  separately</link>. OpenDJ directory server that you
+  download from GitHub is built with OpenDMK, but due to licensing OpenDMK
   is not part of OpenDJ. SNMP is therefore not enabled by default.</para>
 
   <para>To run the OpenDMK installer, use the self-extracting .jar.</para>
diff --git a/opendj-server-legacy/resource/bin/_script-util.bat b/opendj-server-legacy/resource/bin/_script-util.bat
index f0bc2fe..cfa7c0b 100644
--- a/opendj-server-legacy/resource/bin/_script-util.bat
+++ b/opendj-server-legacy/resource/bin/_script-util.bat
@@ -13,6 +13,7 @@
 rem
 rem Copyright 2008-2010 Sun Microsystems, Inc.
 rem Portions Copyright 2011-2016 ForgeRock AS.
+rem Portions Copyright 2020-2024 3A Systems, LLC.
 
 set SET_JAVA_HOME_AND_ARGS_DONE=false
 set SET_ENVIRONMENT_VARS_DONE=false
@@ -170,9 +171,9 @@
 set PATH=%SystemRoot%;%PATH%
 set SCRIPT_NAME_ARG=-Dorg.opends.server.scriptName=%SCRIPT_NAME%
 set SET_ENVIRONMENT_VARS_DONE=true
-"%OPENDJ_JAVA_BIN%" --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --version > NUL 2>&1
+"%OPENDJ_JAVA_BIN%" --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --version > NUL 2>&1
 set RESULT_CODE=%errorlevel%
-if %RESULT_CODE% == 0 set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED
+if %RESULT_CODE% == 0 set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
 goto scriptBegin
 
 :testJava
diff --git a/opendj-server-legacy/resource/bin/_script-util.sh b/opendj-server-legacy/resource/bin/_script-util.sh
index 76fd882..b1c98fc 100644
--- a/opendj-server-legacy/resource/bin/_script-util.sh
+++ b/opendj-server-legacy/resource/bin/_script-util.sh
@@ -14,7 +14,7 @@
 #
 # Copyright 2008-2010 Sun Microsystems, Inc.
 # Portions Copyright 2010-2016 ForgeRock AS.
-
+# Portions Copyright 2019-2024 3A Systems, LLC.
 #
 # Display an error message
 #
@@ -184,11 +184,11 @@
   SCRIPT_NAME_ARG=-Dorg.opends.server.scriptName=${SCRIPT_NAME}
 	export SCRIPT_NAME_ARG
 	
-  "${OPENDJ_JAVA_BIN}" --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --version > /dev/null 2>&1
+  "${OPENDJ_JAVA_BIN}" --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --version > /dev/null 2>&1
   RESULT_CODE=${?}
   if test ${RESULT_CODE} -eq 0
   then
-  	export OPENDJ_JAVA_ARGS="$OPENDJ_JAVA_ARGS --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED"
+  	export OPENDJ_JAVA_ARGS="$OPENDJ_JAVA_ARGS --add-exports java.base/sun.security.x509=ALL-UNNAMED --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED --add-opens java.base/jdk.internal.loader=ALL-UNNAMED"
   fi
 }
 
diff --git a/opendj-server-legacy/src/main/assembly/opendj-archive-component.xml b/opendj-server-legacy/src/main/assembly/opendj-archive-component.xml
index 6f86790..5ae64db 100644
--- a/opendj-server-legacy/src/main/assembly/opendj-archive-component.xml
+++ b/opendj-server-legacy/src/main/assembly/opendj-archive-component.xml
@@ -13,6 +13,7 @@
   information: "Portions Copyright [year] [name of copyright owner]".
 
   Copyright 2015-2016 ForgeRock AS.
+  Portions Copyright 2018-2024 3A Systems, LLC
 -->
 <!-- OpenDJ final archive content descriptor -->
 <component>
@@ -382,7 +383,7 @@
 	</file>
     <!-- Adds Generated config.ldif file -->
     <file>
-      <source>${basedir}/resource/config/config.ldif</source>
+      <source>${project.build.directory}/template/config/config.ldif</source>
       <outputDirectory>template/config</outputDirectory>
     </file>
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/config/JMXMBean.java b/opendj-server-legacy/src/main/java/org/opends/server/config/JMXMBean.java
index a3ae326..b452231 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/config/JMXMBean.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/config/JMXMBean.java
@@ -13,7 +13,7 @@
  *
  * Portions Copyright 2006-2007-2008 Sun Microsystems, Inc.
  * Portions Copyright 2013-2016 ForgeRock AS.
- * Portions Copyright 2023 3A Systems LLC.
+ * Portions Copyright 2023-2024 3A Systems LLC.
  */
 package org.opends.server.config;
 
@@ -398,8 +398,11 @@
             get(attributeName, configEntryDN, op.getErrorMessage());
         throw new AttributeNotFoundException(message.toString());
       }
-
-      return getJmxAttribute(attributeName).getValue();
+      Attribute attr=getJmxAttribute(attributeName);
+      if (attr==null) {
+        throw new AttributeNotFoundException(attributeName);
+      }
+      return attr.getValue();
     }
     catch (AttributeNotFoundException e)
     {
diff --git a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java
index d299ea1..99ca0b9 100644
--- a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java
+++ b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/DsTableEntryImpl.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2008-2009 Sun Microsystems, Inc.
  * Portions Copyright 2014 ForgeRock AS.
+ * Portions Copyright 2024 3A Systems, LLC.
  */
 package org.opends.server.snmp;
 
@@ -142,8 +143,10 @@
                 ObjectName name = (ObjectName) iter.next();
                 Object value = this.monitor.getAttribute(name,
                         "ds-backend-entry-count");
-                if (value != null) {
+                if (value != null && value instanceof String) {
                     result = result + new Long((String) value);
+                }else if (value != null && value instanceof Long) {
+                    result = result + (Long)value;
                 }
             }
             return SNMPMonitor.gauge32Value(result);
diff --git a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
index 7b78067..7c8704b 100644
--- a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
+++ b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2008-2009 Sun Microsystems, Inc.
  * Portions Copyright 2014-2016 ForgeRock AS.
+ * Portions Copyright 2024 3A Systems, LLC
  */
 package org.opends.server.snmp;
 
@@ -249,12 +250,16 @@
         try {
             String url = "jar:" + file.toURI().toURL() + "!/";
             URL u = new URL(url);
-            URLClassLoader sysloader =
-              (URLClassLoader)ClassLoader.getSystemClassLoader();
-            Class sysclass = URLClassLoader.class;
-            Method method = sysclass.getDeclaredMethod("addURL", URL.class);
-            method.setAccessible(true);
-            method.invoke(sysloader, u);
+            ClassLoader sysloader =ClassLoader.getSystemClassLoader();
+            try {
+                Method method = sysloader.getClass().getDeclaredMethod("addURL", URL.class);
+                method.setAccessible(true);
+                method.invoke(sysloader, u);
+            }catch (NoSuchMethodException e) {
+                Method method = sysloader.getClass().getDeclaredMethod("appendToClassPathForInstrumentation", String.class);
+                method.setAccessible(true);
+                method.invoke(sysloader, file.toString());
+            }
         }
         catch (Throwable t) {
         }
diff --git a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java
index ec87c06..5aef3b8 100644
--- a/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java
+++ b/opendj-server-legacy/src/snmp/src/org/opends/server/snmp/SNMPMonitor.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2008 Sun Microsystems, Inc.
  * Portions Copyright 2012-2014 ForgeRock AS.
+ * Portions Copyright 2024 3A Systems, LLC.
  */
 package org.opends.server.snmp;
 
@@ -289,10 +290,10 @@
       {
         try
         {
-          Attribute attr = (Attribute) server.getAttribute(name, attribute);
+          Object attr = server.getAttribute(name, attribute);
           if (attr != null)
           {
-            return attr.getValue();
+            return attr instanceof  Attribute  ? ((Attribute) attr).getValue(): attr;
           }
         }
         catch (Exception ex)

--
Gitblit v1.10.0