徒然なるままに、日ぐらしP/Cに向ひて――
メインメニュー
ブログカレンダー
2009年 4月
« 3月   5月 »
 1234
567891011
12131415161718
19202122232425
2627282930  
WordPress カテゴリ一覧
WordPress 検索


富士カメラ5

Kestrel とは、チョウゲンボウのことです。ハトくらいの小さな猛禽類、つまりワシの仲間で、ハヤブサに似ています。
チョウゲンボウにはホバリングという特技があります。よく農地の上空で空中に停止している姿が見られます。小さいけれどカッコイイ、そして最近は都会でも繁殖している頼もしいタカです。
このサイトのURLは、そんなチョウゲンボウから名前を借りました。

2009年4月14日(火曜日)

Delphi6+SynapseでLDAP、その後

カテゴリー: - flyman @ 21時27分11秒

SynapseでLDAPにバイナリのアトリビュート値を追加するには、AttributeNameに”;binary"パラメータを付けるらしい。
ただし、これは全てのアトリビュートに使えるわけではなく、アトリビュートの属性に依存している(のではないかと想像している)。
そもそも、”;binary"パラメータはString属性のアトリビュートに2バイト文字を設定する、といった用途は考慮していないんだろう。

けれども、”;binary"パラメータを付加すると、読み取り専用のIsBinaryがTrueに変わってくれる。すると、そのアトリビュートはバイナリとして書き込まれる。これは2バイト文字の場合にも使えるのだ。
そこで、今回は2バイト文字描き込み用に”;Base64″というパラメータを勝手に設定することにした。”;binary"パラメータを使い回すと、本来の使用に影響が出る可能性があるからだ。

まず、Synapseのldapsend.pasを書き換える。

procedure TLDAPAttribute.SetAttributeName(Value: string);
begin
 FAttributeName := Value;
 FIsBinary := Pos(’;binary’, Lowercase(value)) > 0;
 if not FIsBinary then begin
  FIsBinary := Pos(’;base64′, Lowercase(value)) > 0;
  FAttributeName := StringReplace(Lowercase(value), ‘;base64′, ‘’, [rfIgnoreCase]);
 end;
end;

AttributeNameに”;Base64″パラメータが付加されていたら、IsBinaryをTrueにし、AttributeNameからパラメータ部分を取り除く。
LDAPにエントリーを追加するルーチンは次のようになる。

Function LdapAdd(userID : String; AttrList : TStringList) : Boolean;
var
 ldap: TLDAPsend;
 AL : TLDAPAttributeList;
 j : Integer;
begin
 ldap:= TLDAPsend.Create;
 AL := TLDAPAttributeList.Create;
 try
  ldap.TargetHost := ‘ldap.hogehoge.jp’;
  ldap.TargetPort := cLDAPProtocol;
  ldap.Version := 3;
  ldap.SearchScope := TLDAPSearchScope(SS_WholeSubtree);
  ldap.UserName := AdminUser;
  ldap.Password := AdminPass;

  AL.Add;
  j := AL.Count - 1;
  AL[j].AttributeName := ‘objectClass’;
  AL[j].Add(’inetOrgPerson’);
  AL[j].Add(’person’);
  AL[j].Add(’top’);
  AL[j].Add(’hostObject’);

  AL.Add;
  j := AL.Count - 1;
  AL[j].AttributeName := ‘cn’;
  AL[j].Add(’CUTE01′);

  AL.Add;
  j := AL.Count - 1;
  AL[j].AttributeName := ‘mail’;
  AL[j].Add(’maimi-y@mail.cute.idol’);

  AL.Add;
  j := AL.Count - 1;
  AL[j].AttributeName := ’sn’;
  AL[j].Add(’Yajima’);

  AL.Add;
  j := AL.Count - 1;
  AL[j].AttributeName := ‘displayName;Base64′; // ”;Base64″ パラメータを勝手に付け加えた
  AL[j].Add(’55+i5bO2IOiInue+jg0K’); // “矢島 舞美” を UTF-8に変換し、Base64エンコードしたもの

  if ldap.Login then begin
   if ldap.Bind then begin
    Result := ldap.Add(’cn=CUTE01,ou=users,dc=cute,dc=idol’, AL);
   end else begin
    Result := False;
   end;
   ldap.Logout;
  end else begin
   Result := False;
  end;
 finally
  AL.Free;
  ldap.Free;
 end;
end;

ここでは"displayName"に日本語名"矢島 舞美"をセットしている。この要領で他のアトリビュートにも日本語の書き込みが可能だ。
ただし、一つのアトリビュートにセットできるのはバイナリかアスキーか、どちらか一方だけだ。例えば、
sn: Yajima
sn: 矢島
のような事は、現時点では出来ない。出来るようになるかも知れないが、そこまでSynapseをハックする力は、私にはない。それよりは別のアトリビュートを活用した方が現実的だ。

以上は、私が適当にハックして見つけた方法だが、落とし穴が無いとも限らないので、眉にツバして読んで欲しい。
Synapse自身もBase64エンコードのルーチンを持っているようだし(未確認)、もっと良い方法があるのだと思う。もし、そんなワザをご存じの方がいらしたら、ぜひ私にも教えて欲しい。


TrackBacks

このコメントのRSS

TrackBack URL : http://www.kestrel.jp/modules/wordpress/wp-trackback.php/220

この投稿には、まだコメントが付いていません

コメント

_CM_NOTICE

20 queries. 0.036 sec.
Powered by WordPress Module based on WordPress ME & WordPress

ヘッドライン
nikkansports
IT Pro
レスポンス
テーマ選択

(4 テーマ)