dbl/000075500000000000000000000000001103771004400116125ustar00rootroot00000000000000dbl/FAST000075500000000000000000000002061103771004400122730ustar00rootroot00000000000000#!/bin/bash /usr/local/rejik3/dbl/Update.Fast /usr/local/rejik3/dbl/dbl_expand /usr/local/rejik3/dbl/fast.dbl squid -k reconfiguredbl/FULL000075500000000000000000000002011103771004400122730ustar00rootroot00000000000000#!/bin/bash /usr/local/rejik3/dbl/Update /usr/local/rejik3/dbl/dbl_expand /usr/local/rejik3/dbl/list.dbl squid -k reconfiguredbl/Update000075500000000000000000000076451103771004400127760ustar00rootroot00000000000000#!/usr/bin/perl -w use File::Copy; $login=""; $pass=""; $WGET="/usr/bin/wget"; $dir="/usr/local/rejik3/dbl"; # Write log function sub wlog { my ($sec, $min, $hour, $mday, $mon, $year) = localtime ; open (LOG,">>$dir/update.log") or die "Can't open $dir/update.log log: $!\n"; printf LOG "%4d-%02d-%02d %2d:%02d:%02d %s\n", $year + 1900,$mon+1, $mday, $hour, $min, $sec,$_[0]; close (LOG); } wlog("======= Start update ========"); # Get local dbl version if (-e "$dir/VERSION") { open(VER,"<$dir/VERSION") or die "Can't open $dir/VERSION: $!\n"; $version=; close (VER); } else {$version="1";} # Download new file's wlog("Download new files (curent local version is $version)"); $ret=system("$WGET -t 1 -o $dir/wget.log \"http://rejik.ru/cgi-bin/download2.cgi?Login=$login\&Pass=$pass\&Version=$version\" -O $dir/new.tmp"); if ($ret!=0) { wlog("Can't download. See $dir/wget.log for error\n"); exit; } #Check to html open (FD,"<$dir/new.tmp") or die "Can't open $dir/new.tmp: $!\n"; $line=; if ($line =~/\<\!DOCTYPE HTML PUBLIC/) { wlog("Download html file. See $dir/new.html\n"); close(FD); move("$dir/new.tmp","$dir/new.html"); exit; } # Untar new file's wlog("Untar new files to $dir/NEW"); system("rm -f $dir/NEW/*; rmdir $dir/NEW"); system("mkdir $dir/NEW"); $ret=system("tar xf $dir/new.tmp -C $dir/NEW >$dir/tar.log 2>$dir/tar.log"); if ($ret!=0) { wlog("Can't untar. Command \"tar xzf $dir/new.tmp -C $dir/NEW >$dir/tar.log 2>$dir/tar.log\" return error. See $dir/tar.log for error\n"); exit; } # Get new file's list opendir(DIR,"$dir/NEW") or die "Can't opendir $dir/NEW: $!\n"; while (defined($file=readdir(DIR))) { next if $file =~/^\.\.?$/; push (@files,$file); } # Check for one x.gz file if ($files[0]=~/^(\d+)\.gz/) { copy("$dir/NEW/$1.gz", "$dir/list.dbl"); open(VER,">$dir/VERSION") or die "Can't open $dir/VERSION: $!\n"; print VER "$1"; close (VER); unlink("$dir/new.tmp","$dir/tar.log","$dir/wget.log"); wlog("Copy new file to $dir/list.dbl\n"); exit; } # Check for NONE file if ($files[0] eq "NONE") { unlink("$dir/new.tmp","$dir/tar.log","$dir/wget.log"); wlog("New data not found. You have last version.\n"); exit; } # Check for SCORE file if ($files[0] eq "SCORE") { unlink("$dir/new.tmp","$dir/tar.log","$dir/wget.log"); wlog("You dont have score to download dbl list.\n"); exit; } ## Unpack list.dbl to list.tmp wlog("Unpack list.dbl to list.tmp"); $ret=system("cat $dir/list.dbl | gzip -d >$dir/list.tmp"); if ($ret!=0) { wlog("Can\'t ungzip. Command \"cat $dir/list.dbl | gzip -d >$dir/list.tmp\" return error.\n"); exit; } $continue_flag=1; while ($continue_flag) { $continue_flag=0; foreach $file (@files) { if ($file =~/${version}_(\d+)\.gz/) { #ungzip patch wlog("ungzip $dir/NEW/${version}_$1\.gz to $dir/NEW/${version}_$1"); $ret=system("cat $dir/NEW/${version}_$1\.gz | gzip -d >$dir/NEW/${version}_$1"); if ($ret!=0) { wlog("Can't ungzip. Command \"cat $dir/NEW/${version}_$1\.gz | gzip -d >$dir/NEW/${version}_$1\" return error.\n"); exit; } wlog("patch $dir/list.tmp by ${version}_$1"); $ret=system("patch -s $dir/list.tmp -i $dir/NEW/${version}_$1"); if ($ret!=0) { wlog("Can't patch. Command \"patch -s $dir/list.tmp -i $dir/NEW/${version}_$1\" return error.\n"); exit; } $version=$1; $continue_flag=1; } } } ## Pack list.dbl to list.tmp wlog("Pack list.tmp to list.dbl\n"); $ret=system("cat $dir/list.tmp | gzip -c >$dir/list.dbl"); if ($ret!=0) { wlog("Can\'t ungzip. Command \"cat $dir/list.tmp | gzip -c >$dir/list.dbl\" return error.\n"); exit; } # Set new verion open(VER,">$dir/VERSION") or die "Can't open $dir/VERSION: $!\n"; print VER $version; close (VER); # Delete temp files unlink("$dir/new.tmp","$dir/tar.log","$dir/wget.log","$dir/list.tmp"); dbl/Update.Fast000075500000000000000000000024561103771004400136650ustar00rootroot00000000000000#!/usr/bin/perl -w use File::Copy; $login=""; $pass=""; $WGET="/usr/bin/wget"; $dir="/usr/local/rejik3/dbl"; # Write log function sub wlog { my ($sec, $min, $hour, $mday, $mon, $year) = localtime ; open (LOG,">>$dir/update.fast.log") or die "Can't open $dir/update.fast.log log: $!\n"; printf LOG "%4d-%02d-%02d %2d:%02d:%02d %s\n", $year + 1900,$mon+1, $mday, $hour, $min, $sec,$_[0]; close (LOG); } wlog("======= Start update ========"); # Download new data wlog("Download new data"); $ret=system("$WGET -t 1 -o $dir/wget.log \"http://rejik.ru/cgi-bin/fast_get2.cgi?Login=$login\&Pass=$pass\" -O $dir/new.tmp"); if ($ret!=0) { wlog("Can't download. See $dir/wget.log for error\n"); exit; } #Check to html open (FD,"<$dir/new.tmp") or die "Can't open $dir/new.tmp: $!\n"; $line=; if ($line =~/\<\!DOCTYPE HTML PUBLIC/) { wlog("Download html file. See $dir/new.html\n"); close(FD); move("$dir/new.tmp","$dir/new.html"); exit; } # gzip new data to fast.dbl $ret=system("cat $dir/new.tmp | gzip -c >$dir/fast.dbl"); if ($ret!=0) { wlog("Can\'t ungzip. Command \"cat $dir/new.tmp | gzip -c >$dir/fast.dbl\" return error.\n"); exit; } wlog("New data now aviable in $dir/fast.dbl"); # Delete temp files unlink("$dir/new.tmp","$dir/wget.log"); dbl/dbl_expand000075500000000000000000000117661103771004400136530ustar00rootroot00000000000000#!/usr/bin/perl -w use XML::Parser; use Text::Iconv; $my_nick=""; $min_trust=300; @good_guys=("slava"); @bad_guys=("test"); $dir="/usr/local/rejik3/dbl"; ## Init some vars %files=(); $converter = Text::Iconv->new("UTF-8","KOI8-R"); #or windows-1251 %members=(); %member_block=(); $member_block_flag=0; %rule=(); $trust=0; ## Set handlers for xml parser my $parser= XML::Parser->new(Handlers=>{ Start=> \&elem_start, End => \&elem_end, Char => \&char_data}); ## Parse input $filename=shift @ARGV or die "Use $0 file.dbl\n"; chomp ($filename); open(IN, "cat $filename | gzip -d |"); $parser->parse(*IN); close(IN); ## Close files foreach $file (keys %files) { close($files{$file}); } ## Sort, uniq, delete foreach $file (keys %files) { if ($file=~/^-/) {next;} @list=(); %del=(); delete($files{"$file"}); ## Read del file if exists if (exists($files{"-$file"})) { open (DEL,"<$dir/lists/-$file") or die "Can't open $dir/lists/-$file: $!\n"; while () { chomp (); $del{$_}=1; } close(DEL); unlink("$dir/lists/-$file"); delete($files{"-$file"}); } ## Read data file open (DTA,"<$dir/lists/$file") or die "Can't open $dir/lists/$file: $!\n"; while () { chomp (); push(@list,$_); } close (DTA); ## Sort, uniq, del & write to temp file $old=""; open (DTA,">$dir/lists/${file}") or die "Can't open $dir/lists/$file: $!\n"; foreach $line (sort @list) { if ($old eq $line) {next;} if (exists($del{$line})) {next;} $old=$line; print DTA "$line\n"; } close (DTA); } ## Sort, uniq, delete remaining files foreach $file (keys %files) { $file=~s/^-//; @list=(); %del=(); ## Read del file if exists if (exists($files{"-$file"})) { open (DEL,"<$dir/lists/-$file") or die "Can't open $dir/lists/-$file: $!\n"; while () { chomp (); $del{$_}=1; } close(DEL); unlink("$dir/lists/-$file"); } ## Read data file open (DTA,"<$dir/lists/$file") or die "Can't open $dir/lists/$file: $!\n"; while () { chomp (); push(@list,$_); } close (DTA); ## Sort, uniq, del & write to temp file $old=""; open (DTA,">$dir/lists/${file}") or die "Can't open $dir/lists/$file: $!\n"; foreach $line (sort @list) { if ($old eq $line) {next;} if (exists($del{$line})) {next;} $old=$line; print DTA "$line\n"; } close (DTA); } exit; ## Element start handler sub elem_start { my ($expat,$name,%attr)=@_; if ($name eq "member") { %member_block=(); $member_block_flag=1; return(0); } if ($name eq "record") { %rule=(); $trust=0; return(0); } if ($name eq "add" or $name eq "check") { $calc_flag=1; %calc=(); return(0); } $option=$name; } ## Element end handler sub elem_end { my ($expat,$name)=@_; if ($name eq "member") { if (exists($member_block{"name"}) && exists($member_block{"trust"})) { ## Users trust modifications if ($member_block{"name"} eq $my_nick) {$member_block{"trust"}+=9999999999999;} foreach (@good_guys) {if ($_ eq $member_block{"name"}) {$member_block{"trust"}+=999999;}} foreach (@bad_guys) {if ($_ eq $member_block{"name"}) {$member_block{"trust"}=0;}} ## Add member to list $members{$member_block{"name"}}=$member_block{"trust"}; } $member_block_flag=0; return(0); } if ($name eq "check" or $name eq "add") { $calc_flag=0; if (exists($calc{"answer"}) && $calc{"answer"} eq "No") {$trust-=$members{$calc{"user"}};} else {$trust+=$members{$calc{"user"}};} return(0); } if ($name eq "record") { if ( $trust>=$min_trust) { add($rule{"group"},$converter->convert($rule{"rule"})); } else { del($rule{"group"},$converter->convert($rule{"rule"})); } return(0); } $option="null"; } ## Char data handler sub char_data { my ($expat,$text)=@_; if ($option eq "null") {return(0);} if ($member_block_flag==1) {$member_block{$option}.=$text;} if ($calc_flag) {$calc{$option}.=$text;} else {$rule{$option}.=$text;} } sub add { my $group=$_[0]; my $rule=$_[1]; unless (exists($files{$group})) { open ($files{$group}, ">>$dir/lists/$group") or die "Can't make file $dir/lists/$group: $!\n"; } print {$files{$group}} "$rule\n"; } sub del { my $group="-".$_[0]; my $rule=$_[1]; unless (exists($files{$group})) { open ($files{$group}, ">>$dir/lists/$group") or die "Can't make file $dir/lists/$group: $!\n"; } print {$files{$group}} "$rule\n"; } dbl/dbl_stat000075500000000000000000000017331103771004400133400ustar00rootroot00000000000000#!/usr/bin/perl -w use XML::Parser; ## Set handlers for xml parser my $parser= XML::Parser->new(Handlers=>{ Start=> \&elem_start, End => \&elem_end, Char => \&char_data}); %groups=(); ## Parse input $filename=shift @ARGV or die "Use $0 file.dbl\n"; chomp ($filename); open(IN, "cat $filename | gzip -d |"); $parser->parse(*IN); close(IN); foreach (sort keys %groups) { print "$_ - ".$groups{$_}." records\n"; } ## Element start handler sub elem_start { my ($expat,$name,%attr)=@_; if ($name eq "record") { %rule=(); return(0); } $option=$name } ## Element end handler sub elem_end { my ($expat,$name)=@_; if ($name eq "record") { unless (exists($groups{$rule{"group"}})) {$groups{$rule{"group"}}=0;} $groups{$rule{"group"}}++; return(0); } $option="null"; } sub char_data { my ($expat,$text)=@_; if ($option eq "null") {return (0);} $rule{$option}.=$text; }