Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mknmz-squid 実行時にメディアタイプの取得に失敗し停止



<20010207115334.E259C388D2@xxxxxxxxxxxxxxxx>の記事において
kai13@xxxxxxxxxxxxxxxxxxxxさんは書きました。

>> ● ファイル ●
>> 変更したファイルは以下の場所に置いておきます。
>> http://tat6.ice.ous.ac.jp/akita/filez/squidcache.pl
>> add_magic の都合によりとりこぼしあり。大体うまくいく。

  ざっと見てみたのですが、ちょっとよろしくない部分があるように思います。
もっとも、filter が undocumented なままなのがいけないんですが...

  基本的に、addFileExts によるファイル種別判断は magic entry がうまく
書けない Microsoft Office suites document 向けにしかたなく用意している
もので、それさえなければ(office suites 用の magic entry が書ければ)な
くしてしまおうと考えてるぐらいです。

  とりこぼしがあるようなら、認識に必要な entry を追加すれば良いので、
できればその辺りを調べていただけませんでしょうか? 時間がとれればこちら
でも調べますけど...

>> そして、filterでヘッダを取り除かれたデータのメディアタイプ取得に失敗するのです。
>> これについて、squidcache.pl の filter() でテキストファイル以外はデータの大きさを
>> ゼロにすることで解決しました。

  これはあまり正しくない対処で、より良い方法は squid cache data から
header 部分を完全に取り除き、data 部分のみにすることです。

  そのような実装に変更するための patch をこのメールの末尾につけておき
ますので、試してみて下さい。

-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
	knok@xxxxxxxxxx (Namazu Project)

---- 
*** squidcache.pl	Thu Feb  8 10:41:49 2001
--- squidcache.pl.new	Thu Feb  8 11:08:45 2001
***************
*** 28,34 ****
    my ($magic) = @_;
  
    #$magic->addMagicEntry('0 string HTTP/1 application/x-squid-cache; x-type=squid-cache'); 
!   $magic->addSpecials("application/x-squid-cache", "^Server:", "^Last-Modified:", "^Connection:", "^Accept-Ranges:", "^ETag:");
    $magic->addFileExts('^[0-9A-Z]{8}$' => 'application/x-squid-cache; x-type=squid-cache');
    # addFileExtsがうまく動いてくれれば addSpecials は必要ないと思うが。
  
--- 28,34 ----
    my ($magic) = @_;
  
    #$magic->addMagicEntry('0 string HTTP/1 application/x-squid-cache; x-type=squid-cache'); 
!   $magic->addSpecials("application/x-squid-cache; x-type=squid-cache", "^Server:", "^Last-Modified:", "^Connection:", "^Accept-Ranges:", "^ETag:");
    $magic->addFileExts('^[0-9A-Z]{8}$' => 'application/x-squid-cache; x-type=squid-cache');
    # addFileExtsがうまく動いてくれれば addSpecials は必要ないと思うが。
  
***************
*** 74,103 ****
  
      my $url = getsquidurl($$contref);
      #if ($url =~ /^h/ && $$contref =~ s/^.*(\015\012\015\012|\n\n)//s) {
!     if ($url =~ /^h/ && $$contref =~ s/^(.*?)(?:\015\012\015\012|\r?\n\r?\n)//s) {
        # Content-Type の抜き出し
        my ($header) = $1;
        my ($content_type);
        if ($header =~ /Content-Type:\s*([\w\/]+)/i) {
  	$content_type = $1;
        }
-       if ($content_type !~ /^text/) {
- 	util::vprint("Processing squid cache file is not text ($content_type, $url)...\n");
- 	# Content-Type がテキストでないならサイズを0にする。
-         $$contref = '';
- 	$$orig_cfile = '';
-       } else {
- 	util::vprint("Processing squid cache file ($content_type, $url)...\n");
- 	
- 	#----- [delete http header] -----
- 	$$contref =~ s/^<!-- MHonArc v\d+\.\d+\.\d+ -->//;
-       }
-     }
-     else {
-         $$contref = '';
      }
      return undef;  
  }
  
  
  1;
--- 74,94 ----
  
      my $url = getsquidurl($$contref);
      #if ($url =~ /^h/ && $$contref =~ s/^.*(\015\012\015\012|\n\n)//s) {
!     if (defined $url && $url =~ /^h/ && $$contref =~ s/^(.*?)(?:\015\012\015\012|\r?\n\r?\n)//s) {
        # Content-Type の抜き出し
        my ($header) = $1;
        my ($content_type);
        if ($header =~ /Content-Type:\s*([\w\/]+)/i) {
  	$content_type = $1;
        }
      }
+     desquidcache($contref);
      return undef;  
  }
  
+ sub desquidcache ($) {
+         my $contref = shift @_;
+         $$contref =~ s/^([^\r\n]+\r\n)+\r\n//s;
+ }
  
  1;