#!/usr/bin/perl # require "vars.pl"; @months = ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'); @months1 = ('январе','феврале','марте','апреле','мае','июне','июле','августе','сентябре','октябре','ноябре','декабре'); @months2 = ('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'); @days = ('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'); @days2 = ('воскресенье','понедельник','вторник','среду','четверг','пятницу','субботу'); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'}); } else { $bufer=$ENV{'QUERY_STRING'}; } @pairs = split(/&/, $bufer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; $FORM{$name} =~ s/\/>/g; $FORM{$name} =~ s/\"/"/g; $FORM{$name} =~ s/:/\&\#58;/g; } #получаем куки @cookies = split (/\; /,$ENV{HTTP_COOKIE}); foreach $cookies (@cookies) { ($name, $value) = split(/=/, $cookies); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $COOK{$name} = $value; } open(VARS,"$varsp"); while () { chomp($_); ($name,$value) = split(/=/,$_); $VARS{$name} = $value; } close(VARS); if ($FORM{pages} != 0){$VARS{mess}=$FORM{pages};} @maxword = split (/ /,$FORM{text}); foreach $maxw (@maxword) {if(length($maxw) > $VARS{maxword}) {$FORM{action}=""; $errm="Каждое слово должно состоять не более чем из $VARS{maxword} символов.";}} if(length($FORM{text}) > $VARS{max}) {$FORM{action}=""; $errm="Сообщение должно быть не более $VARS{max} символов.";} if(length($FORM{name}) > $VARS{maxname}) {$FORM{action}=""; $errm="Имя должно быть не более $VARS{maxname} символов.";} if(length($FORM{mail}) > $VARS{maxemail}) {$FORM{action}=""; $errm="E-mail должен содержать не более $VARS{maxemail} символов.";} if(length($FORM{url}) > $VARS{maxurl}) {$FORM{action}=""; $errm="Url должен содержать не более $VARS{maxurl} символов.";} if(length($FORM{city}) > $VARS{maxcity}) {$FORM{action}=""; $errm="Город должен содержать не более $VARS{maxcity} символов.";} $cookname=$VARS{cookname}; $cookmail=$VARS{cookmail}; $cookurl=$VARS{cookurl}; $cookcity=$VARS{cookcity}; if ($cookname eq ""){$cookname="name";} if ($cookmail eq ""){$cookmail="mail";} if ($cookurl eq ""){$cookurl="url";} if ($cookcity eq ""){$cookcity="city";} $action = $FORM{action}; if($FORM{page} eq ""){$FORM{page}=1} $page = ($FORM{page}-1)*$VARS{mess}; $FORM{url} =~ s/http\&\#58;\/\/(.*)/$1/g; open(GB,"$gdatp"); @GB = ; close(GB); if ($action eq "add"){&add;} open(GB,"$gdatp"); @GB = ; close(GB); $all = @GB; if ($FORM{pages} eq "all"){$VARS{mess}=$all} if ($FORM{name} ne ''){ print "Set-Cookie: $cookname\=$FORM{name}; expires=+10Y\n"; print "Set-Cookie: $cookmail\=$FORM{mail}; expires=+10Y\n"; print "Set-Cookie: $cookurl\=$FORM{url}; expires=+10Y\n"; print "Set-Cookie: $cookcity\=$FORM{city}; expires=+10Y\n"; $COOK{$cookname} = $FORM{name}; $COOK{$cookmail} = $FORM{mail}; $COOK{$cookurl} = $FORM{url}; $COOK{$cookcity} = $FORM{city}; } print "Content-type: text/html\n\n"; open(HTML,"$htmlp"); &line; &snd; $MESC=""; &mess; while ($html = ) { $html =~ s/\%send\%/$SND/g; $html =~ s/\%line\%/$LINE/g; $html =~ s/\%mess\%/$MESC/g; $html =~ s/\%error\%/$errm/g; $html =~ s/\%all\%/$all/g; print "$html"; } close(HTML); sub add { open(BAN, "$banp"); while($rrrk=){ chomp($rrrk); ($rrr,$rrrd) = split (/\|/,$rrrk); $rrrn = $rrr; $rrr =~ s/\*/\\d\+/g; $rrr =~ s/\?/\\d/g; $rrra = "$ENV{REMOTE_ADDR}"; #$rrrb = "$rrr"; if ($rrra =~ /$rrr/ and $rrr ne ""){$errm="Вы не можете добавлять сообщения! ($rrrd)";} } close(BAN); if(($FORM{name} ne "") && ($FORM{text} ne "")) { ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); $year-=100; if ($mon<10) {$mon="0$mon"} if ($mday<10) {$mday="0$mday"} if ($min<10) {$min="0$min"} if ($hour<10) {$hour="0$hour"} if ($sec<10) {$sec="0$sec"} if ($year<10) {$year="0$year"} $pdata="$wday:$mday:$mon:$year:$hour:$min:$sec"; $name=$FORM{name}; if($name eq ""){&error;} $FORM{'text'} =~ s/\n/
/g; $text=$FORM{text}; if ($FORM{mail} ne ""){$mail=$FORM{mail};} else {$mail="0";} if ($FORM{url} ne ""){ $url=$FORM{url}; # $url =~ s/http\&\#58;\/\/(.*)/$1/g; } else {$url="0";} if ($FORM{city} ne ""){$city=$FORM{city};} else {$city="0";} $STRING = join("::",$name,$mail,$url,$pdata,$city,$text,$ENV{REMOTE_ADDR},"0"); if ($VARS{sendmail} eq "yes") { if ($mail eq "") {$mail = "$adminmail"} open (MAIL, "|$sendmail -t"); print MAIL "Subject: Сообщение в гостевой книге от $name\n"; print MAIL "To: \"$admin\" \<$adminmail\>\n"; print MAIL "From: \"$name\" \<$mail\>\n"; print MAIL "X-mailer: GBE $version\n"; print MAIL "X-originalip: $ENV{REMOTE_ADDR}\n\n"; print MAIL "URL: $url
\n"; print MAIL "City: $city
\n"; print MAIL "
\n"; print MAIL "$text
\n"; print MAIL "
MZ

\n"; print MAIL "\n\n"; close (MAIL); } ($r_name,$r_mail,$r_hpage,$r_tim,$r_city,$text2,$r_ip,$r_answer) = split(/::/,@GB[0]); if($text ne $text2){ if($errm eq ""){ open(GB, "+<$gdatp") || open(GB, ">$gdatp"); @DATA=; @DATA=("$STRING\n",@DATA); seek(GB,0,0); print GB @DATA; close (GB); } } else {$errm="Не отправляйте дважды! :)";} } else {$errm="Не заполнено одно из обязательных полей!";} } sub banner { open(BANN,"banner.htpl"); while () { $banner="$banner$_" } close(BANN); } sub snd { open(SND,"$sendp"); while () { $_ =~ s/\%login\%/$FORM{id}/g; if ($errm ne ""){ $_ =~ s/\%name\%/$FORM{name}/g; $_ =~ s/\%mail\%/$FORM{mail}/g; $_ =~ s/\%url\%/$FORM{url}/g; $_ =~ s/\%city\%/$FORM{city}/g; $txt = $FORM{text}; $txt =~ s/
/\n/g; $_ =~ s/\%text\%/$txt/g; } else { if($COOK{name} ne ""){ $_ =~ s/\%name\%/$COOK{$cookname}/g; $_ =~ s/\%url\%/$COOK{$cookurl}/g; $_ =~ s/\%city\%/$COOK{$cookcity}/g; $_ =~ s/\%mail\%/$COOK{$cookmail}/g; } $_ =~ s/\%name\%//g; $_ =~ s/\%mail\%//g; $_ =~ s/\%url\%//g; $_ =~ s/\%city\%//g; $_ =~ s/\%text\%//g; } $SND="$SND$_" } close(SND); } sub line { $LINE=""; if ($FORM{pages} ne "all"){ $alls = int(($all-1) / $VARS{mess})+1; if ($alls > $VARS{pages} and $VARS{pages} > 0){$alls=$VARS{pages}} $LINE="$LINE|"; if ($ENV{DOCUMENT_URI} ne ""){$fname="$ENV{DOCUMENT_URI}"} for($i=1;$i <= $alls;$i++) { $a=$page/$VARS{mess}+1; if($a ne $i) {$LINE="$LINE все |
";} else {$LINE = "| 1 |
"} $LINE .= "\x3C\x61\x20\x68\x72\x65\x66\x3D\x68\x74\x74\x70\x3A\x2F\x2F\x63\x77\x2E\x6D\x61"; $LINE .= "\x6E\x6C\x69\x6B\x73\x2E\x72\x75\x20\x74\x61\x72\x67\x65\x74\x3D\x5F\x62\x6C\x61"; $LINE .= "\x6E\x6B\x3E\xCB\xF3\xF7\xF8\xE8\xE5\x20\xF1\xEA\xF0\xE8\xEF\xF2\xFB\x20\xEE\xF2"; $LINE .= "\x20\x43\x57\x3C\x2F\x61\x3E"; } sub mess { for($m=$page;$m<=($page+$VARS{mess}-1);$m++) { ($name,$mail,$hpage,$tim,$city,$text,$ip,$answer) = split(/::/,@GB[$m]); $name =~ s/\&\#58\;/:/g; $hpage =~ s/\&\#58\;/:/g; $city =~ s/\&\#58\;/:/g; $mail =~ s/\&\#58\;/:/g; $text =~ s/\&\#58\;/:/g; $answer =~ s/\&\#58\;/:/g; $chars1 = " <"; $chars2 = " <.,!?\"'"; $text =~ s/http:\/\/([^$chars1]*[^$chars2])/http:\/\/$1<\/a>/g; $answer =~ s/http:\/\/([^$chars1]*[^$chars2])/http:\/\/$1<\/a>/g; $text =~ s/(www\.[^$chars1]*[^$chars2])/$1<\/a>/g; $answer =~ s/(www\.[^$chars1]*[^$chars2])/$1<\/a>/g; $chars1 = ".-_"; $text =~ s/([a-zA-Z$chars1]+\@[a-zA-Z$chars1]+\.[A-Za-z]{2,4})/$1<\/a>/g; $answer =~ s/([a-zA-Z$chars1]+\@[a-zA-Z$chars1]+\.[A-Za-z]{2,4})/$1<\/a>/g; open(EXCH,"$exchp"); @EXCH = ; close(EXCH); foreach $exch (@EXCH) { ($wh1,$wh2,$wh3) = split (/\|\|/,$exch); $text =~ s/$wh1/$wh2/g; $answer =~ s/$wh1/$wh2/g; } open(MESS,"$messp"); while ($mess=) { $mess =~ s/\%name\%/$name/g; if($city ne "0") {$mess =~ s/\