ニッキ

wiresharkの-Tfields

[]wiresharkの-Tfields

今日wiresharkソース読んでた

tsharkで -te -Tfields -e frame.time オプションつけてフレームの届いた時刻を出そうとしても、epoch にならずにこーなる。

Oct 12, 2008 15:48:08.871946000

日付の出し方がイマイチ不明(%dか%eか)なのでソースチェック。

$ ack %b

epan/ftypes/ftype-time.c

243: curptr = strptime(s,"%b %d, %Y %H:%M:%S", &tm);

%bで引っかかったところで、同じ形式はここなので、恐らくここかな。

strptimeはパースする関数だからstrftimeで探したけど該当したものはない。

どこから呼ばれているか確認しようとしてgtags待ち。(昨日パッチ書いて消してしまった)

とりあえず、時刻のパースはコレで

#!/usr/bin/perl

use Time;:Piece;

my $date = 'Oct 12, 2008 15:48:08.871946000';

$date =~ s/\.[0-9]{9}$//;

my $t = Time::Piece->strptime($date,"%b %d, %Y %H:%M:%S);

print $t->datetime;

2008-10-12T15:48:08

<

[]PeerReviewPlugin

TRACコードレビュー用のプラグイン入れた。

なぜか、コードレビューを一番して欲しい人の端末からだけバグが発生。。。

入れ方。

svnから落とす

http://trac-hacks.org/svn/peerreviewplugin/tags/2.1-toddler-rc1/

easy_install 2.1-toddler-rc1

インストール完了!

pythonラクチンだな。

cpanでチマチマ入れているのが嘘みたい。

設定

プロジェクトの conf/trac.ini を修正します。

[components]

codereview.* = enabled

を追記する。

変更を反映する。

trac-admin tracプロジェクト upgrade

権限の付与

trac-admin tracプロジェクト permission add adways_taro CODE_REVIEW_DEV CODE_REVIEW_MGR

webログインするとtracの右端にpeerReviewが追加されています。


使い勝手としては、まぁ悪くない。けど、求めてるのとちょっと違う。。。

その他

ひじょーに重いのでmod_python化を試みましたが、、centos4でmod_python入れたらsegmentation faultで死。

結局fastcgiになりました。

参考にしたページ

http://mist.suenaga.cse.nagoya-u.ac.jp/trac/wiki/TracFastCgi

まぁfastcgiの方が簡単でいいね。

FastCgiConfigよりは.fcgi内に書く方がいいと思う。

ktatktat 2008/10/17 21:46 automountってやつですなぁ。古いけど。どーぞ。
http://www.rwds.net/kuroita/cgi-bin/diary/Master/200406.htm#20040619-3

[] Redmineのマイページが微妙なので

書き換えた。。。

Redmineをプライベートのタスク管理で利用してるんだけど、マイページのカレンダーが一週間しか表示しなくって、見通しが悪すぎなので。

なんか最近こんなんばっかしてる気がする。

今回は直接書き換えたけど、追加した方がすっきりするはず。

機能追加されないかなー。

使用中の環境はubuntu-8.0.4, Redmine-0.70, Rails-1.1.6-3

--- lib/redmine/helpers/calendar.rb.org	2008-04-28 19:41:38.000000000 +0900
+++ lib/redmine/helpers/calendar.rb	2008-05-07 01:46:52.000000000 +0900
@@ -40,6 +40,9 @@
         when :week
           @startdt = date - (date.cwday - first_wday)%7
           @enddt = date + (last_wday - date.cwday)%7
+        when :two_week
+          @startdt = date - (date.cwday - first_wday)%7
+          @enddt = date + (last_wday - date.cwday)%7 + 7
         else
           raise 'Invalid period'
         end
--- app/views/my/blocks/_calendar.rhtml.org	2008-05-07 01:47:51.000000000 +0900
+++ app/views/my/blocks/_calendar.rhtml	2008-05-07 01:47:03.000000000 +0900
@@ -1,6 +1,6 @@
 <h3><%= l(:label_calendar) %></h3>
 
-<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week)
+<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :two_week)
    calendar.events = Issue.find :all,
                      :conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt + 7 , calendar.startdt, calendar.enddt + 7],
                      :include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %>

データベース・リファクタリング

[]ApacheでWindows の統合認証ができるっぽい

http://d.hatena.ne.jp/dayflower/20070711/1184141979

これは便利かも。

検証しよー

