2011-12-19 2 views
1

SearchResultDNを確実に入手するにはどうすればよいですか?.NETでDirectorySearcherのSearchResultのDNを取得する方法は?

SearchResult.Properties["dn"]を使用していますが、最近サポートされていないインストールが発生しました。この顧客には、Win32のldap_get_dnメソッドを呼び出すための他のアプリケーションがありますが、.NETのSearchResultと等価ではありません。

このソリューションは、Active Directory固有ではなくLDAPサーバー間で動作する必要があります。

+0

..?あなたは標準のDirectorySearcherを使ってADまたはLDAPにアクセスできますか – MethodMan

+0

@DJ KRAZE、はい、既知のDNでLDAPにバインドし、他のエントリを見つけるために 'DirectorySearcher'を使用できます。しかし、エントリを見つけたら、他のすべてのLDAPインストール(数百のインストール、多くの異なるオペレーティングシステム、およびLDAPサーバ)で見られたように、実際の 'DN'属性は定義されていません。 –

+0

ディレクトリツリーがどうなっているか知っていますか?クライアントがADを意図した方法で使用していないように聞こえます。約10ヶ月前にクライアントと同様の問題がありました。実際にはあなたが私のために働くコードの周りにいくつかの仕事を持っていることを知るために持っているものの例。 – MethodMan

答えて

1

最初は明確ではありませんでしたが、後でSearchResult.PathプロパティにDNが含まれていることが判明し、それを解析することができます。これまでに遭遇したすべてのサーバーと一貫して機能しました。

SearchResult result; 
... 
string userDn = result.Path; 

// typical Path is 
// LDAP://my.ldap.server.com:39/CN=a,CN=b,OU=c 
// we want to grab the part after the third '/' 
int i = userDn.IndexOf('/', 7); 
if (i >= 0 && userDn.Length > i + 1) 
{ 
    userDn = userDn.Substring(i + 1); 
} 

SearchResult.Pathプロパティクライアントが使用しているオペレーティングシステム

http://msdn.microsoft.com/en-us/library/system.directoryservices.searchresult.path.aspx

+0

しかし、このパスには、技術的にDNの一部ではないプロトコルも含まれています。 –

+0

@ach、ありがとう、私はパスのDNを解析するところで私が書いたコードの部分を見落としました。私は答えを更新しました。 –

+1

これはほとんどの設定で機能します。しかし、サーバーとポートが常にパスに存在するとは限りません。 LDAP Uriのすべてのルールを知らなくても、これは難しいと思います。私はLDAPの専門家ではないので、あなたの最善の策は次のようなことをすることです: userDN = new Uri(result.Path).Segments.Last(); –

0

常に識別名であるbase objectは、LDAP検索結果エントリ(ただし検索結果の参照番号)では使用できません。ただし、識別名は属性ではありません。

関連する問題