Init package

This commit is contained in:
misaka00251 2022-07-15 22:01:26 +08:00
parent 0a1a626bf0
commit ae46b03a3f
No known key found for this signature in database
GPG Key ID: 4AA100DC964EDE26
5 changed files with 363 additions and 0 deletions

189
perl-LDAP.spec Normal file
View File

@ -0,0 +1,189 @@
%bcond_with perl_LDAP_enables_optional_test
# Support XML serialization of LDAP schemata (DSML languge)
%bcond_with perl_LDAP_enables_xml
Name: perl-LDAP
Version: 0.68
Release: 1
Summary: LDAP Perl module
License: GPL+ or Artistic
URL: https://metacpan.org/release/perl-ldap
Source0: https://cpan.metacpan.org/authors/id/M/MA/MARSCHAP/perl-ldap-%{version}.tar.gz
# Optional tests need to know a location of an LDAP server executable
Patch0: perl-ldap-0.65-Configure-usr-sbin-slapd-for-tests.patch
# Remove an unreliable cancelling test
Patch1: perl-ldap-0.66-test-Remove-a-test-for-cancelling-asynchronous-calls.patch
# Fix resolving localhost on loopback-only machines
Patch2: perl-ldap-0.68-Do-not-default-IO-Socket-IP-to-AI_ADDRCONFIG-flag.patch
BuildArch: noarch
BuildRequires: coreutils
BuildRequires: make
BuildRequires: perl-generators
BuildRequires: perl-interpreter
BuildRequires: perl(Config)
BuildRequires: perl(inc::Module::Install)
BuildRequires: perl(Module::Install::AutoInstall)
BuildRequires: perl(Module::Install::Metadata)
BuildRequires: perl(Module::Install::WriteAll)
# Run-time:
BuildRequires: perl(base)
BuildRequires: perl(Carp)
BuildRequires: perl(constant)
BuildRequires: perl(Convert::ASN1) >= 0.2
BuildRequires: perl(Encode)
BuildRequires: perl(Exporter)
BuildRequires: perl(IO::Select)
BuildRequires: perl(IO::Socket)
%if %{with perl_LDAP_enables_optional_test}
BuildRequires: perl(IO::Socket::SSL) >= 1.26
%endif
BuildRequires: perl(Socket)
BuildRequires: perl(strict)
BuildRequires: perl(Text::Soundex)
BuildRequires: perl(Time::Local)
%if %{with perl_LDAP_enables_xml}
BuildRequires: perl(XML::SAX::Base)
BuildRequires: perl(XML::SAX::Writer)
%endif
# Tests:
BuildRequires: perl(File::Basename)
BuildRequires: perl(File::Compare)
BuildRequires: perl(File::Path)
BuildRequires: perl(File::Spec)
BuildRequires: perl(IO::File)
BuildRequires: perl(Test::More)
%if %{with perl_LDAP_enables_optional_test}
# Optional tests:
BuildRequires: openldap-servers
BuildRequires: perl(LWP::UserAgent)
%endif
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
Requires: perl(Authen::SASL) >= 2.00
Requires: perl(Convert::ASN1) >= 0.2
Requires: perl(IO::Socket::SSL) >= 1.26
Requires: perl(JSON)
%if %{with perl_LDAP_enables_xml}
Suggests: perl(Net::LDAP::DSML)
%endif
Requires: perl(MIME::Base64)
# Prefer core Text::Soundex
Requires: perl(Text::Soundex)
Requires: perl(Time::Local)
# Remove under-specified dependencies
%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}^perl\\(Net::LDAP::Filter\\)$
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\(Convert::ASN1\\)$
%description
Net::LDAP is a collection of modules that implements an LDAP services API
for Perl programs. The module may be used to search directories or perform
maintenance functions such as adding, deleting or modifying entries.
%if %{with perl_LDAP_enables_xml}
%package -n perl-Net-LDAP-DSML
Summary: DSML Writer for Net::LDAP
Requires: perl-LDAP = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
Requires: perl(MIME::Base64)
Requires: perl(Net::LDAP::Schema)
Requires: perl(XML::SAX::Writer)
%description -n perl-Net-LDAP-DSML
Directory Service Markup Language (DSML) is the XML standard for representing
directory service information in XML. At the moment this Perl module only
writes DSML entry and schema entities. Reading DSML entities is a future
project.
%endif
%package tests
Summary: Tests for %{name}
Requires: coreutils
Requires: perl-LDAP = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: perl-Test-Harness
Requires: perl(Convert::ASN1) >= 0.2
Requires: perl(File::Spec)
Requires: perl(Net::LDAPI)
Requires: perl(Text::Soundex)
%if %{with perl_LDAP_enables_xml}
Requires: perl(XML::SAX::Base)
Requires: perl(XML::SAX::Writer)
%endif
%if %{with perl_LDAP_enables_optional_test}
# Optional tests:
Requires: openldap-servers
Requires: perl(IO::Socket::SSL) >= 1.26
Requires: perl(Net::LDAPS)
Requires: perl(LWP::UserAgent)
%endif
%description tests
Tests from %{name}-%{version}. Execute them with "%{_libexecdir}/%{name}/test".
%prep
%setup -q -n perl-ldap-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
chmod -c 644 bin/* contrib/* lib/Net/LDAP/DSML.pm
perl -pi -e 's|^#!/usr/local/bin/perl\b|#!%{__perl}|' contrib/*
rm -rf inc
perl -i -ne 'print $_ unless m{^inc/}' MANIFEST
%if !%{with perl_LDAP_enables_xml}
rm t/05dsml.t
perl -i -ne 'print $_ unless m{^t/05dsml\.t}' MANIFEST
%endif
find -type f \! -name 'regenerate_cert.sh' -exec chmod -x {} +
for F in t/*; do
perl -i -MConfig -pe 's/\A#!perl\b/$Config{startperl}/' "$F"
chmod +x "$F"
done
%build
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 < /dev/null
%{make_build}
%install
%{make_install}
mkdir -p %{buildroot}/%{_libexecdir}/%{name}
cp -a data t test.cfg %{buildroot}/%{_libexecdir}/%{name}
cat > %{buildroot}/%{_libexecdir}/%{name}/test <<'EOF'
#!/bin/bash
set -e
DIR=$(mktemp -d)
pushd "$DIR"
cp -a %{_libexecdir}/%{name}/* ./
prove -I .
popd
rm -rf "$DIR"
EOF
chmod +x %{buildroot}/%{_libexecdir}/%{name}/test
%{_fixperms} %{buildroot}/*
%check
make test
%files
%doc Changes CREDITS
%doc contrib/ bin/
%{perl_vendorlib}/Bundle/
%{perl_vendorlib}/LWP/
%{perl_vendorlib}/Net/
%exclude %{perl_vendorlib}/Net/LDAP/DSML.pm
%{_mandir}/man3/*.3pm*
%exclude %{_mandir}/man3/Net::LDAP::DSML.3pm*
%if %{with perl_LDAP_enables_xml}
%files -n perl-Net-LDAP-DSML
%{perl_vendorlib}/Net/LDAP/DSML.pm
%{_mandir}/man3/Net::LDAP::DSML.3pm*
%endif
%files tests
%{_libexecdir}/%{name}
%changelog
* Thu Jun 30 2022 misaka00251 <misaka00251@misakanet.cn> - 0.68-1
- Init package (Thanks to fedora team)

View File

@ -0,0 +1,58 @@
From d35a08a77306210ed95a797d5a6ed1160df84b95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Thu, 4 Apr 2019 17:03:01 +0200
Subject: [PATCH] Configure /usr/sbin/slapd for tests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The tests need to know slapd executable file name.
The tests uses sssvlv overlay without loading its module. That's maybe
for statically built openldap. However, we have a dynamically built
server and we want to rely on a default module path because it varies
among architectures. Thus we just uncomment loading the module.
Also enable SSL and IPC tests.
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
data/slapd.conf.in | 2 +-
test.cfg | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/data/slapd.conf.in b/data/slapd.conf.in
index c6c06a3..3c7b6fb 100644
--- a/data/slapd.conf.in
+++ b/data/slapd.conf.in
@@ -11,7 +11,7 @@ include $SLAPD_SCHEMA_DIR/openldap.schema
# get required dynmaic modules
#modulepath $SLAPD_MODULE_DIR
#moduleload back_$SLAPD_DB
-#moduleload sssvlv
+moduleload sssvlv
# PID & args file
pidfile $TESTDB/slapd.pid
diff --git a/test.cfg b/test.cfg
index 0f951f6..ea5a50c 100644
--- a/test.cfg
+++ b/test.cfg
@@ -4,12 +4,12 @@
# Set this to the full path of your LDAP server executable
# (e.g '/usr/sbin/slapd')
-$SERVER_EXE = '<path to ldap server executable>';
+$SERVER_EXE = '/usr/sbin/slapd';
# This should be one of
# * openldap[+ssl][+ipc][+sasl]
# options are appended with '+' signs
-$SERVER_TYPE = 'openldap';
+$SERVER_TYPE = 'openldap+ssl+ipc';
# Change this if your host cannot be contacted as localhost
# Some tests may fail if the name does not resolve to an IPv4 and an IPv6 address
--
2.20.1

View File

@ -0,0 +1,65 @@
From 5a2388c895cfd7db5f6ca1cc4acb062dfde336bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Thu, 25 Apr 2019 14:23:55 +0200
Subject: [PATCH] test: Remove a test for cancelling asynchronous calls
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
t/60cancel.t performed a racy test when it started an asynchronous query, then
it canceled it and tested that the cancelling succeeded. However, if a server
finished the search before the cancelling order was issued, the cancel itself
failed because it referred an not running and thus then nonexisting query:
t/60cancel.t .. 1/7
# Failed test 'cancel a running operation: 119: message ID not found'
# at t/60cancel.t line 63.
# This test may have failed because the server was too fast
The race was actually admitted in the diag message.
This patch removes the unreliable test to prevent from false negatives.
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
t/60cancel.t | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/t/60cancel.t b/t/60cancel.t
index c72bfa5..8a3074c 100644
--- a/t/60cancel.t
+++ b/t/60cancel.t
@@ -11,7 +11,7 @@ BEGIN { require "t/common.pl" }
start_server()
-? plan tests => 7
+? plan tests => 6
: plan skip_all => 'no server';
@@ -47,21 +47,6 @@ SKIP: {
# cancel the finished search => should fail
$cancel = $ldap->cancel($search);
ok($cancel->code, "cancel a finished operation: " . $cancel->code . ": " . $cancel->error);
-
- # switch to async mode
- $ldap->async(1);
-
- # perform a search (asynchronously)
- $search = $ldap->search(
- base => $BASEDN,
- filter => '(objectclass=*)',
- callback => \&process_entry, # Call this sub for each entry
- );
-
- # cancel the running search => should work [may fail, as it depends on the server's speed]
- $cancel = $ldap->cancel($search);
- ok(!$cancel->code, "cancel a running operation: " . $cancel->code . ": " . $cancel->error)
- or diag("This test may have failed because the server was too fast");
}
--
2.20.1

View File

@ -0,0 +1,51 @@
From 957a39309fa2f8a85a6b8a0a2c5b1751a151cb8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Tue, 16 Feb 2021 15:29:58 +0100
Subject: [PATCH] Do not default IO::Socket::IP to AI_ADDRCONFIG flag
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
t/40connect.t fails if the only available network interface is
loopback and IO::Socket::IP is installed:
# perl -Ilib -I. t/40connect.t
1..3
ok 1 - client with IPv4/IPv6 auto-selection, bound to ::1
ldap://localhost:9009/ Name or service not known at t/common.pl line 157.
# Looks like your test exited with 22 just after 1.
The reason is that IO::Socket::IP by default resolves host names with
AI_ADDRCONFIG flag and in the particular case (no interfaces other
than loopback) a system resolver (glibc in my case) hides both IPv4
and IPv6 addreses of the hostname (e.g. localhost).
See <https://rt.cpan.org/Ticket/Display.html?id=104793> for more
details.
I applied a workaround similar to one found in IO-Socket-SSL.
I believe that other Socket implementations perl-ldap can use do not
suffer from this problem.
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
lib/Net/LDAP.pm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lib/Net/LDAP.pm b/lib/Net/LDAP.pm
index 5dfe3e3..be11d12 100644
--- a/lib/Net/LDAP.pm
+++ b/lib/Net/LDAP.pm
@@ -167,6 +167,9 @@ sub connect_ldap {
LocalAddr => $arg->{localaddr} || undef,
Proto => 'tcp',
($class eq 'IO::Socket::IP' ? 'Family' : 'Domain') => $domain,
+ # Work around IO::Socket::IP defaulting to AI_ADDRCONFIG which breaks
+ # resolution if only a loopback interface is available. CPAN RT#104793.
+ ($class eq 'IO::Socket::IP' and $domain ne AF_UNSPEC ? ('GetAddrInfoFlags' => 0) : ()),
MultiHomed => $arg->{multihomed},
Timeout => defined $arg->{timeout}
? $arg->{timeout}
--
2.26.2

BIN
perl-ldap-0.68.tar.gz Normal file

Binary file not shown.