NTLM⇒LDAP⇒htpasswdとフォールバックもできるとベスト

http://samba.org/ftp/unpacked/lorikeet/mod_auth_ntlm_winbind/README

を見たところ

# to enable 'NTLM+Negotiate' authentication too:

<Directory "/srv/www/auth">
  AuthName "NTLM Authentication thingy"
  NTLMAuth on
  NegotiateAuth on
  NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
  NegotiateAuthHelper "/usr/bin/ntlm_auth --helper-protocol=gss-spnego"
  NTLMBasicAuthoritative on
  AuthType NTLM
  AuthType Negotiate
  require valid-user
</Directory>

ってことは、複数のauthtypeを使えるのかも。

NTLM or LDAPもできそうな気がする。優先順位のつけ方がよく分からないので、フォールバックになるかは不明だけど。

要検証

Pound でRemoteAddressが使えない

[]Poundいじって遊んでみた

PoundではRemoteAddressが使えないって騒いでいる人がいたのでつけてみた。

そんなことしたければapacheでやればいいじゃんって話だけど。

  • 機能

コンフィグのService部分にRemoteAddress IPと書くとマッチしたIPしかServiceに振り分けられなくなる。

RemoteAddressはひとつのServiceに複数かけて、一応Regexが使える。

IPアドレスの癖にネットワークアドレスが書けないあたりが残念な感じ。

そのうちCのネットワーク周りの勉強も兼ねて書き換えたい。

PoundのConfigでRemoteAddressを使えるようにするパッチ

$ diff -uar --exclude=config.log --exclude=config.status Pound-2.4.1 Pound-2.4.1.RemoteAddress/
diff -uar --exclude=config.log --exclude=config.status Pound-2.4.1/config.c Pound-2.4.1.RemoteAddress/config.c
--- Pound-2.4.1/config.c        2008-04-05 18:45:43.000000000 +0900
+++ Pound-2.4.1.RemoteAddress/config.c  2008-05-02 00:51:48.000000000 +0900
@@ -78,6 +78,7 @@
 static regex_t  Service, ServiceName, URL, HeadRequire, HeadDeny, BackEnd, Emergency, Priority, HAport, HAportAddr;
 static regex_t  Redirect, RedirectN, TimeOut, Session, Type, TTL, ID, DynScale;
 static regex_t  ClientCert, AddHeader, Ciphers, CAlist, VerifyList, CRLlist, NoHTTPS11;
+static regex_t  RemoteAddress;
 static regex_t  Grace;

 static regmatch_t   matches[5];
@@ -435,6 +436,28 @@
                 logmsg(LOG_ERR, "line %d: URL bad pattern \"%s\" - aborted", n_lin, lin + matches[1].rm_so);
                 exit(1);
             }   
