<TOP> -> サーバ ]
The MTPaginate tag only works within PHP documents!
Make sure that the document extension is .php and that your server supports PHP documents.
$pathinfo_maxlength ) { // Path Info Too Long. } else { // Maybe Ok. // $tmp_uri = substr($get_uri, strlen($paginate_page_selector) + 2 ); //print "tmp: $tmp_uri
"; if ($tmp_uri == "all") { // OK // $paginate_current_page = "all"; } else { $tmp_uri2 = $tmp_uri; $pattern = '/\d+/'; $replacement = ''; $tmp_uri3 = preg_replace($pattern, $replacement, $tmp_uri2); if ($tmp_uri3 == "") { //print "Checking3...
"; #---- Maybe Ok ---- if ( is_numeric($tmp_uri2) ) { $paginate_current_page = $tmp_uri2; } } } } } } $paginate_num_pages = 1; $paginate_num_sections = 5; //$paginate_current_page = @$_GET['page']; // Pin page selector to a valid number (or 'all') if($paginate_current_page=='') $paginate_current_page = '1'; if($paginate_current_page != 'all') { if($paginate_current_page == 'first') $paginate_current_page = 1; elseif($paginate_current_page == 'last') $paginate_current_page = 1; elseif($paginate_current_page < 1) $paginate_current_page = 1; elseif($paginate_current_page > 1) $paginate_current_page = 1; $paginate_sections = array( 0 , 5); $paginate_top_section = $paginate_sections[$paginate_current_page-1]+1; $paginate_bottom_section = $paginate_sections[$paginate_current_page]; } else { $paginate_top_section = 1; $paginate_bottom_section = 5; } /* if(isset($_SERVER['QUERY_STRING'])) { $paginate_self = '&' . $_SERVER['QUERY_STRING'] . '&'; $paginate_self = preg_replace("/&page=[^&]*&/", "&", $paginate_self); $paginate_self = substr($paginate_self, 1, strlen($paginate_self) - 1); if($paginate_self == '&') $paginate_self = ''; else $paginate_self = htmlentities($paginate_self); } else { $paginate_self = ''; } */ //if ( strlen($_SERVER{'REQUEST_URI'}) >= $uri_maxlength ) //{ /* It is possible to apply a /attack. A server resource is spent by making long String process inside. Although it can say that it is not great processing load, it is steadily from a small thing. However, restriction by HTTP GET is received in this case. For example http://some.url.com/archives/cat2/index.php/////////////////////////////////////////////////////////////////////////////////page/3 Umm.... It is also in such cases.... http://some.url.com/archives////////////////////////cat2/index.php/////////////////////////////////////////////////////////////////////////////////page/3 http://some.url.com///////////////////////////////////////archives////////////////////////cat2/index.php/////////////////////////////////////////////////////////////////////////////////page/3 */ //It is not secure to acquire from the above-mentioned reason to URI. //Since the URI serves as a base when it links URL again after attaching ///purposely, it unites and is also unsavory. $paginate_self = 'http://debz-di.kabocha.to/archives/cat4//' . $paginate_page_selector; //} ?>

2006年12月17日

Outbound Port25 Block

こないだの他社からの専用サーバ移転作業の際に、Outbound Port25 Blockで引っかかりそうだなぁ、と思っていたので対応しておいたらビンゴだった。
しかし、元の環境じゃSubmissionなんか用意してなかったっぽいけど、どうなってたんだろう・・・。運が良かっただけか?
最初はPOP Before SMTPをやって・・・と、言っていたのだが、「めんどくさい」という反応だった。
今までどういう環境だったんだ・・・と、一応今調べてみたら、mail fromが合えばどこから、どこにでも送れる。いやー呆れるにも程があるな。よくもまあ、これで専用サーバの業者をやってるもんだと・・・。

ということはおいといて。

簡単にやり方を。
ソースをげっちゅーする。
patch qmail-date-localtime.patch
patch qmail-smtpd-auth(ver 0.31)

http://avoidnotes.org/~ohki/solo/DebianSargeInst.html#sec-55
http://www.aripollak.com/wiki/Main/QmailMSP
を参考に、qmail-smtpd.cを 書き換える。
rcpthostsを見ないようにするための書き換え。

int addrallowed()
{
int r;
if(env_get("SUBMISSION")) return 0; /* SUBMISSION is set if this is a
submission port (usually 587)
as per RFC2476, so only accept
if user has authenticated*/
r = rcpthosts(addr.s,str_len(addr.s));
if (r == -1) die_control();
#ifdef TLS

ディストリビューションのqmailを入れている環境などで、qmailのユーザが異なる場合は、qmailのソースにconfがあるので適宜変更しとくこと。ls conf* で出てくる。
終わったらmakeをかける。

make
※make setup をすると既存バイナリが上書きされてしまうので、makeだけにする。ディストリビューションのを入れてないんならmake setupとかでもいいけど。

cp qmail-smtpd qmail-smtpd-submission

/etc/init.d/qmail にsubmission用定義の追加

あと、VPOPMAIL環境で、CramMD5を使うならば、マロンくん.netのqmail+vpopmailでSMTP AUTH実装のページ http://www.marronkun.net/linux/mail/qmail_000032.html
に、記述されている通り、vchkpw.cを修正する。

投稿者 debizoh : 07:21 | コメント (0) | トラックバック

2006年12月19日

fetchmail を使った転送スクリプト

fetchmailを使うと、POPで定期受信を簡単に行える。
しかし、メーリングリストにそのまま無加工で送ると、メールヘッダも無加工であるから、エラー等の際にエライことになる。
というわけで、楽をするためにスクリプトを作る。ついでに、fetchmailで受信し、メーリングリストに投げつつ、procmailで受信したサーバにprocmailを使ってstoreさせる機能を追加。

できる限りヘッダを書き換えるようにしているが、メーリングリストマネージャによっては、その他のヘッダも書き換える必要があるかもしれない。
いろいろなしがらみによって客先で担当メールアドレスを作成され、それを実社内でメーリングリストにキャストすることによって社内にもそのまま通達、ついでに自分用アドレスにStoreしときたいような場合等に使う。

まあ、あんまり一般的に使うものでもないかもしれないが、mail fromをみて、これはブロードキャストするか、remoteにstoreするだけか、みたいなことも改造すればできるわけで、考えればいろいろ使えなくはないかも。(曜日によってとかも、ちょっといじればいけるでしょうし)


fetchmail.rcで
mda "/usr/bin/perl /somewhere/mailfw.pl"

というように記述する。mailfw.plの中身は以下の通りで、localを使うのであれば、procmail.rcを適宜記述しておく。
Debian Sarge環境procmail 3.22,qmail 1.03,fetchmail 6.2.5,perl5.8.4で確認。
生田 昇さんのmime_pls http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html の、mimer.plが必要。

JIS環境(日本語)でしかテストしていません。
fetchmailを動かすためにcronの設定が必要。パイプで渡すことができる環境なら、そのままパイプで渡すのもありかも。(ただ、fetchmailのmdaコマンドで動作するように作っているため、改行コードcrがdeleteされて来ない、という部分があります。変更する場合は要注意。)

スクリプトは以下。持ち帰りソースはこれ

$cache = "/somedir/cache.dat"; #cache file StorePath
$lockfile = "/somedir/locks.dat"; #lock file store path

#remoteの場合は、from,to
#localの場合は、procmailrcの場所を指定する
@post_tos =(
'remote someaddr@somedomain someaddr_to@somedomain_to',
'local procmailrcs.file',
);

%commands =(
'sendmail' => '/usr/sbin/sendmail',
'procmail' => '/usr/bin/procmail',
);


$locktimeout = 10;
$lockflag = 0;


require './somedir/mimer.pl'; #mimer.pl必須

&lock_rootin($lockfile,$locktimeout);


&make_cache;
foreach (@post_tos)
{
($deli,$from,$to) = split(/\t/,$_);
if ($deli eq "remote")
{
&go_send_remote($from,$to);
}
elsif ($deli eq "local")
{
&go_send_local($from);
}


}

sub make_cache
{
open(OUT,">$cache") or &errors;
while()
{
print OUT $_;
}
close(OUT);
}

sub go_send_local
{
my($from,$rcptto) = @_;

my($cmd) = $commands{'procmail'};

#| /usr/bin/procmail -m ./.procmailrc
open(OUT,"| $cmd -m $from") or &errors;
open(IN,"$cache");
while()
{
print OUT $_;
}
close(IN);
close(OUT);

}

sub go_send_remote
{
my($from,$rcptto) = @_;
my($skip_header,$get_fromheader,$header_ended,$headers,$check_header,$head_data,
$orgfrom,$fromheaders,$origin_post);

$header_ended = 0;
$origin_post = 0;

my($cmd) = $commands{'sendmail'};

open(OUT,"| $cmd $rcptto") or &errors;
open(IN,"$cache");

print OUT "To: <$rcptto>" . "\n";
print OUT "From: <$from>" . "\n";

$skip_header = 0;
$get_fromheader = 0;
while()
{
if ($header_ended == 0)
{
#--- MDA nara cr delete ga yuukou. ----
if ($_ eq "\n")
{
$header_ended = 1;
if ($headers ne "")
{
print OUT $headers;
}
$headers ="";
}
else
{
if ($_ =~ m/^(.*?):\s(.*?)\n$/)
{
$skip_header = 0;
$check_header = $1;
$head_data = $2;

if ($headers ne "")
{
print OUT $headers;
}
$headers ="";

if ($get_fromheader == 1)
{
$get_fromheader = 0;
$orgfrom = &decode_mime($fromheaders);
}

if ($check_header =~ /^Return-Path/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^Delivered-To/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^X-Original-To/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^Delivered-To/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^Cc/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^To/i)
{
$skip_header = 1;
next;
}
if ($check_header =~ /^From/i)
{
$get_fromheader = 1;
$skip_header = 1;
$fromheaders .= $head_data . "\n";
next;
}

$headers .= $_;
next;
}
elsif($skip_header == 1)
{
if ($get_fromheader == 1)
{
$fromheaders .= $_;
}
next;
}
else
{
$headers .= $_;
}
}
}
elsif($origin_post == 0)
{
print OUT "\n";
print OUT "This is Mail Transfer Program.\n";
print OUT "Original from: " . $orgfrom . "\n";
$origin_post = 1;

print OUT $_;
}
else
{
print OUT $_;
}
}
close(IN);
close(OUT);

}


unlink($cache);
&end_lock;


sub decode_mime
{
my($orgfrom) = $_[0];
my($mimes) = "=?ISO-2022-JP";

if ($orgfrom =~ m/$mimes/)
{
$decode_from = &mimedecode($orgfrom);
return($decode_from);
}

return($orgfrom);


}

sub errors
{
if ($lockflag != 0)
{
&end_lock;
}

exit 1;
}

sub lock_rootin {
my($tmppath,$locktimeout) = @_;
$lockflag++;
if (-e $tmppath ) {
open(LOCK, "$tmppath") or &errors;
}
else
{
open(LOCK,">$tmppath") or &errors;
}
eval
{
$lockstart = 1;
local $SIG{ALRM} = sub { die "time out" }; # 時間が来たら抜け出す
alarm($locktimeout); # 制限時間
flock(LOCK, 2);
alarm(0);
};
if ($@ =~ /time out/) {
$lockstart = 0;
&end_lock;
&errors;
}
}


sub end_lock {
local($i);
for ($i = 1; $i <= $lockflag ; $i++)
{
if ($i == 1 )
{
flock(LOCK,8);
close(LOCK);
}
if ($i == 2 )
{
flock(LOCK2,8);
close(LOCK2);
}
if ($i == 3 )
{
flock(LOCK3,8);
close(LOCK3);
}
if ($i == 4 )
{
flock(LOCK4,8);
close(LOCK4);
}
}
$lockflag = 0;

}

投稿者 debizoh : 04:39 | コメント (0) | トラックバック

2007年01月04日

WindowsServerで802.3ad

WindowsServerでリンクアグリゲーションの設定。書き忘れ。
以前他の案件で触ったこともあったが、某業者つーか、元請(?)がL2の設定をまともにしないで、サーバ側だけリンクアグリゲーションに設定したまま本稼動・・・ということがあった。
孫請だと、いろいろ気にしなきゃいかんことが多くて面倒くさい。

さて、NETGEAR GS724TAだと、静的リンクアグリゲーション(SLA Mode)じゃないとうまくないらしい。
動的リンクアグリゲーションだとLinuxBoxからはパケットが通じたが、Windows側から通じなかったです。(原因追ってないですけど。。)

投稿者 debizoh : 06:27 | コメント (0) | トラックバック

2007年01月05日

Dell PowerEdgeSC1435が届く

DellのPowerEdgeSC1435が届く。お客用・急ぎ仕事なのでレビュっている余裕がないですがPowerConnect 2708等と組み合わせて構築中。

えー、とにかく激烈うるさいです・・・・・・。
構築時だけPowerNowdとか入れて一時的に下げられればええのんだが。。(無理でしたけど)
PowerEdge 1950の方は、負荷がかからなければ低騒音なんだけど。

802.3adの挙動がなんかおかしいっす。Virtuozzoの方でもBondingかけてたのが動かなくなってactive-backupに変えたんですけど、同様。つい先日WindowsServerで書いた記憶もあるわけですけど。どうもあんまりよろしくないでんな。 本番設置でパケット通らなくなったら最悪なので、active-backupにしとこう。納得いかんが・・・。

投稿者 debizoh : 04:57 | コメント (0) | トラックバック

2007年01月06日

DELL OMSA 5.1 On Debian

このページからダウンロードへいける。

使い方は日本語のざっくりしたドキュメントこれを読む。

CLIでは
omconfig system webserver action=start
というようにする。上記だとwebserverが起動する。

omawsd.srcが無いとか言われたりするが、エラーメッセージ通りにシンボリックリンクを貼るなどして対応すれば、WebUIが起動できるようになる。

投稿者 debizoh : 07:18 | コメント (0) | トラックバック

<TOP> -> サーバ ]