Microsoft Identity Integration Server 2003 Developer Reference

Example: Password Extension

This topic contains code examples for a password extension. The examples assume that the connected data source uses an XML file to set passwords.

Note  For clarity, the passwords are exposed in the example. We recommend that you modify the examples so that the passwords are encrypted and not exposed.

The examples have the following members:

[Visual Basic .NET]

The following Visual Basic .NET example shows an implementation of a password extension.

Imports System

Imports System.IO

Imports System.Xml

Imports System.Text

Imports System.Collections.Specialized

Imports Microsoft.MetadirectoryServices

Namespace SamplePasswordManagement
	'
	' This sample writes to an XML file when the SetPassword and ChangePassword methods are invoked
	' on the interface.
	' 

	Public Class SampleMAPasswordManagement
				Implements IMAPasswordManagement

		'
		' Constructor
		'
		Public Sub New()

			m_xmlWriterExport = Nothing

			m_encoding = UnicodeEncoding.Unicode

		End Sub

		Public Sub BeginConnectionToServer(ByVal connectTo As String, _
									 ByVal user As String, _
									 ByVal password As String) _
					Implements IMAPasswordManagement.BeginConnectionToServer

			' 
			' NOTE: The connectTo, user, and password  attributes are not
			' used in the sample. You would use these attributes if
			' you were to connect to a data source that requires them.
			' 
			m_xmlWriterExport = New XmlTextWriter(MAUtils.MAFolder & "\sample_password.xml", m_encoding)

			m_xmlWriterExport.WriteStartElement(Nodes.Root)

		End Sub

		Public Sub EndConnectionToServer() _
					Implements IMAPasswordManagement.EndConnectionToServer

			If Nothing <> m_xmlWriterExport Then

				m_xmlWriterExport.WriteEndElement()

				m_xmlWriterExport.Close()

			End If

		End Sub

		Public Function GetConnectionSecurityLevel() As ConnectionSecurityLevel _
						Implements IMAPasswordManagement.GetConnectionSecurityLevel

			Return ConnectionSecurityLevel.NotSecure

		End Function


		Public Sub SetPassword(ByVal csentry As CSEntry, ByVal NewPassword As String) _
						Implements IMAPasswordManagement.SetPassword

			m_xmlWriterExport.WriteStartElement(Nodes.Object)

			m_xmlWriterExport.WriteElementString(Nodes.Name, csentry.DN.ToString())

			m_xmlWriterExport.WriteElementString(Nodes.Operation, "SetPassword")

			m_xmlWriterExport.WriteElementString(Nodes.NewPassword, NewPassword)

			m_xmlWriterExport.WriteEndElement()

		End Sub

		Public Sub ChangePassword(ByVal csentry As CSEntry, _
								ByVal OldPassword As String, _
								ByVal NewPassword As String) _
					Implements IMAPasswordManagement.ChangePassword

			m_xmlWriterExport.WriteStartElement(Nodes.Object)

			m_xmlWriterExport.WriteElementString(Nodes.Name, csentry.DN.ToString())

			m_xmlWriterExport.WriteElementString(Nodes.Operation, "ChangePassword")

			m_xmlWriterExport.WriteElementString(Nodes.OldPassword, OldPassword)

			m_xmlWriterExport.WriteElementString(Nodes.NewPassword, NewPassword)

			m_xmlWriterExport.WriteEndElement()

		End Sub


		Public Sub RequireChangePasswordOnNextLogin(ByVal csentry As CSEntry, _
													ByVal fRequireChangePasswordOnNextLogin As Boolean) _
					Implements IMAPasswordManagement.RequireChangePasswordOnNextLogin

			Throw New EntryPointNotImplementedException

		End Sub

		'
		' Members
		'
		Private m_xmlWriterExport As XmlTextWriter

		Private m_encoding As Encoding

	End Class

	Module Nodes

		Public Const Root As String = "sample-passwords"

		Public Const [Object] As String = "object"

		Public Const Name As String = "name"

		Public Const Operation As String = "operation"

		Public Const OldPassword As String = "old-password"

		Public Const NewPassword As String = "new-password"

		Public Const ObjectClass As String = "objectclass"

	End Module

End Namespace 'SamplePasswordManagement

