前回のパッチで、「tracdによるtracプロジェクトをhttpsでapacheの認証下(basic/digest以外)で公開する。そしてapacheで認証したユーザでtracにログインする」というところまで出来た。
tracプロジェクトでanonymousを許す場合、apacheの認証を「/login」にだけに設定しておけばよい。だけど、自分の環境では「tracプロジェクト全域」に認証をかけているため、事実上anonymousを利用することはない。したがって、一度認証を通過しているにも関わらずいちいち「ログイン」を選択しないとログイン状態にできないのは面倒だ(特に、チケットの発行や「私のチケット」を見るとき)

ということで、tracプロジェクト全域を認証して使う場合に、いちいち"ログイン"を選ばなくてもいいようにする。
ちなみに、権限をdropしてanonymousで利用できなくする、というのとは目的が違うので注意。

  1. 以下のパッチをあてる。
    --- trac-0.9.5-ja-1/trac/web/auth.py 2006-01-09 16:48:09.000000000 +0900
    +++ trac-0.9.5-ja-1kai/trac/web/auth.py 2006-06-18 01:54:37.000000000 +0900
    @@ -64,7 +64,8 @@
         def get_navigation_items(self, req):
             if req.authname and req.authname != 'anonymous':
                 yield ('metanav', 'login', '%s としてログイン中' % req.authname)
    -            yield ('metanav', 'logout',
    +            if not self.config.getbool('trac' , 'must_login'):
    +                yield ('metanav', 'logout',
                        Markup('<a href="%s">ログアウト</a>' 
                               % escape(self.env.href.logout())))
             else:
    url: archives/2006/06/trac-2.html --- trac-0.9.5-ja-1/trac/web/standalone.py 2006-01-09 16:48:09.000000000 +0900
    +++ trac-0.9.5-ja-1kai/trac/web/standalone.py 2006-06-18 01:16:14.000000000 +0900
    @@ -288,7 +288,8 @@
                 return
     
             req.remote_user = None
    -        if path_info == '/login':
    +        if path_info == '/login' or \
    +           env.config.getbool('trac' , 'must_login') :
                 auth = self.server.auths.get(project_name) or \
                        self.server.auths.get('*')
                 if not auth:
    常にログインした状態で利用させるのでログアウトは選択できないようにした(選択しても、またログイン状態になるので意味がない)
  2. trac.iniの[trac]セクションに設定を追加する。
    [trac]
     :
    must_login = true