# Need Net::SSLeay 1.49 for MODE_AUTO_RETRY unless (eval {require Net::SSLeay; Net::SSLeay->VERSION(1.49)}) { $ok = 0; $reason .= qq/Net::SSLeay 1.49 must be installed for https support\n/; } иду в модуль netssleay который есть в списке requirements к модулю вижу только в исходнике загрузку бинарного кода больше нигде явно не указано это требование eval { require XSLoader; XSLoader::load('Net::SSLeay', $VERSION); 1; } or do { require DynaLoader; push @ISA, 'DynaLoader'; bootstrap Net::SSLeay $VERSION; };
к примеру модуль https://metacpan.org/source/DAGOLDEN/HTTP-Tiny-0.076/lib/HTTP/Tiny.pm
содержит код
# Need Net::SSLeay 1.49 for MODE_AUTO_RETRY
unless (eval {require Net::SSLeay; Net::SSLeay->VERSION(1.49)}) {
$ok = 0;
$reason .= qq/Net::SSLeay 1.49 must be installed for https support\n/;
}
иду в модуль netssleay который есть в списке requirements к модулю
вижу только в исходнике загрузку бинарного кода
больше нигде явно не указано это требование
eval {
require XSLoader;
XSLoader::load('Net::SSLeay', $VERSION);
1;
} or do {
require DynaLoader;
push @ISA, 'DynaLoader';
bootstrap Net::SSLeay $VERSION;
};
https://metacpan.org/source/MIKEM/Net-SSLeay-1.85/lib/Net/SSLeay.pm
регуляркой по исходникам проверять проверять и больше никак?
типа если есть XSLoader::load(' - значит модуль какие то бинарники грузит
Reply
А можно так:
# strace -e trace=openat perl -MHTTP::Tiny -le 'print $HTTP::Tiny::VERSION' |& grep -F .so
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libperl.so.5.26", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libutil.so.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/local/lib64/perl5/auto/IO/IO.so", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/usr/lib64/perl5/vendor_perl/auto/Socket/Socket.so", O_RDONLY|O_CLOEXEC) = 6
openat(AT_FDCWD, "/usr/lib64/perl5/auto/Fcntl/Fcntl.so", O_RDONLY|O_CLOEXEC) = 6
openat(AT_FDCWD, "/usr/lib64/perl5/auto/POSIX/POSIX.so", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 5
покажет, какие бинарные библиотеки подгружаются, SSLeay нет.
А вот если запустить
# strace -e trace=openat perl -MHTTP::Tiny -le 'print $HTTP::Tiny::VERSION; print HTTP::Tiny->new->can_ssl' |& grep SSLeay
openat(AT_FDCWD, "/usr/lib64/perl5/vendor_perl/Net/SSLeay.pm", O_RDONLY) = 4
openat(AT_FDCWD, "/usr/lib64/perl5/vendor_perl/auto/Net/SSLeay/autosplit.ix", O_RDONLY) = 5
openat(AT_FDCWD, "/usr/lib64/perl5/vendor_perl/auto/Net/SSLeay/SSLeay.so", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/usr/lib64/perl5/vendor_perl/auto/Net/SSLeay/randomize.al", O_RDONLY) = 3
увидим, что бинарную библиотеку подключили.
XSLoader::load может грузить, может не грузить, в зависимости от логики.
он может грузить и системны модули, которые всегда есть в дистрибутиве.
Reply
Leave a comment