#!/usr/bin/perl -w
-use Encode;
use File::Basename;
use Cwd 'abs_path';
use I18N::Langinfo qw'langinfo CODESET';
die "$0: no $FEXLIB\n" unless -d $FEXLIB;
# import from fex.pp
-our ($logdir,$spooldir,$debug);
+our (@logdir,$spooldir,$debug);
# load common code, local config : $HOME/lib/fex.ph
require "$FEXLIB/fex.pp" or die "$0: cannot load $FEXLIB/fex.pp - $!\n";
$CTYPE = langinfo(CODESET());
binmode(STDOUT,":encoding($CTYPE)");
-$log = shift || "$logdir/fexsrv.log";
+$log = shift || $logdir[0].'/fexsrv.log';
$ignore = join('|',qw(
(CONNECT|CONTINUE).*(crawl|msnbot|obertux)
GET./fup\?showstatus
GET./FAQ/faq\.css
GET./FAQ/jquery\.js
- GET./10+.B
GET.*Arrow\.gif
GET./apple-touch
+ GET./browserconfig\.xml
User-Agent:.*(Webnote|FeedFetcher|\w+bot|bot/|Website.Watcher|crawler|spider|searchme|Yandex|Slurp|ScoutJet|findlinks|urlmon|nagios)
User-Agent:.fnb.*quak
+ User-Agent:.Google.favicon
From:.*(msnbot|yandex|googlebot|webcrawler)
Referer:.*sex.*stream
Referer:.*stream.*sex
DNT:
Via:
profile:
+ Upgrade-Insecure-Requests:
if-modified-since
Surrogate-Capability
Proxy-Authorization
http\.
+ Device-Stock
NOKIA_
GPRS
X-Proxy-ID
X-Moz
X.Wap
X-FH
+ X-FB
+ X-WS
X-Nokia
X-UCBrowser
X-NSN
x-Mobile
X-Country
X-ClickOnceSupport
+ X-Newrelic
+ X-IMForwards
+ X-Clearswift
+ X-MDS
.*:\s*$
);
-$/ = "\n\n";
+$/ = "\n\n";
$| = 1;
if (-t STDIN or $ENV{GATEWAY_INTERFACE}) {
foreach $weed (@weed) {
while (s/\n$weed.*\n/\n/i) {}
}
+ $post = /\nPOST\s/;
if (/^\n*(CONNECT|CONTINUE).*\s\[([\d_]+)\]/i) { $pid = $2 }
if (/\n(POST|GET)\s+\/(\w+)/i) { $cgi = $2 }
if (/Content-Length: (\d+)/i) {
printf " TO=\"%s\"\n",$to;
$cgi = '';
if ($comment = slurp("$ddir/comment")) {
- printf " COMMENT=\"%s\"\n",decode_utf8($comment,0)||'';
+ printf " COMMENT=\"%s\"\n",utf8decode($comment)||'';
}
if (not -f "$ddir/data" and $_ = slurp("$ddir/error")) {
s/\n.*//s;
read_skey($1);
print "\n";
}
+ if ($debug and $pid and $post) {
+ &read_debug_log;
+ };
+ $pid = $cgi = '';
}
sleep 1;
- if ($debug and $pid and $cgi) {
- &read_debug_log;
- $pid = $cgi = '';
- };
}
my (@log,$log);
local $/ = "\n";
local $_;
- local $^W;
+ # https://rt.cpan.org/Public/Bug/Display.html?id=88592
+ # local $^W;
# no warnings "all";
+ no warnings 'utf8';
for (1..2) {
sleep 1;
- @log = `ls -rt $logdir/.debug/*_${pid}.$cgi 2>/dev/null`;
+ @log = `ls -rt $logdir[0]/.debug/*_${pid}.$cgi 2>/dev/null`;
if ($log = $log[-1] and open $log,$log) {
- # binmode($log,":encoding(UTF-8)");
+ binmode($log,":utf8");
while (<$log>) {
s/\r//;
if (/^Content-Disposition:.*name="FILE".*filename="(.+)"/i) {
$_ = <$log>;
my $v = <$log>||'';
$v =~ s/[\r\n]+//;
- printf " %s=\"%s\"\n",$p,decode_utf8($v,0)||$v if $v;
- read_akey($v) if $p eq 'AKEY';
- read_skey($v) if $p eq 'SKEY';
+ if ($v) {
+ my $vv = utf8decode($v)||$v;
+ $vv =~ s/[\x00-\x1F]/_/g;
+ $vv =~ s/[\x80-\x9F]/_/g;
+ printf " %s=\"%s\"\n",$p,$vv;
+ read_akey($v) if $p eq 'AKEY';
+ read_skey($v) if $p eq 'SKEY';
+ }
} elsif (/^(Param|Exp): (\w+=".+")/) {
print " $2\n";
}
close $skey;
}
}
+
+
+sub utf8decode {
+ local $_ = shift;
+ s/([\xC0-\xDF])([\x80-\xBF])/chr(ord($1)<<6&0xC0|ord($2)&0x3F)/eg;
+ return $_;
+}