+        } else if(!regexec(&RemoteAddress, lin, 4, matches, 0)) {
+            if(res->remote_address) {
+                for(m = res->remote_address; m->next; m = m->next)
+                    ;
+                if((m->next = (MATCHER *)malloc(sizeof(MATCHER))) == NULL) {
+                    logmsg(LOG_ERR, "line %d: RemoteAddress config: out of memory - aborted", n_lin);
+                    exit(1);
+                }
+                m = m->next;
+            } else {
+                if((res->remote_address = (MATCHER *)malloc(sizeof(MATCHER))) == NULL) {
+                    logmsg(LOG_ERR, "line %d: RemoteAdrress config: out of memory - aborted", n_lin);
+                    exit(1);
+                }
+                m = res->remote_address;
+            }
+            memset(m, 0, sizeof(MATCHER));
+            lin[matches[1].rm_eo] = '\0';
+            if(regcomp(&m->pat, lin + matches[1].rm_so, REG_ICASE | REG_NEWLINE | REG_EXTENDED)) {
+                logmsg(LOG_ERR, "line %d: RemoteAddress bad pattern \"%s\" - aborted", n_lin, lin + matches[1].rm_so);
+                exit(1);
+            }
         } else if(!regexec(&HeadRequire, lin, 4, matches, 0)) {
             if(res->req_head) {
                 for(m = res->req_head; m->next; m = m->next)
@@ -1213,6 +1236,7 @@
     || regcomp(&ListenHTTPS, "^[ \t]*ListenHTTPS[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&End, "^[ \t]*End[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&Address, "^[ \t]*Address[ \t]+([^ \t]+)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
+    || regcomp(&RemoteAddress, "^[ \t]*RemoteAddress[ \t]+([^ \t]+)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&Port, "^[ \t]*Port[ \t]+([1-9][0-9]*)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&Cert, "^[ \t]*Cert[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&xHTTP, "^[ \t]*xHTTP[ \t]+([01234])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
@@ -1367,6 +1391,7 @@
     regfree(&ListenHTTPS);
     regfree(&End);
     regfree(&Address);
+    regfree(&RemoteAddress);
     regfree(&Port);
     regfree(&Cert);
     regfree(&xHTTP);
diff -uar --exclude=config.log --exclude=config.status Pound-2.4.1/http.c Pound-2.4.1.RemoteAddress/http.c
--- Pound-2.4.1/http.c  2008-04-05 18:45:43.000000000 +0900
+++ Pound-2.4.1.RemoteAddress/http.c    2008-05-01 22:00:40.000000000 +0900
@@ -719,7 +719,7 @@
         }

         /* check that the requested URL still fits the old back-end (if any) */
-        if((svc = get_service(lstn, url, &headers[1])) == NULL) {
+        if((svc = get_service(lstn, url, &headers[1], &from_host)) == NULL) {
             addr2str(caddr, MAXBUF - 1, &from_host, 1);
             logmsg(LOG_NOTICE, "(%lx) e503 no service \"%s\" from %s", pthread_self(), request, caddr);
             err_reply(cl, h503, lstn->err503);
diff -uar --exclude=config.log --exclude=config.status Pound-2.4.1/pound.h Pound-2.4.1.RemoteAddress/pound.h
--- Pound-2.4.1/pound.h 2008-04-05 18:45:43.000000000 +0900
+++ Pound-2.4.1.RemoteAddress/pound.h   2008-05-02 01:01:43.000000000 +0900
@@ -317,6 +317,7 @@
     char                name[KEY_SIZE + 1]; /* symbolic name */
     MATCHER             *url,       /* request matcher */
                         *req_head,  /* required headers */
+                        *remote_address, /* request remote_address */
                         *deny_head; /* forbidden headers */
     BACKEND             *backends;
     BACKEND             *emergency;
@@ -442,7 +443,7 @@
 /*
  * Find the right service for a request
  */
-extern SERVICE  *get_service(const LISTENER *, const char *, char **const);
+extern SERVICE  *get_service(const LISTENER *, const char *, char **const, const struct addrinfo *);

 /*
  * Find the right back-end for a request
diff -uar --exclude=config.log --exclude=config.status Pound-2.4.1/svc.c Pound-2.4.1.RemoteAddress/svc.c
--- Pound-2.4.1/svc.c   2008-04-05 18:45:43.000000000 +0900
+++ Pound-2.4.1.RemoteAddress/svc.c     2008-05-02 01:13:40.000000000 +0900
@@ -302,7 +302,7 @@
 }

 static int
-match_service(const SERVICE *svc, const char *request, char **const headers)
+match_service(const SERVICE *svc, const char *request, char **const headers, const char *caddr)
 {   
     MATCHER *m;
     int     i, found;
@@ -312,6 +312,14 @@
         if(regexec(&m->pat, request, 0, NULL, 0))
             return 0;

+    /* check for remote address */
+    for(m = svc->remote_address; m; m = m->next){
+        if(!regexec(&m->pat, caddr, 0, NULL, 0))
+            break;
+        if(! m->next)
+            return 0;
+    }
+
     /* check for required headers */
     for(m = svc->req_head; m; m = m->next) {
         for(found = i = 0; i < (MAXHEADERS - 1) && !found; i++)
@@ -337,14 +345,15 @@
  * Find the right service for a request
  */
 SERVICE *
-get_service(const LISTENER *lstn, const char *request, char **const headers)
+get_service(const LISTENER *lstn, const char *request, char **const headers, const struct addrinfo *from_host)
 {   
     SERVICE *svc;
-
+    char    caddr[MAXBUF];
+    addr2str(caddr, MAXBUF - 1, from_host, 1);
     for(svc = lstn->services; svc; svc = svc->next) {
         if(svc->disabled)
             continue;
-        if(match_service(svc, request, headers))
+        if(match_service(svc, request, headers, caddr))
             return svc;
     }

@@ -352,7 +361,7 @@
     for(svc = services; svc; svc = svc->next) {
         if(svc->disabled)
             continue;
-        if(match_service(svc, request, headers))
+        if(match_service(svc, request, headers, caddr))
             return svc;
     }