Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPalaniappan N <npalani@mono-cvs.ximian.com>2007-09-19 15:41:14 +0400
committerPalaniappan N <npalani@mono-cvs.ximian.com>2007-09-19 15:41:14 +0400
commitb0c3b161f2c7904cb57b7eb2f18b4d397f620267 (patch)
tree90fcac5416a6770d33df0d7d720d950187ddc80f /mcs/class/Novell.Directory.Ldap
parent2bac2fceea81ff3e212f00600636d771413171b6 (diff)
The Mono's library Novell.Directory.Ldap has been made to be on par with
the Novell's CSHARP LDAP SDK (version 2.1.8). All the changes have been commited together. Refer Changelog for the full log of changes. -Palaniappan. svn path=/trunk/mcs/; revision=85999
Diffstat (limited to 'mcs/class/Novell.Directory.Ldap')
-rw-r--r--mcs/class/Novell.Directory.Ldap/ChangeLog57
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir.EventData/ValueEventData.cs14
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events/LdapEventSource.cs5
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/BackupRestoreConstants.cs69
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupRequest.cs192
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupResponse.cs263
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapRestoreRequest.cs197
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcIntermediateResponse.cs2
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcModifyDNRequest.cs4
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/DN.cs3
-rwxr-xr-xmcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.dll.sources4
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.vmwcsproj4
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Connection.cs27
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapAttributeSchema.cs3
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapException.cs11
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapResponse.cs3
-rw-r--r--mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Message.cs5
-rwxr-xr-xmcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap20.csproj8
18 files changed, 853 insertions, 18 deletions
diff --git a/mcs/class/Novell.Directory.Ldap/ChangeLog b/mcs/class/Novell.Directory.Ldap/ChangeLog
index eba803a256c..b7b128ec104 100644
--- a/mcs/class/Novell.Directory.Ldap/ChangeLog
+++ b/mcs/class/Novell.Directory.Ldap/ChangeLog
@@ -1,3 +1,60 @@
+2007-19-09 Palaniappan N <npalaniappan@novell.com>
+
+ The folder is made in sync. with the Novell Forge's C# LDAP SDK with the following updates:
+
+ *Novell.Directory.Ldap :
+ - Connection.cs: Checked the condition, whether the sockets
+ created by BOTH SSL and cleartext connections are open / null
+ in Connection.cs
+ - Connection.cs: Added a new catch block in Connection.cs to
+ catch the socket exceptions.
+ - Connection.cs: Version has been updated to 2.1.8
+ - LdapResponse.cs: Changes made to monitor the events which
+ caused problems with eDirectory 8.8 SP1 release, because of the
+ LdapResponse structure.
+ - LdapException.cs: A fix for the bug which deals about the
+ exceptions caused while using events with lots of create/modify events
+ - LdapAttributeSchema.cs: Superior was not set properly. Corrected.
+ - Message.cs: To fix the issue of seeing duplicate records while searching
+
+ *Novell.Directory.Ldap.Extensions :
+ - Added support for Backup-Restore of LDAP by including the following classes
+ # LdapBackupRequest.cs
+ # LdapBackupResponse.cs
+ # LdapRestoreRequest.cs
+ # BackupRestoreConstants.cs
+
+ *Novell.Directory.Ldap.Utilclass :
+ - DN.cs: Done a fix in by correcting the misplaced decrement operator
+ which caused malfunctioning of isDescendantOf() method
+
+ *Novell.Directory.Ldap.Events :
+ - LdapEventSource.cs: Exception has been thrown in case of supply of
+ negative sleep interval
+
+ *Novell.Directory.Ldap.Events.Edir.EventData :
+ - ValueEventData.cs: A new property BinaryData has been implemented in the
+ class to enable applications retrieve the binary data as such from the
+ ASN1OctetString with out converting it in to a String
+
+ *Novell.Directory.Ldap.Rfc2251 :
+ - RfcIntermediateResponse.cs: The variable m_responseNameIndex has been
+ modified to get value 0 also to fix an issue related to parsing the response.
+ - RfcModifyDNRequest.cs: SetIdentifier method has been applied to newSuperior
+ to make rename work properly with all LDAP servers.
+
+ * Changelog:
+ - Updated
+
+ * Novell.Directory.Ldap.dll.sources:
+ - Added the new file entries of the Backup-Restore Extension
+
+ * Novell.Directory.Ldap.vmwcsproj:
+ - Added the new file entries of the Backup-Restore Extension
+
+ * Novell.Directory.Ldap20.csproj:
+ - Added the new file entries of the Backup-Restore Extension
+
2005-12-06 Konstantin Triger <kostat@mainsoft.com>
* Novell.Directory.Ldap.vmwcsproj: fixing conditional compilation constants.
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir.EventData/ValueEventData.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir.EventData/ValueEventData.cs
index 23a7720d946..ce3a3575023 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir.EventData/ValueEventData.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir.EventData/ValueEventData.cs
@@ -68,6 +68,14 @@ namespace Novell.Directory.Ldap.Events.Edir.EventData
}
}
+ protected byte[] binData;
+ public byte[] BinaryData
+ {
+ get
+ {
+ return binData;
+ }
+ }
protected string strEntry;
public string Entry
{
@@ -118,6 +126,7 @@ namespace Novell.Directory.Ldap.Events.Edir.EventData
: base(eventDataType, message)
{
int[] length = new int[1];
+ Asn1OctetString octData;
strPerpetratorDN =
((Asn1OctetString) decoder.decode(decodedData, length)).stringValue();
@@ -134,7 +143,9 @@ namespace Novell.Directory.Ldap.Events.Edir.EventData
timeStampObj =
new DSETimeStamp((Asn1Sequence) decoder.decode(decodedData, length));
- strData = ((Asn1OctetString) decoder.decode(decodedData, length)).stringValue();
+ octData = ((Asn1OctetString) decoder.decode(decodedData, length));
+ strData = octData.stringValue();
+ binData = SupportClass.ToByteArray(octData.byteValue());
nVerb = ((Asn1Integer) decoder.decode(decodedData, length)).intValue();
@@ -152,6 +163,7 @@ namespace Novell.Directory.Ldap.Events.Edir.EventData
buf.AppendFormat("(Attribute={0})", strAttribute);
buf.AppendFormat("(Classid={0})", strClassId);
buf.AppendFormat("(Data={0})", strData);
+ buf.AppendFormat("(Data={0})", binData);
buf.AppendFormat("(Entry={0})", strEntry);
buf.AppendFormat("(Perpetrator={0})", strPerpetratorDN);
buf.AppendFormat("(Syntax={0})", strSyntax);
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events/LdapEventSource.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events/LdapEventSource.cs
index 82731d97a85..3135bc2f9c5 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events/LdapEventSource.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events/LdapEventSource.cs
@@ -66,7 +66,10 @@ namespace Novell.Directory.Ldap.Events
}
set
{
- sleep_interval = value;
+ if(value <= 0)
+ throw new ArgumentOutOfRangeException("SleepInterval","cannot take the negative or zero values ");
+ else
+ sleep_interval = value;
}
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/BackupRestoreConstants.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/BackupRestoreConstants.cs
new file mode 100644
index 00000000000..088ddf48d6e
--- /dev/null
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/BackupRestoreConstants.cs
@@ -0,0 +1,69 @@
+/******************************************************************************
+* The MIT License
+* Copyright (c) 2006 Novell Inc. www.novell.com
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the Software), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*******************************************************************************/
+//
+// Novell.Directory.Ldap.Extensions.BackupRestoreConstants.cs
+//
+// Author:
+// Palaniappan N (NPalaniappan@novell.com)
+//
+// (C) 2006 Novell, Inc (http://www.novell.com)
+//
+
+using System;
+
+namespace Novell.Directory.Ldap.Extensions
+{
+ public class BackupRestoreConstants
+ {
+
+ /**
+ * A constant for eDirectory LDAP Based Backup Request OID.
+ */
+ public const String NLDAP_LDAP_BACKUP_REQUEST = "2.16.840.1.113719.1.27.100.96";
+
+ /**
+ * A constant for eDirectory LDAP Based Backup Response OID.
+ */
+ public const String NLDAP_LDAP_BACKUP_RESPONSE = "2.16.840.1.113719.1.27.100.97";
+
+ /**
+ * A constant for eDirectory LDAP Based Restore Request OID.
+ */
+ public const String NLDAP_LDAP_RESTORE_REQUEST = "2.16.840.1.113719.1.27.100.98";
+
+
+ /**
+ * A constant for eDirectory LDAP Based Restore Response OID.
+ */
+ public const String NLDAP_LDAP_RESTORE_RESPONSE = "2.16.840.1.113719.1.27.100.99";
+
+ /**
+ * Default constructor
+ */
+ public BackupRestoreConstants():base()
+ {
+ return;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupRequest.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupRequest.cs
new file mode 100644
index 00000000000..bb9ba0f71a3
--- /dev/null
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupRequest.cs
@@ -0,0 +1,192 @@
+/******************************************************************************
+* The MIT License
+* Copyright (c) 2006 Novell Inc. www.novell.com
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the Software), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*******************************************************************************/
+//
+// Novell.Directory.Ldap.Extensions.BackupRestoreConstants.cs
+//
+// Author:
+// Palaniappan N (NPalaniappan@novell.com)
+//
+// (C) 2006 Novell, Inc (http://www.novell.com)
+//
+
+
+using System;
+using System.IO;
+
+using Novell.Directory.Ldap;
+using Novell.Directory.Ldap.Asn1;
+
+/**
+*
+* This class provides an LDAP interface for object based backup
+* of eDirectory objects. The backup API not only get the objects
+* but all the DS level attributes associated with the objects.
+*
+* <p>The information available includes such items as modification timestamp,
+* revision,data blob consisting of backup data of any eDirectory Object. The API
+* support backing of both non-encrypted and encrypted objects
+* </p>
+*
+* <p>To get information about any eDirectory Object, you must
+* create an instance of this class and then call the
+* extendedOperation method with this object as the required
+* LdapExtendedOperation parameter.</p>
+*
+* <p>The getLdapBackupRequest extension uses the following OID:<br>
+* &nbsp;&nbsp;&nbsp;2.16.840.1.113719.1.27.100.96</p><br>
+*
+* <p>The requestValue has the following format:<br>
+*
+* requestValue ::=<br>
+* &nbsp;&nbsp;&nbsp;&nbsp; objectDN&nbsp;&nbsp;&nbsp; LDAPDN<br>
+* &nbsp;&nbsp;&nbsp;&nbsp; mts(modification timestamp) INTEGER<br>
+* &nbsp;&nbsp;&nbsp;&nbsp; revision&nbsp;&nbsp;&nbsp; INTEGER<br>
+* &nbsp;&nbsp;&nbsp;&nbsp; passwd&nbsp;&nbsp;&nbsp; OCTET STRING</p>
+*/
+
+namespace Novell.Directory.Ldap.Extensions
+{
+ public class LdapBackupRequest: LdapExtendedOperation
+ {
+
+ static LdapBackupRequest()
+ {
+ /*
+ * Register the extendedresponse class which is returned by the server
+ * in response to a LdapBackupRequest
+ */
+ try
+ {
+ LdapExtendedResponse.register(
+ BackupRestoreConstants.NLDAP_LDAP_BACKUP_RESPONSE,
+ Type.GetType("Novell.Directory.Ldap.Extensions.LdapBackupResponse"));
+ }
+ catch (TypeLoadException e)
+ {
+ Console.Error.WriteLine("Could not register Extended Response - Class not found");
+ }
+ catch (Exception e)
+ {
+ Console.Error.WriteLine(e.StackTrace);
+ }
+ }
+
+ /**
+ *
+ * Constructs an extended operations object for getting data about any Object.
+ *
+ * @param objectDN The DN of the object to be backed up
+ * <br>
+ * @param passwd The encrypted password required for the object to
+ * be backed up
+ * <br>
+ * @param stateInfo The state information of the object to backup.
+ * This parameter is a String which contains combination of modification
+ * timestamp and revision number of object being backed up. The format
+ * of both modification time stamp and revision should pertain to eDirectoty
+ * standard format of taking modification timestamp and revision.
+ * Separator being used between these two is a '+' character.<br>
+ *
+ *
+ * @exception LdapException A general exception which includes an error
+ * message and an LDAP error code.
+ */
+ public LdapBackupRequest(String objectDN, byte[] passwd, String stateInfo):
+ base(BackupRestoreConstants.NLDAP_LDAP_BACKUP_REQUEST, null)
+ {
+
+ int mts; // Modifaction time stamp of the Object
+ int revision; // Revision number of the Object
+ String mtsStr, revisionStr;
+
+ try
+ {
+ if (objectDN == null)
+ throw new ArgumentException("PARAM_ERROR");
+
+ //If encrypted password has null reference make it null String
+ if(passwd == null)
+ passwd = System.Text.Encoding.UTF8.GetBytes("");
+
+
+ if (stateInfo == null)
+ {
+ // If null reference is passed in stateInfo initialize both
+ // mts and revision
+ mts = 0;
+ revision = 0;
+ }
+ else
+ {
+ // Parse the passed stateInfo to obtain mts and revision
+ stateInfo = stateInfo.Trim();
+ int index = stateInfo.IndexOf('+');
+ if(index == -1)
+ throw new ArgumentException("PARAM_ERROR");
+ mtsStr = stateInfo.Substring(0, index);
+ revisionStr = stateInfo.Substring(index + 1);
+ try
+ {
+ mts = int.Parse(mtsStr);
+ }
+ catch (FormatException e)
+ {
+ throw new LdapLocalException("Invalid Modification Timestamp send in the request", LdapException.ENCODING_ERROR);
+ }
+ try
+ {
+ revision = int.Parse(revisionStr);
+ }
+ catch (FormatException e)
+ {
+ throw new LdapLocalException(
+ "Invalid Revision send in the request",
+ LdapException.ENCODING_ERROR);
+ }
+ }
+
+ MemoryStream encodedData = new MemoryStream();
+ LBEREncoder encoder = new LBEREncoder();
+
+ // Encode data of objectDN, mts and revision
+ Asn1OctetString asn1_objectDN = new Asn1OctetString(objectDN);
+ Asn1Integer asn1_mts = new Asn1Integer(mts);
+ Asn1Integer asn1_revision = new Asn1Integer(revision);
+ Asn1OctetString asn1_passwd = new Asn1OctetString(SupportClass.ToSByteArray(passwd));
+
+ asn1_objectDN.encode(encoder, encodedData);
+ asn1_mts.encode(encoder, encodedData);
+ asn1_revision.encode(encoder, encodedData);
+ asn1_passwd.encode(encoder, encodedData);
+
+ // set the value of operation specific data
+ setValue(SupportClass.ToSByteArray(encodedData.ToArray()));
+
+ }
+ catch (IOException ioe)
+ {
+ throw new LdapException("ENCODING_ERROR", LdapException.ENCODING_ERROR, (String) null);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupResponse.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupResponse.cs
new file mode 100644
index 00000000000..7fc3a44dc02
--- /dev/null
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapBackupResponse.cs
@@ -0,0 +1,263 @@
+/******************************************************************************
+* The MIT License
+* Copyright (c) 2006 Novell Inc. www.novell.com
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the Software), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*******************************************************************************/
+//
+// Novell.Directory.Ldap.Extensions.BackupRestoreConstants.cs
+//
+// Author:
+// Palaniappan N (NPalaniappan@novell.com)
+//
+// (C) 2006 Novell, Inc (http://www.novell.com)
+//
+
+using System;
+using System.IO;
+
+using Novell.Directory.Ldap;
+using Novell.Directory.Ldap.Asn1;
+using Novell.Directory.Ldap.Rfc2251;
+
+
+
+/**
+ * This object represent the data returned from a LdapBackupRequest.
+ *
+ * <p>An object in this class is generated from an ExtendedResponse object
+ * using the ExtendedResponseFactory class.</p>
+ *
+ * <p>The LdapBackupResponse extension uses the following OID:<br>
+ * &nbsp;&nbsp;&nbsp;2.16.840.1.113719.1.27.100.97</p>
+ *
+ */
+
+namespace Novell.Directory.Ldap.Extensions
+{
+
+ public class LdapBackupResponse:LdapExtendedResponse
+ {
+
+ private int bufferLength; //Represents the length of backup data
+ private String stateInfo; //Represent the state Information of data
+
+ /*
+ * The String representing the number of chunks and each elements in chunk
+ * array as returned by server.
+ * Data from server is parsed as follows before sending to any Application::
+ * no_of_chunks;sizeOf(chunk1);sizeOf(chunk2)…sizeOf(chunkn)
+ * where
+ * no_of_chunks => Represents the number of chunks of data returned from server
+ * sizeOf(chunkn) => Represents the size of data in chunkn
+ */
+ private String chunkSizesString;
+
+ /*
+ * Actual data of returned eDirectoty Object in byte[]
+ */
+ private byte[] returnedBuffer;
+
+ /**
+ * Constructs an object from the responseValue which contains the backup data.
+ * <p>The constructor parses the responseValue which has the following
+ * format:<br>
+ * responseValue ::=<br>
+ * <p>databufferLength ::= INTEGER <br>
+ * mts(modification time stamp) ::= INTEGER<br>
+ * revision ::= INTEGER<br>
+ * returnedBuffer ::= OCTET STRING<br>
+ * dataChunkSizes ::= <br>
+ * SEQUENCE{<br>
+ * noOfChunks INTEGER<br>
+ * SET of [<br>
+ * SEQUENCE of {eachChunksize INTEGER}]<br>
+ * }</p>
+ *
+ * @exception IOException The responseValue could not be decoded.
+ */
+
+ public LdapBackupResponse(RfcLdapMessage rfcMessage): base(rfcMessage)
+ {
+ int modificationTime = 0; // Modifaction timestamp of the Object
+ int revision = 0; // Revision number of the Object
+ int chunksSize = 0;
+ int[] chunks = null; //Holds size of each chunks returned from server
+
+ //Verify if returned ID is not proper
+ if (ID == null || !(ID.Equals(BackupRestoreConstants.NLDAP_LDAP_BACKUP_RESPONSE)))
+ throw new IOException("LDAP Extended Operation not supported");
+
+ if (ResultCode == LdapException.SUCCESS) {
+ // Get the contents of the reply
+
+ byte[] returnedValue = SupportClass.ToByteArray(this.Value);
+ if (returnedValue == null)
+ throw new Exception("LDAP Operations error. No returned value.");
+
+ // Create a decoder object
+ LBERDecoder decoder = new LBERDecoder();
+
+ if (decoder == null)
+ throw new Exception("Decoding error");
+
+ // Parse the parameters in the order
+ MemoryStream currentPtr = new MemoryStream(returnedValue);
+
+ // Parse bufferLength
+ Asn1Integer asn1_bufferLength = (Asn1Integer) decoder
+ .decode(currentPtr);
+ if (asn1_bufferLength == null)
+ throw new IOException("Decoding error");
+ bufferLength = asn1_bufferLength.intValue();
+
+ // Parse modificationTime
+ Asn1Integer asn1_modificationTime = (Asn1Integer) decoder
+ .decode(currentPtr);
+ if (asn1_modificationTime == null)
+ throw new IOException("Decoding error");
+ modificationTime = asn1_modificationTime.intValue();
+
+ // Parse revision
+ Asn1Integer asn1_revision = (Asn1Integer) decoder
+ .decode(currentPtr);
+ if (asn1_revision == null)
+ throw new IOException("Decoding error");
+ revision = asn1_revision.intValue();
+
+ //Format stateInfo to contain both modificationTime and revision
+ this.stateInfo = modificationTime + "+" + revision;
+
+ // Parse returnedBuffer
+ Asn1OctetString asn1_returnedBuffer = (Asn1OctetString) decoder.decode(currentPtr);
+ if (asn1_returnedBuffer == null)
+ throw new IOException("Decoding error");
+
+ returnedBuffer = SupportClass.ToByteArray(asn1_returnedBuffer.byteValue());
+
+
+ /*
+ * Parse chunks array
+ * Chunks returned from server is encoded as shown below::
+ * SEQUENCE{
+ * chunksSize INTEGER
+ * SET of [
+ * SEQUENCE of {eacChunksize INTEGER}]
+ * }
+ */
+
+ Asn1Sequence asn1_chunksSeq = (Asn1Sequence) decoder
+ .decode(currentPtr);
+ if (asn1_chunksSeq == null)
+ throw new IOException("Decoding error");
+
+ //Get number of chunks returned from server
+ chunksSize = ((Asn1Integer)asn1_chunksSeq.get_Renamed(0)).intValue();
+
+ //Construct chunks array
+ chunks = new int[chunksSize];
+
+ Asn1Set asn1_chunksSet = (Asn1Set)asn1_chunksSeq.get_Renamed(1);
+ //Iterate through asn1_chunksSet and put each size into chunks array
+
+ for (int index = 0; index < chunksSize; index++)
+ {
+ Asn1Sequence asn1_eachSeq = (Asn1Sequence)asn1_chunksSet.get_Renamed(index);
+ chunks[index] = ((Asn1Integer)asn1_eachSeq.get_Renamed(0)).intValue();
+ }
+
+ //Construct a temporary StringBuffer and append chunksSize, each size
+ //element in chunks array and actual data of eDirectoty Object
+ System.Text.StringBuilder tempBuffer = new System.Text.StringBuilder();
+ tempBuffer.Append(chunksSize);
+ tempBuffer.Append(";");
+ int i = 0;
+
+ for (; i < (chunksSize - 1); i++)
+ {
+ tempBuffer.Append(chunks[i]);
+ tempBuffer.Append(";");
+ }
+
+ tempBuffer.Append(chunks[i]);
+
+ //Assign tempBuffer to parsedString to be returned to Application
+ this.chunkSizesString = tempBuffer.ToString();
+ }
+ else
+ {
+ //Intialize all these if getResultCode() != LdapException.SUCCESS
+ this.bufferLength = 0;
+ this.stateInfo = null;
+ this.chunkSizesString = null;
+ this.returnedBuffer = null;
+ }
+
+ }
+
+ /**
+ * Returns the data buffer length
+ *
+ * @return bufferLength as integer.
+ */
+ public int getBufferLength()
+ {
+ return bufferLength;
+ }
+
+ /**
+ * Returns the stateInfo of returned eDirectory Object.
+ * This is combination of MT (Modification Timestamp) and
+ * Revision value with char '+' as separator between two.<br>
+ * Client application if want to use both MT and Revision need to break
+ * this string to get both these data.
+ *
+ * @return stateInfo as String.
+ */
+ public String getStatusInfo()
+ {
+ return stateInfo;
+ }
+
+ /**
+ * Returns the data in String as::<br>
+ * no_of_chunks;sizeOf(chunk1);sizeOf(chunk2)…sizeOf(chunkn)<br>
+ * where<br>
+ * no_of_chunks => Represents the number of chunks of data returned from server<br>
+ * sizeOf(chunkn) => Represents the size of data in chunkn<br>
+ *
+ * @return chunkSizesString as String.
+ */
+ public String getChunkSizesString()
+ {
+ return chunkSizesString;
+ }
+
+ /**
+ * Returns the data buffer as byte[]
+ *
+ * @return returnedBuffer as byte[].
+ */
+ public byte[] getReturnedBuffer()
+ {
+ return returnedBuffer;
+ }
+
+}
+} \ No newline at end of file
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapRestoreRequest.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapRestoreRequest.cs
new file mode 100644
index 00000000000..e9f3e84a015
--- /dev/null
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Extensions/LdapRestoreRequest.cs
@@ -0,0 +1,197 @@
+/******************************************************************************
+* The MIT License
+* Copyright (c) 2006 Novell Inc. www.novell.com
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the Software), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*******************************************************************************/
+//
+// Novell.Directory.Ldap.Extensions.BackupRestoreConstants.cs
+//
+// Author:
+// Palaniappan N (NPalaniappan@novell.com)
+//
+// (C) 2006 Novell, Inc (http://www.novell.com)
+//
+
+
+using System;
+using System.IO;
+
+using Novell.Directory.Ldap;
+using Novell.Directory.Ldap.Asn1;
+
+/**
+*
+* This class provides an LDAP interface for object based
+* restore of eDirectory objects.
+*
+* <p>The information need for restore includes such items as object DN,
+* data buffer length, string containing the number of chunks and each chunk
+* elements representing the size of each chunk, data blob in byte[]. The API
+* support restoring of both non-encrypted and encrypted objects.
+* </p>
+*
+* <p>To send this request to eDirectory, you must
+* create an instance of this class and then call the
+* extendedOperation method with this object as the required
+* LdapExtendedOperation parameter.</p><br>
+*
+* <p>The getLdapRestoreRequest extension uses the following OID:<br>
+* &nbsp;&nbsp;&nbsp;2.16.840.1.113719.1.27.100.98</p><br>
+*
+* <p>The requestValue has the following format:<br>
+*
+* <p>requestValue ::=<br>
+* objectDN ::= LDAPDN<br>
+* passwd ::= OCTET STRING<br>
+* bufferLength ::= INTEGER<br>
+* retunedBuffer::= OCTET STRING<br>
+* dataChunkSizes ::=<br>
+* SEQUENCE {<br>
+* noOfChunks INTEGER<br>
+* SET of [<br>
+* SEQUENCE of {eacChunksize INTEGER}]<br>
+* }<br> </p>
+*/
+
+namespace Novell.Directory.Ldap.Extensions
+{
+ public class LdapRestoreRequest : LdapExtendedOperation
+ {
+ /**
+ *
+ * Constructs an extended operations object which contains the ber encoded
+ * restore data.
+ *
+ * @param objectDN The object DN to restore
+ * <br>
+ * @param passwd The encrypted password required for the object to
+ * be backed up
+ * <br>
+ * @param bufferLength The length of backed up data
+ * <br>
+ * @param chunkSizesString The String containing number of chunks and
+ * each chunk elements representing chunk sizes
+ * <br>
+ * @param returnedBuffer The actual data in byte[]
+ * <br><br>
+ * @exception LdapException A general exception which includes an error
+ * message and an LDAP error code.
+ */
+
+ public LdapRestoreRequest(String objectDN, byte[] passwd,
+ int bufferLength, String chunkSizesString, byte[] returnedBuffer):
+ base(BackupRestoreConstants.NLDAP_LDAP_RESTORE_REQUEST, null)
+ {
+ try
+ {
+ //Verify the validity of arguments
+ if (objectDN == null || bufferLength == 0 ||
+ chunkSizesString == null || returnedBuffer == null)
+ throw new ArgumentException("PARAM_ERROR");
+
+ //If encrypted password has null reference make it null String
+ if(passwd == null)
+ passwd = System.Text.Encoding.UTF8.GetBytes("");
+
+ /*
+ * From the input argument chunkSizesString get::
+ * chunkSize => Represents the number of chunks of data returned from server
+ * sizeOf each chunk => int represents the size of each chunk
+ */
+ int index;
+ int chunkSize;
+ int[] chunks = null;
+ index = chunkSizesString.IndexOf(';');
+ try
+ {
+ chunkSize = int.Parse(chunkSizesString.Substring(0, index));
+ }
+ catch (FormatException e)
+ {
+ throw new LdapLocalException(
+ "Invalid data buffer send in the request",
+ LdapException.ENCODING_ERROR);
+ }
+ //Return exception if chunkSize == 0
+ if (chunkSize == 0)
+ throw new ArgumentException("PARAM_ERROR");
+
+ chunkSizesString = chunkSizesString.Substring(index + 1);
+
+ int chunkIndex;
+ //Construct chunks array
+ chunks = new int[chunkSize];
+ /*
+ * Iterate through each member in buffer and
+ * assign to chunks array elements
+ */
+ for (int i = 0; i < chunkSize; i++)
+ {
+ chunkIndex = chunkSizesString.IndexOf(';');
+ if(chunkIndex == -1)
+ {
+ chunks[i] = int.Parse(chunkSizesString);
+ break;
+ }
+ chunks[i] = int.Parse(chunkSizesString.Substring(0,
+ chunkIndex));
+ chunkSizesString = chunkSizesString.Substring(chunkIndex + 1);
+ }
+
+ MemoryStream encodedData = new MemoryStream();
+ LBEREncoder encoder = new LBEREncoder();
+
+ //Form objectDN, passwd, bufferLength, data byte[] as ASN1 Objects
+ Asn1OctetString asn1_objectDN = new Asn1OctetString(objectDN);
+ Asn1OctetString asn1_passwd = new Asn1OctetString(SupportClass.ToSByteArray(passwd));
+ Asn1Integer asn1_bufferLength = new Asn1Integer(bufferLength);
+ Asn1OctetString asn1_buffer = new Asn1OctetString(SupportClass.ToSByteArray(returnedBuffer));
+
+ //Form the chunks sequence to be passed to Server
+ Asn1Sequence asn1_chunksSeq = new Asn1Sequence();
+ asn1_chunksSeq.add(new Asn1Integer(chunkSize));
+ Asn1Set asn1_chunksSet = new Asn1Set();
+ for (int i = 0; i < chunkSize; i++)
+ {
+ Asn1Integer tmpChunk = new Asn1Integer(chunks[i]);
+ Asn1Sequence tmpSeq = new Asn1Sequence();
+ tmpSeq.add(tmpChunk);
+ asn1_chunksSet.add(tmpSeq);
+ }
+ asn1_chunksSeq.add(asn1_chunksSet);
+
+ //Encode data to send to server
+ asn1_objectDN.encode(encoder, encodedData);
+ asn1_passwd.encode(encoder, encodedData);
+ asn1_bufferLength.encode(encoder, encodedData);
+ asn1_buffer.encode(encoder, encodedData);
+ asn1_chunksSeq.encode(encoder, encodedData);
+
+ // set the value of operation specific data
+ setValue(SupportClass.ToSByteArray(encodedData.ToArray()));
+
+ }
+ catch (IOException ioe)
+ {
+ throw new LdapException("ENCODING_ERROR", LdapException.ENCODING_ERROR, (String) null);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcIntermediateResponse.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcIntermediateResponse.cs
index f5a705833b3..236e4b9afd4 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcIntermediateResponse.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcIntermediateResponse.cs
@@ -168,7 +168,7 @@ namespace Novell.Directory.Ldap.Rfc2251
public RfcLdapOID getResponseName()
{
- return (m_responseNameIndex != 0) ? (RfcLdapOID)get_Renamed(m_responseNameIndex)
+ return (m_responseNameIndex >= 0) ? (RfcLdapOID)get_Renamed(m_responseNameIndex)
: null;
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcModifyDNRequest.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcModifyDNRequest.cs
index 72d4ff9a4ba..ad51fa020b4 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcModifyDNRequest.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Rfc2251/RfcModifyDNRequest.cs
@@ -64,7 +64,9 @@ namespace Novell.Directory.Ldap.Rfc2251
add(entry);
add(newrdn);
add(deleteoldrdn);
- if (newSuperior != null) {
+ if (newSuperior != null)
+ {
+ newSuperior.setIdentifier(new Asn1Identifier(Asn1Identifier.CONTEXT,false,0));
add(newSuperior);
}
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/DN.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/DN.cs
index ff17c6b8ab8..1f57f6c14f5 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/DN.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Utilclass/DN.cs
@@ -694,8 +694,9 @@ namespace Novell.Directory.Ldap.Utilclass
int j = this.rdnList.Count - 1; //index to an RDN of the ContainedDN
//Search from the end of the DN for an RDN that matches the end RDN of
//containerDN.
- while (!((RDN) this.rdnList[j--]).equals((RDN) containerDN.rdnList[i]))
+ while (!((RDN) this.rdnList[j]).equals((RDN) containerDN.rdnList[i]))
{
+ j--;
if (j <= 0)
return false;
//if the end RDN of containerDN does not have any equal
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.dll.sources b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.dll.sources
index da4cd2a142d..d5010fd1970 100755
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.dll.sources
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.dll.sources
@@ -173,6 +173,10 @@ Novell.Directory.Ldap.Extensions/MergePartitionsRequest.cs
Novell.Directory.Ldap.Extensions/SplitPartitionRequest.cs
Novell.Directory.Ldap.Extensions/NamingContextConstants.cs
Novell.Directory.Ldap.Extensions/TriggerBackgroundProcessRequest.cs
+Novell.Directory.Ldap.Extensions/BackupRestoreConstants.cs
+Novell.Directory.Ldap.Extensions/LdapBackupRequest.cs
+Novell.Directory.Ldap.Extensions/LdapBackupResponse.cs
+Novell.Directory.Ldap.Extensions/LdapRestoreRequest.cs
Novell.Directory.Ldap.Controls/LdapEntryChangeControl.cs
Novell.Directory.Ldap.Controls/LdapPersistSearchControl.cs
Novell.Directory.Ldap.Controls/LdapSortControl.cs
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.vmwcsproj b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.vmwcsproj
index 6a97c60fbf5..3f0b9efbda5 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.vmwcsproj
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.vmwcsproj
@@ -160,6 +160,10 @@
<File RelPath="Novell.Directory.Ldap.Extensions\SplitOrphanPartitionRequest.cs" SubType="Code" BuildAction="Compile"/>
<File RelPath="Novell.Directory.Ldap.Extensions\SplitPartitionRequest.cs" SubType="Code" BuildAction="Compile"/>
<File RelPath="Novell.Directory.Ldap.Extensions\TriggerBackgroundProcessRequest.cs" SubType="Code" BuildAction="Compile"/>
+ <File RelPath="Novell.Directory.Ldap.Extensions\BackupRestoreConstants.cs" SubType="Code" BuildAction="Compile"/>
+ <File RelPath="Novell.Directory.Ldap.Extensions\LdapBackupRequest.cs" SubType="Code" BuildAction="Compile"/>
+ <File RelPath="Novell.Directory.Ldap.Extensions\LdapBackupResponse.cs" SubType="Code" BuildAction="Compile"/>
+ <File RelPath="Novell.Directory.Ldap.Extensions\LdapRestoreRequest.cs" SubType="Code" BuildAction="Compile"/>
<File RelPath="Novell.Directory.Ldap.Rfc2251\RfcAbandonRequest.cs" SubType="Code" BuildAction="Compile"/>
<File RelPath="Novell.Directory.Ldap.Rfc2251\RfcAddRequest.cs" SubType="Code" BuildAction="Compile"/>
<File RelPath="Novell.Directory.Ldap.Rfc2251\RfcAddResponse.cs" SubType="Code" BuildAction="Compile"/>
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Connection.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Connection.cs
index f280fcd9727..e9df5a92fe5 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Connection.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Connection.cs
@@ -810,10 +810,20 @@ namespace Novell.Directory.Ldap
}
}
+ catch (System.Net.Sockets.SocketException se)
+ {
+ // Unable to connect to server host:port
+ freeWriteSemaphore(semId);
+ sock = null;
+ socket = null;
+ throw new LdapException(ExceptionMessages.CONNECTION_ERROR, new System.Object[] { host, port }, LdapException.CONNECT_ERROR, null, se);
+ }
catch (System.IO.IOException ioe)
{
// Unable to connect to server host:port
- // freeWriteSemaphore(semId);
+ freeWriteSemaphore(semId);
+ sock = null;
+ socket = null;
throw new LdapException(ExceptionMessages.CONNECTION_ERROR, new System.Object[]{host, port}, LdapException.CONNECT_ERROR, null, ioe);
}
// Set host and port
@@ -1117,10 +1127,11 @@ namespace Novell.Directory.Ldap
}
bindProperties = null;
- if (socket != null)
+ if (socket != null || sock != null)
{
#if !TARGET_JVM
// Just before closing the sockets, abort the reader thread
+ if ((reader != null) && (reason != "reader: thread stopping"))
reader.Abort();
#endif
// Close the socket
@@ -1252,7 +1263,15 @@ namespace Novell.Directory.Ldap
*/
// NetworkStream nstream = new NetworkStream(this.socket,true);
// Load Mono.Security.dll
- Assembly a = Assembly.LoadFrom("Mono.Security.dll");
+ Assembly a = null;
+ try
+ {
+ a = Assembly.LoadFrom("Mono.Security.dll");
+ }
+ catch(System.IO.FileNotFoundException)
+ {
+ throw new LdapException(ExceptionMessages.SSL_PROVIDER_MISSING, LdapException.SSL_PROVIDER_NOT_FOUND, null);
+ }
Type tSslClientStream = a.GetType("Mono.Security.Protocol.Tls.SslClientStream");
BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public |
BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
@@ -1679,7 +1698,7 @@ namespace Novell.Directory.Ldap
static Connection()
{
nameLock = new System.Object();
- sdk = new System.Text.StringBuilder("2.1.4").ToString();
+ sdk = new System.Text.StringBuilder("2.1.8").ToString();
protocol = 3;
}
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapAttributeSchema.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapAttributeSchema.cs
index 5e1cb867c46..0255a1fb09e 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapAttributeSchema.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapAttributeSchema.cs
@@ -277,6 +277,7 @@ namespace Novell.Directory.Ldap
this.collective = collective;
this.userMod = isUserModifiable;
this.usage = usage;
+ this.superior = superior;
base.Value = formatString();
return ;
}
@@ -306,7 +307,7 @@ namespace Novell.Directory.Ldap
if ((System.Object) parser.Syntax != null)
syntaxString = parser.Syntax;
if ((System.Object) parser.Superior != null)
- syntaxString = parser.Superior;
+ superior = parser.Superior;
single = parser.Single;
base.obsolete = parser.Obsolete;
System.Collections.IEnumerator qualifiers = parser.Qualifiers;
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapException.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapException.cs
index a69650c0bd1..5625ded8584 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapException.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapException.cs
@@ -180,7 +180,7 @@ namespace Novell.Directory.Ldap
{
get
{
- return InnerException;
+ return rootException;
}
}
@@ -251,6 +251,8 @@ namespace Novell.Directory.Ldap
private System.Object[] arguments = null;
// The Matched DN
private System.String matchedDN = null;
+ // The Root Cause
+ private System.Exception rootException = null;
// A message from the server
private System.String serverMessage = null;
@@ -1011,13 +1013,14 @@ namespace Novell.Directory.Ldap
/// be matched by the server on a search operation.
/// </param>
/* package */
- internal LdapException(System.String messageOrKey, System.Object[] arguments, int resultCode, System.String serverMsg, System.String matchedDN, System.Exception rootException):base(messageOrKey, rootException)
+ internal LdapException(System.String messageOrKey, System.Object[] arguments, int resultCode, System.String serverMsg, System.String matchedDN, System.Exception rootException)
//:base(Novell.Directory.Ldap.Utilclass.ResourcesHandler.getMessage(messageOrKey, arguments))
//Once resorcehandler starts working properly need to uncomment
{
this.messageOrKey = messageOrKey;
this.arguments = arguments;
this.resultCode = resultCode;
+ this.rootException = rootException;
this.matchedDN = matchedDN;
this.serverMessage = serverMsg;
return ;
@@ -1140,9 +1143,9 @@ namespace Novell.Directory.Ldap
msg = msg + '\n' + tmsg;
}
- if (InnerException != null)
+ if (rootException != null)
{
- msg = msg + '\n' + InnerException.ToString();
+ msg = msg + '\n' + rootException.ToString();
}
return msg;
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapResponse.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapResponse.cs
index 8ddf9aed5a7..8cb530b9adf 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapResponse.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/LdapResponse.cs
@@ -168,6 +168,8 @@ namespace Novell.Directory.Ldap
{
return exception.ResultCode;
}
+ if (((RfcResponse) message.Response) is RfcIntermediateResponse)
+ return 0;
return ((RfcResponse) message.Response).getResultCode().intValue();
}
@@ -198,7 +200,6 @@ namespace Novell.Directory.Ldap
default:
ex = new LdapException(LdapException.resultCodeToString(ResultCode), ResultCode, ErrorMessage, MatchedDN);
-// ex = new LdapException("49", 49, "hello error", "hi error..");
break;
}
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Message.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Message.cs
index 998e76c72fd..a181b87c838 100644
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Message.cs
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap/Message.cs
@@ -466,7 +466,10 @@ namespace Novell.Directory.Ldap
{
return ;
}
- replies.Add(message);
+ lock(replies)
+ {
+ replies.Add(message);
+ }
message.RequestingMessage = msg; // Save request message info
switch (message.Type)
{
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap20.csproj b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap20.csproj
index 79e99bda929..481a2fc3f0e 100755
--- a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap20.csproj
+++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap20.csproj
@@ -183,7 +183,11 @@
<Compile Include="Novell.Directory.Ldap.Extensions\SetReplicationFilterRequest.cs" />
<Compile Include="Novell.Directory.Ldap.Extensions\SplitOrphanPartitionRequest.cs" />
<Compile Include="Novell.Directory.Ldap.Extensions\SplitPartitionRequest.cs" />
- <Compile Include="Novell.Directory.Ldap.Extensions\TriggerBackgroundProcessRequest.cs" />
+ <Compile Include="Novell.Directory.Ldap.Extensions\TriggerBackgroundProcessRequest.cs" />
+ <Compile Include="Novell.Directory.Ldap.Extensions\BackupRestoreConstants.cs" />
+ <Compile Include="Novell.Directory.Ldap.Extensions\LdapBackupRequest.cs" />
+ <Compile Include="Novell.Directory.Ldap.Extensions\LdapBackupResponse.cs" />
+ <Compile Include="Novell.Directory.Ldap.Extensions\LdapRestoreRequest.cs" />
<Compile Include="Novell.Directory.Ldap.Rfc2251\RfcAbandonRequest.cs" />
<Compile Include="Novell.Directory.Ldap.Rfc2251\RfcAddRequest.cs" />
<Compile Include="Novell.Directory.Ldap.Rfc2251\RfcAddResponse.cs" />
@@ -349,4 +353,4 @@
<UserProperties REFS-JarPath-rt="..\lib\rt.jar" REFS-JarPath-system="..\..\..\..\..\..\Program Files\Mainsoft\Visual MainWin for J2EE 2\java_refs\framework\System.jar" REFS-JarPath-j2se-helpers="..\lib\J2SE.Helpers.jar" REFS-JarPath-mscorlib="..\..\..\..\..\Program Files\Mainsoft\Visual MainWin for J2EE 2\java_refs\framework\mscorlib.jar" />
</VisualStudio>
</ProjectExtensions>
-</Project> \ No newline at end of file
+</Project>