OpenLDAPへの接続で、ややハマリかけたのでメモを残しておきます。
添付したProgram.csは OpenLDAP ServerからCSV形式で抽出するツール です。
キモは、AuthenticationTypesを設定することでしょうかね? すると、ADSIオブジェクト取得時にCOMExceptionがスローされなくなります。
ちなみに、添付したProgram.csは、OpenLDAP ServerからCSV形式でエントリを出力するツールです。
OpenLDAPから情報抽出
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace LDAPtoCSV
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("Usage: LDAPtoCSV.exe <社員番号> <パスワード>");
return;
}
string strPath = "LDAP://hostname/ou=Users,dc=adniss,dc=jp";
string strUser = "uid=" + args[0] + ",ou=Users,dc=adniss,dc=jp";
string strPass = args[1];
DirectoryEntry drEntry = new DirectoryEntry(strPath, strUser, strPass, AuthenticationTypes.FastBind);
try
{
// ADSI オブジェクトを取得する
Object obj = drEntry.NativeObject;
// LDAP検索オブジェクトを作成
DirectorySearcher drSearch = new DirectorySearcher(drEntry);
// アカウントフィルターを設定
drSearch.Filter = "(uid=*)";
// Common Name(cn)プロパティを同時に
// 取得するように設定
string[] outputs = { "cn" };
drSearch.PropertiesToLoad.AddRange(outputs);
// 検索する
SearchResultCollection scn = drSearch.FindAll();
if (scn == null)
{
Console.WriteLine("対象ユーザーがいません。");
return;
}
foreach (SearchResult sResult in scn)
{
Console.WriteLine("cn : " + sResult.Properties["cn"][0]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}