From a091e85ec925fdb878303144f7b4f5e302e7c35f Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Fri, 21 Sep 2007 17:31:33 +0000
Subject: [PATCH] Fix for issues 2314 and 2238.
---
opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 173 insertions(+), 0 deletions(-)
diff --git a/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java b/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
index 08398dc..bf58266 100644
--- a/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
+++ b/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
@@ -27,7 +27,12 @@
package org.opends.guitools.statuspanel;
+import java.io.UnsupportedEncodingException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import org.opends.quicksetup.util.Utils;
+import org.opends.server.util.StaticUtils;
/**
* This class is used to represent a Base DN / Replica and is aimed to be
@@ -56,6 +61,10 @@
private int ageOfOldestMissingChange;
private Type type;
private String baseDn;
+ private String unescapedDn;
+ private static final Logger LOG =
+ Logger.getLogger(BaseDNDescriptor.class.getName());
+
/**
* Constructor for this class.
@@ -73,6 +82,15 @@
this.type = type;
this.ageOfOldestMissingChange = ageOfOldestMissingChange;
this.missingChanges = missingChanges;
+ try
+ {
+ this.unescapedDn = unescapeUtf8(baseDn);
+ }
+ catch (Throwable t)
+ {
+ this.unescapedDn = baseDn;
+ LOG.log(Level.WARNING, "Error unescaping dn: "+baseDn, t);
+ }
}
/**
@@ -85,6 +103,17 @@
}
/**
+ * Return the String DN associated with the base DN with unescaped UTF-8
+ * characters.
+ * @return the String DN associated with the base DN with unescaped UTF-8
+ * characters.
+ */
+ public String getUnescapedDn()
+ {
+ return unescapedDn;
+ }
+
+ /**
* {@inheritDoc}
*/
public boolean equals(Object v)
@@ -191,4 +220,148 @@
{
this.db = db;
}
+
+ private String unescapeUtf8(String v) throws UnsupportedEncodingException
+ {
+ byte[] stringBytes = v.getBytes("UTF-8");
+ byte[] decodedBytes = new byte[stringBytes.length];
+ int pos = 0;
+ for (int i = 0; i < stringBytes.length; i++)
+ {
+ if ((stringBytes[i] == '\\') && (i + 2 < stringBytes.length) &&
+ StaticUtils.isHexDigit(stringBytes[i+1]) &&
+ StaticUtils.isHexDigit(stringBytes[i+2]))
+ {
+ // Convert hex-encoded UTF-8 to 16-bit chars.
+ byte b;
+
+ byte escapedByte1 = stringBytes[++i];
+ switch (escapedByte1)
+ {
+ case '0':
+ b = (byte) 0x00;
+ break;
+ case '1':
+ b = (byte) 0x10;
+ break;
+ case '2':
+ b = (byte) 0x20;
+ break;
+ case '3':
+ b = (byte) 0x30;
+ break;
+ case '4':
+ b = (byte) 0x40;
+ break;
+ case '5':
+ b = (byte) 0x50;
+ break;
+ case '6':
+ b = (byte) 0x60;
+ break;
+ case '7':
+ b = (byte) 0x70;
+ break;
+ case '8':
+ b = (byte) 0x80;
+ break;
+ case '9':
+ b = (byte) 0x90;
+ break;
+ case 'a':
+ case 'A':
+ b = (byte) 0xA0;
+ break;
+ case 'b':
+ case 'B':
+ b = (byte) 0xB0;
+ break;
+ case 'c':
+ case 'C':
+ b = (byte) 0xC0;
+ break;
+ case 'd':
+ case 'D':
+ b = (byte) 0xD0;
+ break;
+ case 'e':
+ case 'E':
+ b = (byte) 0xE0;
+ break;
+ case 'f':
+ case 'F':
+ b = (byte) 0xF0;
+ break;
+ default:
+ throw new IllegalStateException("Unexpected byte: "+escapedByte1);
+ }
+
+ byte escapedByte2 = stringBytes[++i];
+ switch (escapedByte2)
+ {
+ case '0':
+ break;
+ case '1':
+ b |= 0x01;
+ break;
+ case '2':
+ b |= 0x02;
+ break;
+ case '3':
+ b |= 0x03;
+ break;
+ case '4':
+ b |= 0x04;
+ break;
+ case '5':
+ b |= 0x05;
+ break;
+ case '6':
+ b |= 0x06;
+ break;
+ case '7':
+ b |= 0x07;
+ break;
+ case '8':
+ b |= 0x08;
+ break;
+ case '9':
+ b |= 0x09;
+ break;
+ case 'a':
+ case 'A':
+ b |= 0x0A;
+ break;
+ case 'b':
+ case 'B':
+ b |= 0x0B;
+ break;
+ case 'c':
+ case 'C':
+ b |= 0x0C;
+ break;
+ case 'd':
+ case 'D':
+ b |= 0x0D;
+ break;
+ case 'e':
+ case 'E':
+ b |= 0x0E;
+ break;
+ case 'f':
+ case 'F':
+ b |= 0x0F;
+ break;
+ default:
+ throw new IllegalStateException("Unexpected byte: "+escapedByte2);
+ }
+
+ decodedBytes[pos++] = b;
+ }
+ else {
+ decodedBytes[pos++] = stringBytes[i];
+ }
+ }
+ return new String(decodedBytes, 0, pos, "UTF-8");
+ }
}
--
Gitblit v1.10.0