Почему веб-доступ SSL работает как root в интерактивной оболочке, а не как пользователь `apache` в скрипте после фиксации? - PullRequest
0 голосов
/ 06 марта 2011

У меня есть Perl-программа, предназначенная для запуска из скрипта Subversion post-commit, который должен подключаться к веб-API на основе HTTPS.

Когда я тестирую программу из интерактивной оболочки в качестве пользователя root, он работает просто отлично.

Когда он запускается из скрипта post-commit, он выдает ошибку, и ответ от LWP соответствует строчке "500 Ошибка подключения".

Есть некоторыесвидетельство того, что при запуске из скрипта post-commit SS не включен, потому что когда я устанавливаю $ENV{HTTPS_DEBUG} =1; и запускаю его как root, я вижу отладочные данные, такие как

SSL_connect: before /подключите инициализацию

, но из сценария post-commit не выводится информация об отладке SLL.

  • Сценарий post-commit запускается как пользователь apache.
  • Я использую CentOS 64bit.

Прошло много лет с тех пор, как я работал с Unix, поэтому я не уверен, каковы следующие шаги, чтобы заставить SSL работать вэто дело.

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Разница в окружающей среде делает меня подозрительным.Как и при выполнении заданий cron, может случиться так, что среда, путь INC или сам интерпретатор perl достаточно отличаются, что не может найти Crypt :: SSLeay или что-либо еще, что вы используете для поддержки SSL.

В качестве шага по устранению неполадок попробуйте использовать эту программу как в вашей оболочке, так и в хуке post-commit, чтобы увидеть, есть ли разница между ними.Это выведет несколько переменных времени выполнения, которые показывают, что perl знает о своей среде, в временный файл.

#!/usr/bin/perl

use Data::Dumper;
use File::Temp qw( tempfile );
use strict;
use warnings;

my $tempdir = '/tmp';            # Change this if necessary.

my( $fh, $fname ) = tempfile( "tempXXXXXX", DIR => $tempdir, UNLINK => 0 );
print $fh Data::Dumper->Dump( [ \@INC, \%INC, $^X, $0, $], \@ARGV, \%ENV ],
                              [ qw( @INC %INC ^X 0 ] @ARGV %ENV ] ) ] );
close( $fh );

# Change this if the post-commit hook doesn't pass stdout back to you.
print "Wrote data to $fname.\n";

__END__

Если они существенно различаются, ваш следующий шаг - сделать среду в ловушке после фиксации такой же, какпод вашей оболочкой, например, добавив строку use lib qw( /path/to/where/ssl/modules/are/installed ); в раздел use вашего скрипта, установив PERL5LIB, используя полный путь к другому интерпретатору Perl или что-то еще подходящее.См. perldoc perlvar для описания некоторых переменных, если вы не знакомы с ними.

0 голосов
/ 07 марта 2011

Мне пришлось выполнить это:

setsebool httpd_can_network_connect=on

, чтобы процесс httpd мог устанавливать сетевые подключения

0 голосов
/ 06 марта 2011

Это не проблема Perl.Perl делает только то, что ему говорят.Выясните, что говорит "http:" против "https:" над Perl, и разберитесь с этим.Вам не нужно «настраивать Perl ... для использования SSL».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...