From e2d67c4d89df7b485bbfc8cf74fdb4f550892e76 Mon Sep 17 00:00:00 2001
From: Victor Wagner
Date: Thu, 20 Mar 2008 16:25:03 +0000
Subject: [PATCH] fixes
---
forum/forum | 304 +++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 253 insertions(+), 51 deletions(-)
diff --git a/forum/forum b/forum/forum
index 33dc755..91961bf 100755
--- a/forum/forum
+++ b/forum/forum
@@ -1,5 +1,16 @@
#!/usr/bin/perl -T
-
+#
+# Stil Life forum. Copyright (c) by Victor B. Wagner, 2008
+# This program distributed under GNU Affero General Public License v3 or
+# above
+# http://www.gnu.org/licenses/agpl.html
+#
+# ÐкÑаÑÑе: ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ Ð½Ð° Ñвоем ÑайÑе, ÐÑ Ð¾Ð±ÑзанÑ
+# ÑделаÑÑ Ð´Ð¾ÑÑÑпнÑм его иÑÑ
однÑй ÑекÑÑ. Ð ÑаÑÑноÑÑи, еÑли ÐÑ Ð²Ð½ÐµÑли
+# какие-либо изменениÑ, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑбликоваÑÑ.
+#
+# Home site of this program http://vitus.wagner.pp.ru/stilllife
+#
use strict;
use warnings;
use CGI;
@@ -29,7 +40,7 @@ my %actions = (
my $cgi = new CGI;
-
+print STDERR "--------------------\n";
my $forum=get_forum_config();
@@ -39,6 +50,8 @@ if ($cgi->request_method ne "POST") {
# ÑедиÑÐµÐºÑ Ð¾Ñ OpenId-ÑеÑвеÑа
if ($cgi->param('openidvfy')) {
openid_verify($cgi);
+ } elsif ($cgi->param("logout")) {
+ logout('logout',$cgi,$forum);
} else {
for my $param ($cgi->param) {
# СÑеди паÑамеÑÑов, ÑказаннÑÑ
в URL иÑем ÑоÑ, коÑоÑÑй задаеÑ
@@ -73,9 +86,35 @@ if ($cgi->request_method ne "POST") {
$actions{$param}->($param,$cgi,$forum);
exit;
}
- }
+ }
+ print STDERR "ÐолÑÑÐµÐ½Ñ Ð¿Ð°ÑамеÑÑÑ ",join(" ",$cgi->param),"\n";
show_error($forum,"ÐекоÑÑекÑнÑй вÑзов ÑкÑипÑа. ÐÑÑÑÑÑÑвÑÐµÑ Ð¿Ð°ÑамеÑÑ Ð´ÐµÐ¹ÑÑвиÑ");
}
+
+sub dir2url {
+ my ($cgi,$dir) = @_;
+ my $prefix=$cgi->url(-base=>1);
+ my $pos=rindex $ENV{'PATH_TRANSLATED'},$ENV{'PATH_INFO'};
+ if ($pos <0 && $ENV{'PATH_INFO'}=~m!(/\~\w+)/!) {
+ $prefix .=$1;
+ $pos =
+ rindex($ENV{'PATH_TRANSLATED'},substr($ENV{'PATH_INFO'},length($1)));
+ }
+ if ($pos <0) {
+ show_error({},"ÐÑибка конÑигÑÑаÑии ÑоÑÑма. Ðе ÑдаеÑÑÑ Ð¾Ð¿ÑеделиÑÑ
+ алгоÑиÑм пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸ÑекÑоÑи в URL\n".
+ "PATH_INFO=$ENV{PATH_INFO}\n".
+ "PATH_TRANSLATER=$ENV{'PATH_TRANSLATED'}");
+ }
+ my $root = substr($ENV{'PATH_TRANSLATED'},0,$pos);
+ if (substr($dir,0,length($root)) ne $root) {
+ show_error({},"ÐÑибка конÑигÑÑаÑии ÑоÑÑма. Ðе ÑдаеÑÑÑ Ð¿ÑеобÑазоваÑÑ
+ Ð¸Ð¼Ñ Ð´Ð¸ÑекÑоÑии $dir в url\n".
+ "PATH_INFO=$ENV{PATH_INFO}\n".
+ "PATH_TRANSLATER=$ENV{'PATH_TRANSLATED'}");
+ }
+ return $prefix.substr($dir,length($root));
+}
#
# ÐоиÑк Ñайла .forum ввеÑÑ
по деÑÐµÐ²Ñ Ð¾Ñ $ENV{PATH_TRANSLATED}
# ÐнаÑение PATH_TRANSLATED ÑÑиÑаем безопаÑнÑм - Ð½Ð°Ñ web-ÑеÑÐ²ÐµÑ Ð½Ð°Ð¼ не
@@ -86,7 +125,6 @@ if ($cgi->request_method ne "POST") {
sub get_forum_config {
my @path=split("/",$1) if $ENV{PATH_TRANSLATED}=~/^(\S+)$/;
while (@path>1) {
- pop @path;
if (-r (my $config=join("/",@path,".forum")) ) {
open F,"<",$config;
my %config;
@@ -96,6 +134,10 @@ sub get_forum_config {
}
close F;
#
+ # ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ forumtop - ÑÑо URL Ñого меÑÑа, где наÑ
одиÑÑÑ
+ # Ñайл .forum
+
+ $config{"forumtop"} = dir2url($cgi,join("/",@path));
# ÐÑли в конÑиге оÑÑÑÑÑÑвÑÐµÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ templates, но
# ÑÑдом Ñ ÐºÐ¾Ð½Ñигом пÑиÑÑÑÑÑвÑÐµÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ templates,
# Ñо ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ñам.
@@ -104,36 +146,38 @@ sub get_forum_config {
&& -d (my $filename = join("/",@path,"templates"))) {
$config{"templates"} = $filename;
}
+ $config{"templatesurl"} = dir2url($cgi,$config{"templates"})
+ unless exists $config{"templatesurl"};
#
# То же Ñамое - паÑамеÑÑ userdir и диÑекÑоÑÐ¸Ñ users
#
if (! exists $config{"userdir"}
&& -d (my $filename = join("/",@path,"users"))) {
$config{"userdir"} = $filename;
- my
- $taillen=length($ENV{PATH_TRANSLATED})-length(join("/",@path));
- $config{"userurl"} =
- $cgi->url(-base=>1).substr($ENV{'PATH_INFO'},0,
- length($ENV{'PATH_INFO'})-$taillen)."/users";
- }
+ }
+ $config{"userurl"} = dir2url($cgi,$config{"userdir"});
+
#
# ÐÑли Ð½ÐµÑ ÑÑÑлки в конÑиге на Ñайл паÑолей или он не
# ÑÑÑеÑÑвÑеÑ, вÑдаем оÑибкÑ. С оÑоÑомлением, Ñак как ÑаблонÑ
# Ñ Ð½Ð°Ñ Ñже еÑÑÑ
- if (! exists $config{"passwd"}) {
- show_error(\%config,"РконÑигÑÑаÑии ÑоÑÑма не Ñказан Ñайл полÑзоваÑелей");
+ if (!exists $config{"datadir"}) {
+ show_error(\%config,"РконÑигÑÑаÑии ÑоÑÑма не Ñказана
+ диÑекÑоÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
");
exit;
}
- if (!exists $config{"session"}) {
- show_error(\%config,"РконÑигÑÑаÑии ÑоÑÑма не Ñказан Ñайл ÑеÑÑий");
+ if (!-d $config{"datadir"}) {
+ show_error(\%config,"РконÑигÑÑаÑии ÑоÑÑма Ñказана неÑÑÑеÑÑвÑÑÑÐ°Ñ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
");
exit;
}
- $config{"authperiod"}="+1m" if (! exists $config{"authperiod"});
+ $config{"authperiod"}="+1M" if (! exists $config{"authperiod"});
$config{"renewtime"} = "86000" if (!exists $config{"renewtime"});
+ $config{"replies_per_page"} = 50 if (!exists $config{"replies_per_page"});
return \%config;
}
+ pop @path;
}
#
# ÐÑводим оÑÐ¸Ð±ÐºÑ 404 без оÑмÑÑленного оÑоÑмлениÑ, Ñак как даннÑÑ
ÑоÑÑма
@@ -173,6 +217,7 @@ sub show_error {
$cgi->escapeHTML($msg),"
",
"ÐÑи обÑабоÑке ÑÑой оÑибки не обнаÑÑжен Ñаблон ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке