localhost で実行されている Java サービスに接続するための perl スクリプトを用意し、暗号化された Cookie を渡し、復号化されたデータを返します。コマンドラインからスクリプトを実行すると、正常に動作します。apache ユーザーにシェルを与えて、そのユーザーとしてコマンドラインから実行しても問題なく動作します。スクリプトが apache から CGI として実行される場合、ソケット new は undef と $! を返します。「許可が拒否されました」と設定されています。???
このサーバーで CentOS 6.3 を実行しており、IPtables が無効になっています。
#!/usr/bin/perl
use strict;
use CGI;
use IO::Socket;
use JSON;
my $cgi = CGI->new();
my $cookie = $cgi->cookie('attESSec') || shift (@ARGV) || undef;
my $data = JSON::false;
if($cookie){
my $socket = IO::Socket::INET->new(
'PeerHost' => '127.0.0.1',
'PeerPort' => '1500',
'Proto' => 'tcp'
);
if($socket){
$socket->send($cookie . "\r\n");
$socket->recv(my $auth,1024);
$socket->close();
chomp($auth);
if($auth){
$data = (split(/\|/,$auth))[5];
}
}
else{
$data = $!;
}
}
print($cgi->header('application/javascript'));
print(JSON->new()->allow_nonref()->utf8()->encode($data));
exit();