포럼: 도움 (Thread #17223)

LdapPlugin でもう一件質問です。 (2007-12-28 15:19 by mshibata #34245)

柴田@島津製作所です。
内容が異なるのでスレッドを変えて質問させていただきます。

このプラグインでは、session_attribute テーブルに name と email を追加に行ってますが、session テーブルに同じ sid のアカウントが登録されてないと、Trac のユーザー設定に表示されてきません。

この状態で Trac の email を使う機能が正常に動作することを期待してよいのでしょうか?

Trac 側にユーザーを追加せずにどの範囲まで動作するのかご存知でしたらご教示いただけると助かります。

見ている限りでは session テーブルにアカウントがないとフォーラムのモデレータのリストに出てこないなど制限はあるようです。

かと言って、まったく動かないのかというと、session_attribute テーブルには sid に アカウントの文字列そのものが入っているので動くつくりになっているところもありそうに思います。

RE: LdapPlugin でもう一件質問です。 (2008-03-09 08:15 by okamototk #35484)

LdapPluginは作りっぱなしで実は細かい検証はできていませんが、UserCompleteプラグインでsidが存在するユーザだけ取ってきてユーザリストを返却するように実装しているだけで、他の部分には影響しないと思うので、email機能は利用できると思います。

ただ、ユーザがログインしないとLDAPから取ってきて追加されないので、ユーザが1度ログインしないとemailは登録されませんが...
Reply to #34245

LdapPlugin 改造してチェックインしました。 (2008-03-12 10:16 by mshibata #35528)

勤務先の Proxy が SSH のポートを塞いであって、SVN にコミットできるようになるまでちょっとトラぶりました (結局自宅からやったらスンナリいきました)。

ちょっと勝手な改造していますので、具合悪かったら元に戻していただいて結構です。一応当方の環境でテストした範囲では今のところ快調に動いています。

改造のポイント (上から)
L44:
nameattr と emailattr を追加してます。
こうしておくと、trac.ini [ldap] セクションで例えば emailattr = mail などとするとアトリビュートがマッピングできます。元からそういう作りのようなので追加分もそれに合わせました。

L53~:
オーバーライドする関数を authenticate から get_navigation_items に変更しました。
authenticate だと Trac の外 (Apache httpd.conf の <Location "/trac"> の方) で認証をかけたときに通過しないようなので、中 (ヘッダメニューのログイン) からも外からも通過する関数として、一見してログインID を知ってることがわかる get_navigation_items に目をつけました。
日本語がモロに埋まっていますので、LdapPlugin 本家にフィードバックするわけにはいかなくなりましたが...
こうしておくと、RSS リーダーで Trac の RSS リンクをつてに中に入るときに、通常のリーダーの機能で認証を通せます。

L80~ と L96~ (関連関数 L131~):
こちらの環境依存かも知れませんが、最初からLDAP 接続だといつまで経っても session テーブル側にアカウントが追加されませんでしたので、結果として session_attribute への追加に行ってませんでした。ですので session にアカウント情報がなければ追加するように変更してあります。
なお、当該情報が session_attribute にないときに書き込むだけでしたが、更新・削除にも対応してあります。

Reply to #35484