Kouhei TANUMA
tanum****@nttco*****
2009年 1月 6日 (火) 10:52:01 JST
まるやま 様 竹林 様 田沼と申します。 ご連絡ありがとうございます。 まるやまさんの対処で問題ありません。 本件については real に指定した IP アドレスの処理部分のバグで 64 bit の場合 255.255.255.255 でも大丈夫なのですが 32 bit の場合 127.255.255.255 以上の IP アドレスを指定すると int の範囲を超えて落ちてしまいます。 以前に竹林さんから軽く報告されていて 覚えてはいたのですが再現しなかったので古いバージョンでのバグかと 勝手に思っていました…。すいません。 (32 bit については 10.x.x.x と 127.0.0.1 で確認していました…) また、対処については、perldoc perldiag によると Range iterator outside integer range (F) One (or both) of the numeric arguments to the range operator ".." are outside the range which can be represented by integers internally. One possible workaround is to force Perl to use magical string increment by prepending "0" to your numbers. ということなので、頭に 0 をつけて強制的にマジカルインクリメント、 つまり - for my $int_ip ($int_ip1 .. $int_ip2) { + for my $int_ip ("0$int_ip1" .. "0$int_ip2") { こうしてやると大丈夫なようですが、多少トリッキーですので まるやまさんの C スタイルの for 文か while 文あたりで修正して リポジトリにコミットしておきます。 On Mon, 05 Jan 2009 22:51:32 +0900 Shinya TAKEBAYASHI <makot****@kanon*****> wrote: > まるやま さま > > > 竹林です. > > 本件,ご連絡ありがとうございます. > > まるやまさんの対処で動いているようであれば,取り急ぎ今のまま > お使いいただけますか. > > こちらでも試してみます. > > > // おふれこ > > リリース前の版で IP アドレスを int の数値に変換するルーチン(ip_to_int)で > Range iterator outside integer range が出たことがあったのですが・・・ > それと関連しているかもしれません. > > 田沼さん,この辺どうでしたっけ. > > ---------------------------------------------------------------- > Shinya TAKEBAYASHI > > E-mail(private): makot****@kanon***** > GPG ID : FFD20D1F > GPG FP : 7B5B E0FC B785 7457 683C 47D6 5564 DDDD FFD2 0D1F > ---------------------------------------------------------------- > > > *** MARUYAMA Toshio wrote in message <20090105115219.18335.q > mail****@web35*****> > *** Subject: [Ultramonkey-l7-users 150] 32bit での 2.1.0-0 l7directord 起動時 " > Range iterator outside integer range" > *** Date: Mon, 5 Jan 2009 20:52:19 +0900 (JST) > > まるやまと申します。 > > > > UltraMonkey-L7 2.1.0-0 がリリースされたということで、 > > 2.0.0 からの乗り換えを試したところ、 > > l7directord の起動で、以下のエラーが出て起動できませんでした。 > > > > # /etc/init.d/l7directord start > > Starting l7directord ... Range iterator outside integer range at > > /usr/sbin/l7directord line 1167, <$_[...]> line 33. > > > > [FAILED] > > > > 環境は、32bit CentOS 5.2 です。 > > > > > > l7directord.cf では以下のようにしています。 > > > > virtual=192.168.0.226:9000 > > real=192.168.0.226:80 masq 1 > > real=192.168.0.222:80 masq 1 > > > > > > 以下の修正をして、何とか動かしています。 > > 問題無いでしょうか。 > > > > --- l7directord.orig 2008-12-16 08:02:10.000000000 +0900 > > +++ l7directord 2009-01-05 20:34:25.000000000 +0900 > > @@ -1164,7 +1164,8 @@ > > } > > > > my @reals = (); > > - for my $int_ip ($int_ip1 .. $int_ip2) { > > + # for my $int_ip ($int_ip1 .. $int_ip2) { > > + for ( my $int_ip = $int_ip1 ; $int_ip <= $int_ip2 ; $int_ip++ ) { > > my %new_real = %real; > > $new_real{server}{ip } = int_to_ip($int_ip); > > $new_real{server}{port} = $resolved_port; > > > > > > 以上よろしくお願いします。 > > > > -------------------------------------- > > Power up the Internet with Yahoo! Toolbar. > > http://pr.mail.yahoo.co.jp/toolbar/