namazu-ml(ring)


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

mknmz for squid cache file



初めまして。

たった今登録させていただいた三好 力と申します。

namazu1.3.0.10でsquidがcacheしたファイルを検索できるように
mknmzを変更しました。

cacheのファイル名は16進数で、ファイルの中の
ヘッダ部分にcache元のURLが書いてあったので、
それを取り出してNMZ.*を作るようにしてあります。

詳しいことは
http://mylab.ike.tottori-u.ac.jp/~mijosxi/1999/12_sqnmz.html
に書きましたので、お暇なときにでも見ていただけると幸いです。

また、コメントなど頂けるとうれしいです。

よろしくお願いします。

三好 力
http://mylab.ike.tottori-u.ac.jp/~mijosxi/


以下に
% diff /usr/local/bin/mknmz mknmz
の結果を添付します。
______
53a54
>       -s: squid のファイルを処理する
92a94
>       -s: treat squid files
375a378
> my $SquidOpt         = 0;
462a466
>     $ctrl = $ctrl - 28 if $SquidOpt;  # about 28 ctrl in header of cache file
681a686,741
>
> # get url form squid file
> # 1999-11-30 mijosxi@xxxxxxxxxxxxxxxxxxx
> sub get_squrl ($) {
>     my ($orig_cfile) = @_;
>     my ($i, $c, $squrl);
>     my $cfile = $$orig_cfile;
>
>     return ("") unless (-f $cfile && -r $cfile);
>     $i = -s $cfile;
>     return ("") if $i > $FILE_SIZE_LIMIT;
>
>     # for handling a file which contains Shift_JIS code
>     my $shelter_cfile = "";
>     my $shelter_ext = "";
>     if ($SYSTEM eq "MSWin32"
>       && $cfile =~ /[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]|[\x20\xa1-\xdf]/)

>     {
>       $shelter_cfile = $cfile;
>       $cfile = $TMP_W;
>     while ($shelter_cfile =~ /^.*\.($HELPER_EXTENSIONS)$/o) {
>       $shelter_ext = $1;
>     $cfile .= '.'.$shelter_ext;
>       last;
>     }
>       use File::Copy;
>       copy("$shelter_cfile","$cfile");
>     }
>
>     open(CFILE, $cfile) || die "$cfile: $!\n";
>
>     # get url allowed to squid cache file format
>     # 60 byte skip, url end with '\x00"
>     for($i = 0; $i < 60; $i++) {
>       $c = getc CFILE;
>     }
>     $c = getc CFILE;
>     # 'h' means first char of url "http...", for skipping non squid file
>     return("") if $c !~ 'h';
>     $squrl = "";
>     for($i = 0; ($i < 512) && ($c !~ '\x00'); $i++) {
>       $squrl = join("", $squrl, $c);
>       $c = getc CFILE;
>     }
>
>     # for handling a file which contains Shift_JIS code
>     if ($SYSTEM eq "MSWin32" && $shelter_cfile ne "") {
>       unlink "$cfile.$shelter_ext";
>       $cfile = $shelter_cfile;
>     }
>
>     close(CFILE);
>     ($squrl);
> }
>
>
1411a1472,1475
>       if ($ARGV[0] =~ /s/) {
>           $SquidOpt    = 1;
>           $TARGET_FILE = join("", $TARGET_FILE, '|.*\/');
>       }
1766,1768c1830,1842
<     push(@FList, $name) if
<       ( (! /^(($DENY_FILE)(\.gz|\.Z)?)$/i) &&
<        /^(($TARGET_FILE)(\.gz|\.Z|\?.*)?)$/i && -f $_ && -r $_);
---
>     if ($SquidOpt) {
>       my $squrl = get_squrl(\$name);
>       if (($squrl !~ /^(($DENY_FILE)(\.gz|\.Z)?)$/i) &&
>           ($squrl =~ /^(($TARGET_FILE)(\.gz|\.Z|\?.*)?)$/i) &&
>           -f $name &&
>           -r $name) {
>           push(@FList, $name);
>       }
>     } else {
>       push(@FList, $name) if
>           ( (! /^(($DENY_FILE)(\.gz|\.Z)?)$/i) &&
>            /^(($TARGET_FILE)(\.gz|\.Z|\?.*)?)$/i && -f $_ && -r $_);
>     }
2218c2292,2297
<     print FLIST "<DT>\n<STRONG><A HREF=\"$url\">$title</A></STRONG>\n";
---
>     if ($SquidOpt) {
>       my $squrl = get_squrl(\$cfile);
>       print FLIST "<DT>\n<STRONG><A HREF=\"$squrl\">$title</A></STRONG>\n";
>     } else {
>       print FLIST "<DT>\n<STRONG><A HREF=\"$url\">$title</A></STRONG>\n";
>     }
2920a3000,3004
>
>     if ($SquidOpt) {
>       $cfile = get_squrl(\$cfile);
>       $cfile = join("", $cfile, $DEFAULT_FILE) if $cfile =~ /\/$/;
>     }
______