From 365b9111189ba7fda737e717e16ef795d184a4eb Mon Sep 17 00:00:00 2001
From: coulbeck <coulbeck@localhost>
Date: Wed, 18 Oct 2006 17:13:46 +0000
Subject: [PATCH] Fix for  [Issue 846] DN embedded in a monitor instance name.  Reviewed by gbellato.

---
 opends/src/server/org/opends/server/core/DirectoryServer.java |   34 ++++++++++++++++++++++++++++------
 1 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index dc3e681..abc190e 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -4608,9 +4608,7 @@
     // Try to register this monitor provider with an appropriate JMX MBean.
     try
     {
-      DN monitorDN =
-           DN.decode("cn=" + monitorProvider.getMonitorInstanceName() +
-                     ",cn=monitor");
+      DN monitorDN = getMonitorProviderDN(monitorProvider);
       JMXMBean mBean = directoryServer.mBeans.get(monitorDN);
       if (mBean == null)
       {
@@ -4652,9 +4650,7 @@
     {
       try
       {
-        DN monitorDN =
-             DN.decode("cn=" + provider.getMonitorInstanceName() +
-                       ",cn=monitor");
+        DN monitorDN = getMonitorProviderDN(provider);
         JMXMBean mBean = directoryServer.mBeans.get(monitorDN);
         if (mBean != null)
         {
@@ -7631,5 +7627,31 @@
       System.exit(1);
     }
   }
+
+  /**
+   * Construct the DN of a monitor provider entry.
+   * @param provider The monitor provider for which a DN is desired.
+   * @return The DN of the monitor provider entry.
+   */
+  public static DN getMonitorProviderDN(MonitorProvider provider)
+  {
+    String monitorName = provider.getMonitorInstanceName();
+    AttributeType cnType = getAttributeType(ATTR_COMMON_NAME);
+    DN monitorRootDN;
+    try
+    {
+      monitorRootDN = DN.decode(DN_MONITOR_ROOT);
+    }
+    catch (DirectoryException e)
+    {
+      // Cannot reach this point.
+      throw new RuntimeException();
+    }
+    RDN[] baseRDNs = monitorRootDN.getRDNComponents();
+    RDN[] rdns = new RDN[baseRDNs.length+1];
+    rdns[0] = new RDN(cnType, new AttributeValue(cnType, monitorName));
+    System.arraycopy(baseRDNs, 0, rdns, 1, baseRDNs.length);
+    return new DN(rdns);
+  }
 }
 

--
Gitblit v1.10.0