2012-02-15 8 views
0

CまたはC++で関数が必要です(実際にはAda 95では必要ですが、プラグマのインポートは問題なく使用できます。 -gnat05スイッチ)を使用して、ユーザーがLDAPネットワークグループに存在するかどうかを確認します。ユーザ名を取得するためのCまたはC++(またはAda 95)のWindows LDAPグループユーザーチェック

、私は私はエイダ95にインポートすることができますC関数GetEnv、持っている:

function GetUsername return String is 
    function GetEnv (Variable : String) return Interfaces.C.Strings.chars_ptr; 
    pragma Import (C, GetEnv, "getenv"); 

    Command : constant String := "USER" & ASCII.Nul; 
    Answer_Ptr : constant Interfaces.C.Strings.chars_ptr := GetEnv (Command); 
    Answer : constant String := Interfaces.C.Strings.Value (Answer_Ptr); 
begin 
    return Answer; 
end GetUsername; 

をだから私は、CまたはC++でこのような機能Boolean Check_LDAP_Authentication (char* Username)か何かを必要とする(またはAdaのCheck_LDAP_Authentication (Username : String) return Booleanでも)。どうしたらいいですか?

ありがとうございます。

更新

私はエイダ95同等のものを必要なだけのことを、私は何をする必要があるか(C#/ VB.Netを使用し、System.DirectoryServices)非常によく表現How to write LDAP query to test if user is member of a group?上の記事を見つけました。

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com"); 

DirectorySearcher srch = new DirectorySearcher(rootEntry); 
srch.SearchScope = SearchScope.Subtree; 

srch.Filter = "(&(objectcategory=user)(sAMAccountName=yourusername)(memberof=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))"; 

SearchResultCollection res = srch.FindAll(); 

if(res == null || res.Count <= 0) 
{ 
    Console.WriteLine("This user is *NOT* member of that group"); 
} 
else 
{ 
    Console.WriteLine("This user is INDEED a member of that group"); 
} 

答えて

0

まず、あなたのCommand変数は、あまりにも、型chars_ptrである必要があり、そしてエンドとして、\ 0を含める必要があります。それがあなたのために働くなら、あなたはただ幸運でした。後でchars_ptrを解放してください。例については、http://www.dwheeler.com/lovelace/s16s2.htmを参照してください。

AdaのLDAPバインディングがあります:http://savannah.nongnu.org/projects/adaldap/ - 非常に非アクティブなようです。

AWSもLDAPをサポートしています。たとえば、次の例を参照してください。http://www.adacore.com/wp-content/files/auto_update/aws-docs/aws.html#LDAP

+0

私は運がそれに何かを持っているとは信じません。私はサバンナとAWSのコードを見ているかもしれませんが、多分私はいくつかのヒントを得るでしょう。穴のライブラリを含めることは良いアイデアではありません。ありがとうございました。 – Rego

+0

Mac OS X Lionでコードを実行すると、適切な環境変数( 'USERNAME'ではなく' USER)が 'Dereference_Error'になります。 –

+0

...しかし、 'Command:constant String:=" USER "&ASCII.Nul;はより良く動作するようです。しかし、まだ推奨されていません(そして、私は、あなたの実際の問題には関係ないと思います)。 –

0

私が理解したところでは、いくつかのLDAP呼び出しが必要です。 OpenLDAPとリンクするためにAda95に非常に細い束縛だけを書いてみませんか?または、this small tutorialからインスピレーションを受けたCコードを直接(現在のOpenLDAP APIを使用)、Adaから呼び出すことができますか?最初のソリューションについては

、私はあなたがそれは既存のエイダを使用したほど簡単ではありません

を呼び出す必要がありますだと思いますライブラリが、そのトリックを行う必要があります。

希望します。

関連する問題