[C#]

The following C# example shows an implementation of a password extension.

using System;

using System.IO;

using System.Xml;

using System.Text;

using System.Collections.Specialized;

using Microsoft.MetadirectoryServices;

namespace SamplePasswordManagement
{
	//
	// This sample writes to a XML file when the SetPassword and ChangePasssword methods are invoked
	// on the interface.
	// 
	public class SampleMAPasswordManagement : IMAPasswordManagement

	{
		//
		// Constructor
		//
		public SampleMAPasswordManagement()
	
		{
	
			m_xmlWriterExport   = null;
	
			m_encoding		= UnicodeEncoding.Unicode;
	
	}

	
	
		public void BeginConnectionToServer(
											 string connectTo,
											 
											 string user,
											 
											 string password
		
										 )
										 
		{
			// 
			// NOTE: The connectTo, user, and password attributes are not
			// used in the sample. You would use these attributes if
			// you were to connect to a data source that requires them.
			// 
		 
			m_xmlWriterExport = new XmlTextWriter(
		
													MAUtils.MAFolder +
												
													@"\sample_password.xml", 
												
													m_encoding
												
												 );

			m_xmlWriterExport.WriteStartElement(Nodes.Root);
		
	}

		public void EndConnectionToServer()
	
		{
	
			if (null != m_xmlWriterExport) 
	
			{
	
				m_xmlWriterExport.WriteEndElement();

				m_xmlWriterExport.Close();
	
		}
	
	}
	
		public ConnectionSecurityLevel GetConnectionSecurityLevel()
	
		{
	
			return ConnectionSecurityLevel.NotSecure;
	
	}
	
		public void SetPassword(
								 CSEntry csentry, 
							
								 string  NewPassword
		
							 )
	
		{
		
			m_xmlWriterExport.WriteStartElement(Nodes.Object);

			m_xmlWriterExport.WriteElementString(
												Nodes.Name,
												 
												csentry.DN.ToString()
											
												);

			m_xmlWriterExport.WriteElementString(
												Nodes.Operation, 
											
												"SetPassword"
												
												);
		
			m_xmlWriterExport.WriteElementString(
												Nodes.NewPassword, 
											
												NewPassword
											
												);

			m_xmlWriterExport.WriteEndElement();
		
	}
 
	
		public void ChangePassword(
									CSEntry csentry,
									 
									string  OldPassword,
								
									string  NewPassword
								
								)
		{
		
		
			m_xmlWriterExport.WriteStartElement(Nodes.Object);

			m_xmlWriterExport.WriteElementString(
												 Nodes.Name, 
												 
												 csentry.DN.ToString()
			
												);

			m_xmlWriterExport.WriteElementString(
												 Nodes.Operation, 
			
												 "ChangePassword"
												 
												);

			m_xmlWriterExport.WriteElementString(
												 Nodes.OldPassword, 
			
												 OldPassword
			
												);

			m_xmlWriterExport.WriteElementString(
												 Nodes.NewPassword, 
												 
												 NewPassword
												 
												);

			m_xmlWriterExport.WriteEndElement();
		
	}

		public void RequireChangePasswordOnNextLogin(
													CSEntry csentry, 
												
													bool	fRequireChangePasswordOnNextLogin
												
													)
		{
		
			throw new EntryPointNotImplementedException();
		
	}

		//
		// Members
		//
		XmlTextWriter	 m_xmlWriterExport;
	
		Encoding			m_encoding;
}

	struct Nodes
	{
	
		public const string Root		= "sample-passwords";
	
		public const string Object	= "object";
	
		public const string Name		= "name";
	
		public const string Operation   = "operation";
	
		public const string OldPassword = "old-password";
	
		public const string NewPassword = "new-password";
	
		public const string ObjectClass = "objectclass";
	
}
}

See Also

IMAPasswordManagement, EntryPointNotImplementedException, IMAPasswordManagement.BeginConnectionToServer(String, String, String), IMAPasswordManagement.ChangePassword(CSEntry, String, String), IMAPasswordManagement.EndConnectionToServer(), IMAPasswordManagement.GetConnectionSecurityLevel(), IMAPasswordManagement.RequireChangePasswordOnNextLogin(CSEntry, Boolean), IMAPasswordManagement.SetPassword(CSEntry, String), XmlTextWriter