openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
February 2009
- 1 participants
- 1117 discussions
Hello community,
here is the log from the commit of package tellico for openSUSE:Factory
checked in at Tue Feb 24 00:17:50 CET 2009.
--------
--- KDE/tellico/tellico.changes 2009-02-16 11:47:34.000000000 +0100
+++ tellico/tellico.changes 2009-02-23 14:08:35.000000000 +0100
@@ -1,0 +2,5 @@
+Mon Feb 23 12:17:04 CET 2009 - pgajdos(a)suse.cz
+
+- updated to SVN version ported to KDE4 (upcomming 2.0.0)
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
tellico-1.3.5.tar.bz2
New:
----
tellico-1.9_SVN20090219.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ tellico.spec ++++++
--- /var/tmp/diff_new_pack.GD4083/_old 2009-02-24 00:16:46.000000000 +0100
+++ /var/tmp/diff_new_pack.GD4083/_new 2009-02-24 00:16:46.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package tellico (Version 1.3.5)
+# spec file for package tellico (Version 1.9_SVN20090219)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -19,9 +19,9 @@
Name: tellico
-BuildRequires: kdemultimedia3-CD kdemultimedia3-devel libyaz-devel taglib-devel tcpd-devel
+BuildRequires: cmake kdemultimedia4 kdepim4-devel libkde4-devel libpoppler-qt4-devel libqimageblitz-devel
Summary: A book collection manager
-Version: 1.3.5
+Version: 1.9_SVN20090219
Release: 1
License: GPL v2 or later
Group: Productivity/Other
@@ -29,10 +29,11 @@
Provides: bookcase
Obsoletes: bookcase
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Prefix: /opt/kde3
Url: http://www.periapsis.org/tellico/
Patch: fix-compile.diff
Requires: %{name}-lang = %{version}
+%kde4_pimlibs_requires
+%kde4_runtime_requires
%description
Tellico is an KDE application for keeping track of your collections. It
@@ -45,20 +46,21 @@
%prep
%setup -q
%patch
-. /etc/opt/kde3/common_options
-update_admin --no-unsermake
%build
-. /etc/opt/kde3/common_options
-./configure $configkde --disable-final
-do_make %{?jobs:-j %jobs}
+%cmake_kde4 -d build
+%make_jobs
%install
-. /etc/opt/kde3/common_options
-make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET
+cd build
+%makeinstall
+cd ..
+rm $RPM_BUILD_ROOT/usr/share/doc/kde/HTML/fr/tellico/fr/common
+rm $RPM_BUILD_ROOT/usr/share/doc/kde/HTML/en/tellico/en/common
+rm -r $RPM_BUILD_ROOT/nogo
%suse_update_desktop_file %name Office Database
%find_lang %{name}
-kde_post_install
+%kde_post_install
%clean
rm -rf $RPM_BUILD_ROOT
@@ -66,17 +68,23 @@
%files
%defattr(-,root,root,0755)
%doc AUTHORS COPYING ChangeLog
-/opt/kde3/bin/tellico
-/opt/kde3/share/applications/*
-/opt/kde3/share/apps/*
-/opt/kde3/share/config/*
-/opt/kde3/share/config.kcfg/*
-/opt/kde3/share/icons/*
-/opt/kde3/share/mimelnk/*
+%{_bindir}/tellico
+%{_datadir}/applications/kde4/tellico.desktop
+%{_datadir}/icons/hicolor/*/apps/tellico.png
+%{_datadir}/icons/hicolor/*/mimetypes/application-x-tellico.png
+%{_datadir}/mime/packages/tellico.xml
+%{_kde_share_dir}/apps/kconf_update/tellico*
+%{_kde_share_dir}/config.kcfg/tellico_config.kcfg
+%{_kde_share_dir}/apps/%{name}
+%{_kde_config_dir}/*
%files lang -f %{name}.lang
+%defattr(-,root,root,0755)
+%dir %{_kde_html_dir}/fr
%changelog
+* Mon Feb 23 2009 pgajdos(a)suse.cz
+- updated to SVN version ported to KDE4 (upcomming 2.0.0)
* Mon Feb 16 2009 pgajdos(a)suse.cz
- update to 1.3.5:
* Updated entry updating to not combine multiple values.
++++++ fix-compile.diff ++++++
--- /var/tmp/diff_new_pack.GD4083/_old 2009-02-24 00:16:46.000000000 +0100
+++ /var/tmp/diff_new_pack.GD4083/_new 2009-02-24 00:16:46.000000000 +0100
@@ -1,58 +1,8 @@
---- Makefile.am
-+++ Makefile.am
-@@ -36,6 +36,7 @@
- @cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
+--- CMakeLists.txt
++++ CMakeLists.txt
+@@ -1,4 +1,5 @@
+ PROJECT(tellico)
++cmake_minimum_required(VERSION 2.6)
- xdg_apps_DATA = tellico.desktop
-+xdg_mimedir = $(kde_datadir)/mime/packages
- xdg_mime_DATA = tellico.xml
-
- mimedir = $(kde_mimedir)/application
---- src/cite/lyxpipe.cpp
-+++ src/cite/lyxpipe.cpp
-@@ -21,6 +21,7 @@
- #include <klocale.h>
-
- #include <qfile.h>
-+#include <klocale.h>
-
- #include <sys/types.h>
- #include <sys/stat.h>
---- src/entryview.cpp
-+++ src/entryview.cpp
-@@ -27,6 +27,7 @@
- #include "latin1literal.h"
- #include "../core/drophandler.h"
-
-+#include <klocale.h>
- #include <kstandarddirs.h>
- #include <krun.h>
- #include <kmessagebox.h>
---- src/translators/audiofileimporter.cpp
-+++ src/translators/audiofileimporter.cpp
-@@ -244,10 +244,10 @@
- entry->setField(file, insertValue(entry->field(file), fileValue, trackNum));
- }
- } else {
-- myDebug() << *it << " contains no track number and track number cannot be determined, so the track is not imported." << endl;
-+ kdDebug() << *it << " contains no track number and track number cannot be determined, so the track is not imported." << endl;
- }
- } else {
-- myDebug() << *it << " has an empty title, so the track is not imported." << endl;
-+ kdDebug() << *it << " has an empty title, so the track is not imported." << endl;
- }
- if(!tag->comment().stripWhiteSpace().isEmpty()) {
- QString c = entry->field(comments);
-@@ -366,9 +366,9 @@
- list += QString::null;
- }
- if(!list[pos_-1].isNull()) {
-- myDebug() << "AudioFileImporter::insertValue() - overwriting track " << pos_ << endl;
-- myDebug() << "*** Old value: " << list[pos_-1] << endl;
-- myDebug() << "*** New value: " << value_ << endl;
-+ kdDebug() << "AudioFileImporter::insertValue() - overwriting track " << pos_ << endl;
-+ kdDebug() << "*** Old value: " << list[pos_-1] << endl;
-+ kdDebug() << "*** New value: " << value_ << endl;
- }
- list[pos_-1] = value_;
- return list.join(QString::fromLatin1("; "));
+ #http://www.cmake.org/Wiki/CMake_Useful_Variables
+ # automatically add CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package suse-sam for openSUSE:Factory
checked in at Tue Feb 24 00:16:36 CET 2009.
--------
--- suse-sam/suse-sam.changes 2009-02-17 15:35:20.000000000 +0100
+++ suse-sam/suse-sam.changes 2009-02-23 17:39:01.000000000 +0100
@@ -1,0 +2,32 @@
+Mon Feb 23 17:16:24 CET 2009 - od(a)suse.de
+
+- update to version 0.7.0:
+ * report found products, give cues to products and repos in log
+ * ignore product files unless they are called *.prod or
+ baseproduct
+ * read product-related infos from solv-files to identify them
+ * use content-file information only if libsatsolver unusable
+ * ignore repositories that come without sufficient product
+ information
+ * use solv files created from reference data as additional
+ repositories or "possible sources" for packages
+ * require satsolver-tools as sam needs repo2solv.sh
+ * improve logging for repositories
+ * skip unreadable repo files
+ * convert "/" in repo ids to "_" when used as a subdir name
+ * use gpg keys from reference data
+ * fix gpg: never ask questions or wait for input
+ * make sure to remove temporary directory on exit
+ * log version of installed sam packages, contained reference data
+ * collect list of codestreams allowed by installed SUSE/Novell
+ products
+ * only accept codestreams that match the known codestream_schema
+ * treat packages with mismatched codestream as foreign packages
+ * cache file version bumped to 0.8
+ * help message: remove size estimate for temp files, as 10 MB or
+ more may be required (depends on size of reference data now)
+ * warn if signature is ok but VENDOR does not look not ok
+ * if signing keys exist but package is not signed, do not
+ identify by VENDOR
+
+-------------------------------------------------------------------
--- suse-sam/suse-sam-data.changes 2009-02-17 15:35:20.000000000 +0100
+++ suse-sam/suse-sam-data.changes 2009-02-23 17:39:01.000000000 +0100
@@ -1,0 +2,5 @@
+Mon Feb 23 17:32:03 CET 2009 - od(a)suse.de
+
+- version bump to 0.7.0
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
suse-sam-0.6.1.tar.bz2
suse-sam-data-0.6.1.tar.bz2
New:
----
suse-sam-0.7.0.tar.bz2
suse-sam-data-0.7.0.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ suse-sam-data.spec ++++++
--- /var/tmp/diff_new_pack.j21408/_old 2009-02-24 00:12:25.000000000 +0100
+++ /var/tmp/diff_new_pack.j21408/_new 2009-02-24 00:12:25.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package suse-sam-data (Version 0.6.1)
+# spec file for package suse-sam-data (Version 0.7.0)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -23,7 +23,7 @@
Group: System/Management
Recommends: perl suse-sam
AutoReqProv: on
-Version: 0.6.1
+Version: 0.7.0
Release: 2
Summary: Supportability Analysis Module reference data
Url: http://git.opensuse.org/?p=projects/supportability-analysis-module.git
@@ -46,10 +46,11 @@
%build
%define datadir /usr/share/suse-sam
+%define scriptname collect-product-metadata
%install
%{__mkdir} -pv %{buildroot}%{datadir}
-%{__install} -m 755 collect-product-metadata %{buildroot}%{datadir}/
+%{__install} -m 755 %{scriptname} %{buildroot}%{datadir}/
%{__install} -m 644 data/* %{buildroot}%{datadir}/
%clean
@@ -61,6 +62,8 @@
%{datadir}
%changelog
+* Mon Feb 23 2009 od(a)suse.de
+- version bump to 0.7.0
* Tue Feb 17 2009 od(a)suse.de
- new package; includes:
* collect-product-metadata
++++++ suse-sam.spec ++++++
--- /var/tmp/diff_new_pack.j21408/_old 2009-02-24 00:12:25.000000000 +0100
+++ /var/tmp/diff_new_pack.j21408/_new 2009-02-24 00:12:25.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package suse-sam (Version 0.6.1)
+# spec file for package suse-sam (Version 0.7.0)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -21,10 +21,10 @@
Name: suse-sam
License: GPL v2 or later
Group: System/Management
-Requires: rpm perl perl-XML-Simple
+Requires: rpm perl perl-XML-Simple satsolver-tools
Recommends: gpg libzypp perl-satsolver
AutoReqProv: on
-Version: 0.6.1
+Version: 0.7.0
Release: 2
Summary: Supportability Analysis Module
Url: http://git.opensuse.org/?p=projects/supportability-analysis-module.git
@@ -59,6 +59,35 @@
%doc COPYING
%{_bindir}/*
%changelog
+* Mon Feb 23 2009 od(a)suse.de
+- update to version 0.7.0:
+ * report found products, give cues to products and repos in log
+ * ignore product files unless they are called *.prod or
+ baseproduct
+ * read product-related infos from solv-files to identify them
+ * use content-file information only if libsatsolver unusable
+ * ignore repositories that come without sufficient product
+ information
+ * use solv files created from reference data as additional
+ repositories or "possible sources" for packages
+ * require satsolver-tools as sam needs repo2solv.sh
+ * improve logging for repositories
+ * skip unreadable repo files
+ * convert "/" in repo ids to "_" when used as a subdir name
+ * use gpg keys from reference data
+ * fix gpg: never ask questions or wait for input
+ * make sure to remove temporary directory on exit
+ * log version of installed sam packages, contained reference data
+ * collect list of codestreams allowed by installed SUSE/Novell
+ products
+ * only accept codestreams that match the known codestream_schema
+ * treat packages with mismatched codestream as foreign packages
+ * cache file version bumped to 0.8
+ * help message: remove size estimate for temp files, as 10 MB or
+ more may be required (depends on size of reference data now)
+ * warn if signature is ok but VENDOR does not look not ok
+ * if signing keys exist but package is not signed, do not
+ identify by VENDOR
* Tue Feb 17 2009 od(a)suse.de
- update to version 0.6.1:
* do not find orphans by default: changed option
++++++ suse-sam-0.6.1.tar.bz2 -> suse-sam-0.7.0.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/suse-sam/sam new/suse-sam/sam
--- old/suse-sam/sam 2009-02-17 12:43:26.000000000 +0100
+++ new/suse-sam/sam 2009-02-23 17:33:22.000000000 +0100
@@ -25,8 +25,9 @@
# Notes:
#
# RPM epoch is not used at SUSE/Novell and elsewhere, as it is sticky
-# (every version upgrade must contain the right epoch value) and also not
-# visible to the user. SAM still is aware of the epoch.
+# (every version upgrade of any distribution's version of this package must
+# contain the latest epoch value) and also not visible to the user. SAM still
+# is aware of the epoch.
#
# Extensions for SELinux, ACLs, capabilities and others need to be added when
# they are supported by both the SUSE Linux kernel and the SUSE version of RPM.
@@ -44,7 +45,7 @@
my $progspcs = $progname; $progspcs =~ s{.}{ }g;
my $invocation_cmd_line = $progname ." ". join (" ", @ARGV);
-my $prog_version = '0.6.1';
+my $prog_version = '0.7.0';
my $defaulttmp = "/tmp";
my $tmpdir = defined $ENV{'TMPDIR'} ? $ENV{'TMPDIR'} : $defaulttmp;
@@ -52,8 +53,23 @@
my $pubring = "pubring";
my $sigfile = "sigfile";
my $signedfile = "signedfile";
+my $reftempdir = "temp";
+my $refsolvdir = "solv";
+my $refkeysdir = "keys";
my $tmpsubdirtemplate;
my $tmpsubdir;
+# remove temp files in the end (but not if the program ends before temp dir
+# name is known)
+my $remove_ok = 0;
+my $rm_command = "/bin/rm";
+END {
+ if (defined $remove_ok and $remove_ok) {
+ system("$rm_command -rf $tmpsubdir");
+ }
+}
+
+my $sam_packages = "suse-sam suse-sam-data";
+my %sam_version = ();
$ENV{"LC_ALL"} = "C";
@@ -61,14 +77,19 @@
my $Unsupportable = 0;
my $root_dir = "/";
+my $tar_command = "/bin/tar";
+my $mv_command = "/bin/mv";
+my $repo2solv_command = "/usr/bin/repo2solv.sh";
my $rpm_command = "/bin/rpm";
my $gpg_exe = "/usr/bin/gpg";
my $gpg_command = "$gpg_exe --no-default-keyring --keyring $pubring " .
- "--trust-model always";
+ "--trust-model always --batch < /dev/null";
+my $reference_datadir = "/usr/share/suse-sam";
my $zypp_conf = defined $ENV{'ZYPP_CONF'} ?
$ENV{'ZYPP_CONF'} : "/etc/zypp/zypp.conf"; # libzypp
my $products_dir = "/etc/products.d";
my %prodinfo = ();
+my $num_our_products = 0;
my $baseproduct;
# caches -- for development and debugging
@@ -76,7 +97,7 @@
my $rpm_qa_cache = "$cache_dir/rpm-qa";
my $rpm_Vv_cache = "$cache_dir/rpm-Vv";
my $rpm_e_cache = "$cache_dir/rpm-e";
-my $cache_file_version = "0.7";
+my $cache_file_version = "0.8";
# repositories -- for gpg keys and inst source information
my $default_zypp_cache = "/var/cache/zypp";
@@ -89,6 +110,7 @@
my $solvfilesdir;
my %repoinfo = ();
+my $allowed_codestreams = "";
# installed package information
my %packinfo = ();
@@ -108,6 +130,7 @@
#my %alien2edition = ();
my $num_sig_ok_packs = 0;
+my $num_prod_ok_packs = 0;
# package signing keys
my %good_key_ids = ();
@@ -123,6 +146,9 @@
# signature
my $headerprefix = "8eade80100000000";
+# regex for codestream schema
+my $codestream_schema = qr(obs://[^/]+/[^/]+/[^/]+)io;
+
# --------------------------------------------------------------------------
# statistics
my $Tstart = time();
@@ -381,6 +407,32 @@
}
# ---------------------------------------------------------------------------
+# Read the version of the installed SAM packages
+#
+sub get_installed_sam_version() {
+ my $cmd = "";
+
+ Log(0, " installed SAM packages:\n");
+
+ my $rpm_q = "$rpm_command -q --qf " .
+ "'%{NAME} %|EPOCH?{%{EPOCH}:}:{}|%{VERSION}-%{RELEASE}\n' " .
+ "$sam_packages";
+
+ open(FH, "$rpm_q |") || Die( "rpm -q: $!\n");
+ while (<FH>) {
+ chomp();
+ if ( ! m{^(\S+) (\S+)$} ) {
+ Log(0, " rpm -q: unexpected query response: '$_'\n");
+ next;
+ }
+
+ $sam_version{$1} = $2;
+ Log(0, " $_\n");
+ }
+ close(FH);
+}
+
+# ---------------------------------------------------------------------------
# Reading config files
#
sub simplify_path ($) {
@@ -391,6 +443,70 @@
return $path;
}
+#
+# Create reference data: convert tarballs to solv-files
+#
+sub create_reference_data() {
+ my $cmd = "";
+
+ Log(0, " using reference data for:\n");
+
+ my %compr_flags = ( ".gz" => "z", ".bz2" => "j", "" => "" );
+
+ mkdir("$refsolvdir", 0700) || Die( "mkdir $refsolvdir: $!\n");
+ mkdir("$refkeysdir", 0700) || Die( "mkdir $refkeysdir: $!\n");
+
+ foreach my $tarfile (sort (glob("$reference_datadir/*.tar{,.gz,.bz2}"))) {
+ $tarfile =~ m{^.*/([^/]*)\.tar(|\.gz|\.bz2)$};
+ my $repo_id = $1;
+ my $subdir = $repo_id;
+ my $solvfile = "$refsolvdir/$subdir/$solvfilename";
+ my $compr_flag = $compr_flags{$2};
+
+ Log(0, " %s\n", $repo_id );
+
+ mkdir("$refsolvdir/$subdir", 0700) || Die( "mkdir $refsolvdir/$subdir: $!\n");
+
+ mkdir("$reftempdir", 0700) || Die( "mkdir $reftempdir: $!\n");
+
+ $cmd = "$tar_command xC${compr_flag}f $reftempdir $tarfile";
+ System($cmd);
+
+ # save gpg keys for later
+ my @gpg_files = glob("$reftempdir/*.{key,asc}");
+ if ( $#gpg_files > -1 ) {
+ $cmd = "$mv_command " . join(" ", @gpg_files) . " $refkeysdir";
+ System($cmd);
+ }
+
+ $cmd = "$repo2solv_command $reftempdir > $solvfile";
+ System($cmd);
+
+ $cmd = "$rm_command -rf $reftempdir";
+ System($cmd);
+
+ # define initial repository information for reference solv files (later
+ # more information from the solv file will be added)
+ $repoinfo{$subdir} = {
+ name => $repo_id,
+ repo_id => $repo_id,
+ subdir => $subdir,
+ solvfile => $solvfile,
+ reference_data => 1,
+ }
+ }
+}
+
+# SUSE/Novell vendors of supported packages
+my $Vendors = qr((?:
+ SuSE\ GmbH |
+ SuSE\ AG |
+ SuSE\ Linux\ AG |
+ SUSE\ LINUX\ Products\ GmbH |
+ UnitedLinux\ LLC |
+ Novell
+))ixo;
+
BEGIN() {
eval { require XML::Simple; };
if ( $@ ) {
@@ -407,6 +523,7 @@
die unless ($@ =~ m{Can't locate});
Log(0, " no XML::Simple found: cannot read installed product information, must assume that packages do not belong to an installed product\n");
} else {
+ import XML::Simple;
$xml_simple = 1;
}
@@ -418,12 +535,17 @@
sub get_products ($) {
my ($root_dir) = @_;
+ Log(0, " Installed products:\n");
+
+ my %codestreams = ();
+
my $products_d = simplify_path("$root_dir/$products_dir");
if (not opendir(PD, "$products_d")) {
Log(0, " opendir(\"$products_d\"): $!\n");
} else {
foreach my $file (readdir(PD)) {
+ next if $file !~ m{^(baseproduct|.*\.prod)$};
my $path = "$products_d/$file";
if ($file eq "baseproduct") {
@@ -432,60 +554,59 @@
next;
}
- Log(0, " skipping: file not readable: $path\n"), next if (not -f $path or not -r $path);
+ if (not -f $path) {
+ Log(0, " skipping: not a regular file: $path\n");
+ next;
+ } elsif (not -r $path) {
+ Log(0, " skipping: not readable: $path\n");
+ next;
+ }
- #
+ # XML::Simple is required to read prod files
if ($xml_simple) {
- my $info = eval { XMLin($path) };
+ my $info = eval { XMLin($path, ForceArray => qr{^repository$}) };
if ($@) {
Log(0, " XMLin(\"$path\"): $@\n");
- } else {
- $prodinfo{$file} = $info;
+ next;
}
- }
- }
- }
-
- # find the packages that contain the installed product files, in an attempt
- # to find the corresponding update repositories
- # FIXME: hmmmm... this finds the inst repos, but how do I find the update repos?
- # This is needed to exclude update repositories that do not contain updates
- # for our products (-- note that update packages from products that are not
- # installed may also come from manually mixed update repos, and we cannot
- # detect this by simply looking for an update repo that "corresponds" to
- # the installed product (see next FIXME))
- # FIXME: to really fix this we need to evaluate the information in the raw
- # repo-md metadata (verify certification hierarchy, and retrieve the list
- # of possible update packages for the installed product from there (note
- # that to identify update repos for an installed product, we need a
- # codestream/repository tag in the repo-md metadata as well)) -- this will
- # get rid of false negatives and rarely show false positives (if update
- # packages are installed that are not listed in the repo-md metadata)
- foreach my $file (keys %prodinfo) {
- my $path = "$products_d/$file";
- my $chroot_path = "$products_dir/$file";
-
- my $rpm_qf = "$rpm_command -qf --qf " .
- "'%{NAME} %|EPOCH?{%{EPOCH}:}:{}|%{VERSION}-%{RELEASE} %{ARCH}\n' " .
- "$chroot_path";
- open($FH, "$rpm_qf |") || Die( "rpm -qf: $!\n");
- while (<$FH>) {
- chomp();
- if ( ! m{^(\S+) (\S+) (\S+)$} ) {
- Log(0, " rpm -qf: unexpected query response: '$_'\n");
- next;
- }
+ $prodinfo{$file} = $info;
- # using $path ("$root_dir/etc/products.d/SLES.prod") here to
- # separate the namespace from $file ("SLES.prod")
- $prodinfo{$path}->{
- 'release_package_name' => $1,
- 'release_package_evr' => $2,
- 'release_package_arch' => $3,
+ Log(0, " found %s:", $file);
+ if ( defined $info->{vendor} and
+ $info->{vendor} =~ m{^$Vendors}o ) {
+ $num_our_products++;
+ Log(0, "\n");
+ Log(0, " summary: %s\n",
+ defined $info->{summary} ? $info->{summary} : "(none)");
+ Log(0, " nvra: %s%s%s%s\n",
+ defined $info->{name} ? $info->{name} . " " : "(none) ",
+ defined $info->{version} ? $info->{version} . " " : "(none) ",
+ defined $info->{release} ? $info->{release} . " " : "(none) ",
+ defined $info->{arch} ? $info->{arch} . " " : "(none) ");
+
+ if ( defined $info->{register} and
+ defined $info->{register}->{repositories} and
+ defined $info->{register}->{repositories}->{repository} ) {
+ foreach my $codestream (@{$info->{register}->{repositories}->{repository}}) {
+ if (defined $codestream->{path} and
+ $codestream->{path} =~ m{^$codestream_schema$}) {
+ push @{$prodinfo{$file}->{allowed_codestreams}},
+ $codestream->{path};
+ Log(0, " repository: %s\n", $codestream->{path});
+ $codestreams{$codestream->{path}} = $file;
+ }
+ }
+ }
+ } else {
+ Log(0, " skipping third-party product\n");
+ }
}
}
- close($FH);
+ # build a regex from the list of codestreams allowed by installed
+ # SUSE/Novell products
+ $allowed_codestreams = "(" . join("|", map(quotemeta($_), (sort keys %codestreams))) . ")";
+ Log(9, " allowed codestreams: %s\n", $allowed_codestreams);
}
}
@@ -533,7 +654,16 @@
# version 11 11
# sp_version 0 (none)
#
+my @required_fields = ('name', 'baseurl', 'label',
+ 'distribution:distproduct', 'version:distversion');
+my @all_required_fields = ();
+foreach my $field (@required_fields) {
+ push @all_required_fields, split(/:/, $field);
+}
+
sub get_repo_infos () {
+ Log(0, " Repositories:\n");
+
foreach my $repofile (sort (glob("$reposdir/*.repo"))) {
if (not open(REPO, "<", $repofile)) {
Log(0, " open(\"$repofile\"): $!\n");
@@ -553,8 +683,20 @@
if (defined $repo_id) {
my $subdir = $repo_id;
$subdir =~ s{[/]}{_}go;
- $repoinfo{$subdir}->{'repo_id'} = $repo_id;
- $repoinfo{$subdir}->{'subdir'} = $subdir;
+
+ my $unique_suffix = "";
+ while (exists $repoinfo{$subdir . $unique_suffix}) {
+ $unique_suffix++;
+ }
+
+ $repoinfo{$subdir . $unique_suffix} = {
+ repo_id => $repo_id,
+ subdir => $subdir,
+ solvfile => "$solvfilesdir/$subdir/$solvfilename",
+ metadatadir => "$metadatadir/$subdir",
+ };
+
+ $subdir = $subdir . $unique_suffix;
while (<REPO>) {
$repoinfo{$subdir}->{$1} = $2, next if m{^\s*(\w+)\s*=\s*(.+)\s*$};
$repo_id = $1, last if m{^\s*\[(.*)\]\s*$};
@@ -570,10 +712,7 @@
foreach my $subdir (keys %repoinfo) {
my $info_ref = $repoinfo{$subdir};
- my $solvfile = "$solvfilesdir/$subdir/$solvfilename";
- if ( -r $solvfile ) {
- $repoinfo{$subdir}->{'solvfile'} = $solvfile;
- } else {
+ if ( not -r $info_ref->{solvfile} ) {
# delete repositories without solv file
Log(0, " skipping repository without solv file %s\n" .
" name: %s\n baseurl: %s\n",
@@ -591,12 +730,15 @@
$info_ref->{'sp_version'} = 0;
}
+ # TODO: get solv file mod time and evaluate repository:timestamp and
+ # repository:expire, and maybe consider evaluating the autorefresh tag
+
# get label, dist, version, sp_version and others
if ($satsolver == 0) {
Log(0, " no satsolver found: trying to use raw content files instead\n");
} elsif ($satsolver == -1) {
- Log(0, " no usable satsolver found: trying to use raw content files instead\n");
+ Log(0, " no usable satsolver found (old version?): trying to use raw content files instead\n");
}
foreach my $subdir (keys %repoinfo) {
@@ -615,9 +757,7 @@
my $repo = $pool->create_repo($subdir) || Die("create_repo($subdir)\n");
$repo->add_solv($info_ref->{'solvfile'});
- my $prod_solvable;
-
- # find the "product:" solvable
+ # find the "product:" solvable(s)
foreach my $solvable ($repo->solvables()) {
Die "solvable not defined\n" if not defined $solvable;
@@ -625,72 +765,37 @@
# $prodinfo{...}->{release_{product_name,evr,arch}};
# print all products found in the repo
- $prod_solvable = $solvable, last if $solvable->name() =~ m{^product:}io;
- }
-
- if (defined $prod_solvable) {
- $info_ref->{'label'} = $prod_solvable->attr("solvable:summary");
- $info_ref->{'distribution'} = $prod_solvable->attr("solvable:distribution");
- if ($prod_solvable->attr("solvable:evr") =~ m{^(\d+)-(\d+)$}o) {
- $info_ref->{'version'} = $1;
- $info_ref->{'sp_version'} = $2;
- }
- }
-
- my $inst_solvevr = $inst_solvable->evr();
- my $inst_solvstring = $inst_solvable->string();
+ my $prod_ref;
- my %found = ();
- foreach my $solvable ($pool->providers($inst_solvable->name())) {
- next if (not defined $solvable);
-
- my $subdir = $solvable->repo()->name();
- # do not use matches on the 'installed' repo
- next if $subdir eq "installed";
-
- my $reponame = $repoinfo{$subdir}->{name};
- my $reponumber = $repoinfo{$subdir}->{number};
-
- # identical package? (name, arch, evr, vendor, build time,
- # requires, ...)
- if ($solvable->identical($inst_solvable)) {
- Log(3, " = %-69s (repo has same package: %s)\n",
- $inst_solvstring, $reponame);
- $found{identical}++;
+ if ($solvable->name() =~ m{^product:}io) {
+ $info_ref->{'num_products'}++;
+ if ($info_ref->{'num_products'} > 1) {
+ # infos for product #2 and higher are stored below a
+ # "product#" key
+ $prod_ref = $info_ref->{'product' . $info_ref->{'num_products'}};
} else {
- # find out if the repository provides an older or newer package
- my $result = $solvable->compare($inst_solvable);
- my $solv_evr = $solvable->evr();
- if ($result < 0) {
- Log(2, " + %-35s %-15s > %-15s (repo has older evr: %s)\n",
- $inst_solvname, $inst_solvevr, $solv_evr, $reponame);
- $found{older}++;
- } elsif ($result > 0) {
- Log(1, " - %-35s %-15s < %-15s (repo has newer evr: %s)\n",
- $inst_solvname, $inst_solvevr, $solv_evr, $reponame);
- $found{newer}++;
- push @{$newer_exists{$inst_solvstring}}, "repo #$reponumber: $solv_evr";
- } else {
- # identical evr, different package: strange
- # (manual rebuild installed or in repo?)
- Log(1, " ! %-35s %-15s ~ %-15s (repo has same evr: %s)\n",
- $inst_solvname, $inst_solvevr, $solv_evr, $reponame);
- $found{similar}++;
- }
+ $prod_ref = $info_ref;
+ }
+ $prod_ref->{'label'} = $solvable->attr("solvable:summary") || undef;
+ $prod_ref->{'distribution'} = $solvable->attr("solvable:distribution") || undef;
+ $prod_ref->{'distproduct'} = $solvable->attr("product:distproduct") || undef;
+ $prod_ref->{'distversion'} = $solvable->attr("product:distversion") || undef;
+ if (exists $info_ref->{'reference_data'}) {
+ # provide a fake baseurl for reference data
+ $prod_ref->{'baseurl'} = $solvable->attr("product:url") || undef;
+ }
+ if ($solvable->attr("solvable:evr") =~ m{^(\d+)(:?-(\d+))?$}o) {
+ $prod_ref->{'version'} = $1;
+ $prod_ref->{'sp_version'} = $2 || 0;
}
- }
- if ((scalar(keys %found)) == 0) {
- Log(0, " m %-69s (no package with this name exists in SUSE/Novell repos)\n",
- $inst_solvname);
- } elsif (not exists $found{identical}) {
- Log(0, " ? %-69s (not found in SUSE/Novell repos)\n",
- $inst_solvstring);
}
}
- } elsif (defined $repoinfo{$subdir}->{'type'} and $repoinfo{$subdir}->{'type'} eq 'yast2') {
+ } elsif (defined $repoinfo{$subdir}->{'type'} and
+ $repoinfo{$subdir}->{'type'} eq 'yast2' and
+ defined $repoinfo{$subdir}->{metadatadir}) {
# only repos of "type=yast2" have a content file (see repofile) --
# if we find the content file we fetch information from it
- my $contentfile = "$metadatadir/$subdir/content";
+ my $contentfile = $repoinfo{$subdir}->{metadatadir} . "/content";
if (not open(CF, "<", $contentfile)) {
$repoinfo{$subdir}->{$1} = $2, next if m{^\s*(\w+)\s*=\s*(.+)\s*$};
Log(4, " open(\"$contentfile\"): $!\n");
@@ -713,20 +818,20 @@
# check for required fields, delete repo if fields are missing
foreach my $subdir (keys %repoinfo) {
my $info_ref = $repoinfo{$subdir};
- foreach my $field_list ('name', 'baseurl', 'label',
- 'distribution:distproduct', 'version') {
+ foreach my $field_list (@required_fields) {
my $found = 0;
my $tries = 0;
foreach my $field (split(/:/, $field_list)) {
$tries++;
- $found = 1 if (exists $info_ref->{$field});
+ $found = 1 if (exists $info_ref->{$field} and defined $info_ref->{$field});
}
if (not $found) {
- Log(0, " undefined field%s '%s' in repository %s: skipping:\n %s\n",
+ Log(1, " undefined field%s '%s' in repository %s: skipping:\n %s\n",
$tries > 1 ? "s" : "",
join("' or '", split(/:/, $field_list)), $subdir,
- join("\n ", map(sprintf("%-12s %s", "$_:", $info_ref->{$_}),
- (keys %$info_ref))));
+ join("\n ", map(sprintf("%-13s %s", "$_:",
+ $info_ref->{$_} || "(undef)"),
+ (@all_required_fields))));
delete $repoinfo{$subdir};
last;
}
@@ -775,16 +880,6 @@
# Setting up a keyring with SUSE/Novell build keys
#
-# SUSE/Novell vendors of supported packages
-my $Vendors = qr((?:
- SuSE\ GmbH |
- SuSE\ AG |
- SuSE\ Linux\ AG |
- SUSE\ LINUX\ Products\ GmbH |
- UnitedLinux\ LLC |
- Novell
-))ixo;
-
# SUSE/Novell build key of supported packages
my $Buildkeys = qr((?:
(?:SuSE|$Vendors)\ Package\ Signing\ Key |
@@ -854,7 +949,7 @@
# user asked to skip sig check or
# no SUSE/Novell keys we could use for checking?
if (not $CHECK_SIGNATURE or scalar (keys %good_key_ids) == 0) {
- # cannot check, so fall back on the vendor string in the RPM DB and
+ # cannot check, so fall back to the vendor string in the RPM DB and
# continue anyway, hoping for the best
return $vendor =~ m(^$Vendors)o;
}
@@ -863,16 +958,18 @@
# use RSAHEADER (more hash bits) if available, or fall back to DSAHEADER
$headersig = ($rsaheadersig =~ m{(none)}) ? $dsaheadersig : $rsaheadersig;
if ($headersig =~ m{(none)}) {
- # cannot check, use fallback
+ # cannot check, prepare log message
if ($vendor =~ m(^$Vendors)o) {
$is_ours = 1;
}
# log at level 0 if one of "our" packages had no signature (should not happen),
# log at level 4 if it is a "foreign" package without signature
Log($is_ours ? 0 : 4,
- " rpm: no header signature, using vendor: %-45s %s\n",
+ " rpm: no header signature, not our package: %-45s %s\n",
"$package_name:", $vendor);
- return $is_ours;
+ # we have keys to verify signatures, but this package has no signature:
+ # not ours
+ return 0;
}
# convert hex strings to binary
@@ -895,6 +992,12 @@
if (m{^gpg:\s*Good\s+signature}io) {
Log(4, " $_: $package_name: $vendor\n");
$is_ours = 1;
+
+ # warn if VENDOR does not look ok
+ if ($vendor !~ m(^$Vendors)o) {
+ Log(0, " rpm: header signature ok, wrong vendor for: %-45s %s\n",
+ "$package_name:", $vendor);
+ }
} elsif (m{^gpg:\s*(?:Can't|Cannot)\s+check\s+signature}io) {
Log(5, " $_: $package_name: $vendor\n");
}
@@ -906,6 +1009,26 @@
return $is_ours;
}
+# ---------------------------------------------------------------------------
+# Does the package match the installed products? (matching codestream)
+#
+sub matches_installed_products ($) {
+ my ($disturl) = @_;
+ my $matches_installed_products = 0;
+
+ # does "codestream" part of disturl match codestreams from installed
+ # SUSE/Novell prod files?
+ # obs://build.suse.de/SUSE:SLE-11:GA/standard
+ if ( $disturl =~ m{^($codestream_schema)} and
+ $1 =~ m{^$allowed_codestreams$} ) {
+ $matches_installed_products = 1;
+ }
+
+ $num_prod_ok_packs += $matches_installed_products;
+
+ return $matches_installed_products;
+}
+
my %prettyR =
(
"S" => "size",
@@ -1199,7 +1322,7 @@
my $rpmQ = "$rpm_command -qa --qf " .
"'%{NAME} %|EPOCH?{%{EPOCH}:}:{}|%{VERSION}-%{RELEASE} %{ARCH} " .
"%{INSTALLTIME} %{BUILDTIME} " .
- "%{VENDOR:shescape} %{DISTRIBUTION:shescape} " .
+ "%{VENDOR:shescape} %{DISTRIBUTION:shescape} %{DISTURL} " .
"%{RSAHEADER} %{DSAHEADER} %{HEADERIMMUTABLE}\n'";
# Either use cache if available...
@@ -1426,7 +1549,6 @@
Options:
-w|--write write reports to sam.* files
-t|--tmpdir write temporary files to <tmpdir> (default: $tmpdir)
- $progname needs about 100KB for temporary files.
The environment variable \$TMPDIR is evaluated first.
If it is not set, the built-in default "$defaulttmp"
is used. Option -t is evaluated last and overrides
@@ -1489,10 +1611,15 @@
eval { $tmpsubdir = tempdir("$tmpsubdirtemplate", CLEANUP => 1); };
Die("cannot create temp subdir $tmpsubdirtemplate: $@\n") if ( $@ );
+$remove_ok = 1;
+
# set temp file names
$pubring = "$tmpsubdir/$pubring";
$sigfile = "$tmpsubdir/$sigfile";
$signedfile = "$tmpsubdir/$signedfile";
+$refsolvdir = "$tmpsubdir/$refsolvdir";
+$refkeysdir = "$tmpsubdir/$refkeysdir";
+$reftempdir = "$tmpsubdir/$reftempdir";
#
# write reports if we have the $cache_dir directory
@@ -1513,15 +1640,19 @@
# ---------------------------------------------------------------------------
Log(0, "%%T: MS00: started %s\n", $invocation_cmd_line);
-Log(0, "%%T: MS01: Find metadata and set up GPG\n");
+Log(0, "%%T: MS01: Find metadata, get reference data and set up GPG\n");
+# read the version of the installed SAM packages
+get_installed_sam_version();
+# Create reference data: convert tarballs to solv-files
+create_reference_data();
#
# read available product, configuration and repository infos
#
-# Collect list of installed products from products.d
+# Collect list of installed products and codestreams from products.d
get_products($root_dir);
# get (configured) locations of repository files
get_repo_conf($root_dir);
-# get infos about all repositories
+# get product-related infos about all repositories
get_repo_infos();
if (not $CHECK_SIGNATURE) {
@@ -1529,7 +1660,8 @@
} elsif (not -x $gpg_exe) {
Log(0, " GPG executable \"$gpg_exe\" not found: will not check package authenticity\n");
} else {
- # setup keyring
+ # setup keyring from reference data, then from local metadata
+ find(\&setup_key, $refkeysdir);
find(\&setup_key, $metadatadir);
if (scalar (keys %good_key_ids) > 0) {
@@ -1550,14 +1682,14 @@
my $IN = rpm_qa($root_dir);
while ( <$IN> ) {
chomp();
- if ( ! m{^(\S+) (\S+) (\S+) ([0-9]+) ([0-9]+) '(.*?)' '(.*?)' (\S+) (\S+) (\S+)$} ) {
+ if ( ! m{^(\S+) (\S+) (\S+) ([0-9]+) ([0-9]+) '(.*?)' '(.*?)' (\S+) (\S+) (\S+) (\S+)$} ) {
Log(0, " rpm: unexpected query response: '$_'\n");
next;
}
my ($name, $evr, $arch, $inst_time, $build_time, $vendor, $dist,
- $rsaheadersig, $dsaheadersig, $rpmheader) =
- ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
+ $disturl, $rsaheadersig, $dsaheadersig, $rpmheader) =
+ ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);
my $package_name = "$name-$evr.$arch";
$vendor ||= "undef";
@@ -1571,6 +1703,8 @@
my $is_ours = is_our_package($rsaheadersig, $dsaheadersig, $rpmheader,
$package_name, $vendor);
+ my $matches_installed_products = matches_installed_products($disturl);
+
if ( $arch eq '(none)' and $is_ours ) {
#if ( $vendor =~ m(^$Vendors)o ) {
# ignore SUSE/Novell packages without architecture info
@@ -1580,10 +1714,17 @@
}
#if ( $vendor !~ m(^$Vendors)o ) {
- if ( not $is_ours ) {
- # remember packages from other vendors
- Log(0, " rpm: foreign vendor package: %-56s %s\n",
- "$package_name:", $vendor);
+ if ( not $is_ours or not $matches_installed_products ) {
+ # remember packages that do not match installed products or come from
+ # other vendors
+ if ( not $is_ours ) {
+ Log(0, " rpm: foreign vendor package: %-56s %s\n",
+ "$package_name:", $vendor);
+ } elsif ( not $matches_installed_products ) {
+ Log(0, " rpm: foreign codestream package: %-56s %s\n",
+ "$package_name:",
+ $disturl =~ m{^($codestream_schema)} ? $1 : $disturl );
+ }
$alieninfo{$package_name} = {
name => $name,
evr => $evr,
@@ -1592,6 +1733,7 @@
build_time => $build_time,
vendor => $vendor,
dist => $dist,
+ disturl => $disturl,
};
next;
}
@@ -1604,6 +1746,7 @@
build_time => $build_time,
vendor => $vendor,
dist => $dist,
+ disturl => $disturl,
};
$max_pack_name_length = max($max_pack_name_length, length($package_name));
}
@@ -1842,9 +1985,9 @@
Log(0, "%%T: MS03: verify");
if (not $VERIFY_PACKAGES) {
- Log(0, "%d packages: skipped\n", $num_packages);
+ Log(0, " %d packages: skipped\n", $num_packages);
} elsif ( $num_packages == 0 ) {
- Log(0, "%%T: Panic: no packages to verify!?\n");
+ Log(0, " 0 packages\n%%T: Panic: no packages to verify!?\n");
Die(-1);
} else {
Log(0, " %d packages\n", $num_packages);
@@ -1998,6 +2141,34 @@
# ===========================================================================
Report("*** Report by %s\n", $invocation_cmd_line);
+
+# TODO:
+# Output sam package versions
+
+Report("*** Installed Products: %d (supportable: %d)\n",
+ (scalar(keys %prodinfo)), $num_our_products);
+foreach my $file (keys %prodinfo) {
+ Report(" %s:", $file);
+ if ( defined $prodinfo{$file}->{vendor} and
+ $prodinfo{$file}->{vendor} =~ m{^$Vendors}o ) {
+ Report("\n");
+ Report(" summary: %s\n",
+ defined $prodinfo{$file}->{summary} ? $prodinfo{$file}->{summary} : "(none)");
+ Report(" nvra: %s%s%s%s\n",
+ defined $prodinfo{$file}->{name} ? $prodinfo{$file}->{name} . " " : "(none) ",
+ defined $prodinfo{$file}->{version} ? $prodinfo{$file}->{version} . " " : "(none) ",
+ defined $prodinfo{$file}->{release} ? $prodinfo{$file}->{release} . " " : "(none) ",
+ defined $prodinfo{$file}->{arch} ? $prodinfo{$file}->{arch} . " " : "(none) ");
+ if ( defined $prodinfo{$file}->{allowed_codestreams} ) {
+ foreach my $codestream (@{$prodinfo{$file}->{allowed_codestreams}}) {
+ Report(" repository: %s\n", $codestream);
+ }
+ }
+ } else {
+ Report(" third-party product\n");
+ }
+}
+
Report("*** Considered Packages (1a): %d (sig ok: %s), foreign: %d (excluded: %d)\n",
$num_packages, $CHECK_SIGNATURE ? $num_sig_ok_packs : "OFF",
$num_foreign, scalar( keys( %skipped_packages)));
@@ -2053,9 +2224,13 @@
my $info_ref = $repoinfo{$subdir};
Report(" Repository #%d:\n", $info_ref->{number});
- Report(" %s\n",
- join("\n ", map(sprintf("%-12s %s", "$_:", $info_ref->{$_}),
- (sort (keys %$info_ref)))));
+ foreach my $field (@required_fields) {
+ foreach my $subfield (split(/:/, $field)) {
+ Report(" %-13s %s\n", "$subfield:",
+ $info_ref->{$subfield} || "(undef)");
+ last if defined $info_ref->{$subfield};
+ }
+ }
}
}
++++++ suse-sam-data-0.6.1.tar.bz2 -> suse-sam-data-0.7.0.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/suse-sam-data/collect-product-metadata new/suse-sam-data/collect-product-metadata
--- old/suse-sam-data/collect-product-metadata 2009-02-13 20:50:45.000000000 +0100
+++ new/suse-sam-data/collect-product-metadata 2009-02-23 17:33:22.000000000 +0100
@@ -17,7 +17,7 @@
usage () {
cat >&2 <<EOF
-$PRG version 0.6.1
+$PRG version 0.7.0
usage:
$PRG [-h|--help] [-s] [-f] [-c] [-k|-r] [-t<tags_regex>] [-p<packs_regex>]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package release-notes-openSUSE for openSUSE:Factory
checked in at Tue Feb 24 00:04:43 CET 2009.
--------
--- release-notes-openSUSE/release-notes-openSUSE.changes 2009-01-14 14:58:59.000000000 +0100
+++ release-notes-openSUSE/release-notes-openSUSE.changes 2009-02-23 15:55:56.000000000 +0100
@@ -1,0 +2,6 @@
+Mon Feb 23 15:55:36 CET 2009 - ke(a)suse.de
+
+- 11.2.0:
+* Reset for 11.2.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
release-notes-opensuse-11.1.9.tar.bz2
New:
----
release-notes-opensuse-11.2.0.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ release-notes-openSUSE.spec ++++++
--- /var/tmp/diff_new_pack.S29060/_old 2009-02-24 00:03:16.000000000 +0100
+++ /var/tmp/diff_new_pack.S29060/_new 2009-02-24 00:03:16.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package release-notes-openSUSE (Version 11.1.9)
+# spec file for package release-notes-openSUSE (Version 11.2.0)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -28,7 +28,7 @@
Provides: kdebase-SuSE:/usr/share/doc/RELEASE_NOTES.en.html
Provides: release-notes = 10.3.70
Obsoletes: release-notes <= 10.3.70
-Version: 11.1.9
+Version: 11.2.0
Release: 1
Source0: release-notes-opensuse-%{version}.tar.bz2
Source8: %{name}.desktop.in
@@ -87,6 +87,9 @@
%doc /usr/share/doc/release-notes
%changelog
+* Mon Feb 23 2009 ke(a)suse.de
+- 11.2.0:
+ * Reset for 11.2.
* Wed Jan 14 2009 ke(a)suse.de
- 11.1.9:
- Update translations that are at least 50%% translated: cs da de es fr
++++++ release-notes-opensuse-11.1.9.tar.bz2 -> release-notes-opensuse-11.2.0.tar.bz2 ++++++
++++ 6374 lines of diff (skipped)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package post-build-checks for openSUSE:Factory
checked in at Tue Feb 24 00:03:09 CET 2009.
--------
--- post-build-checks/post-build-checks.changes 2009-02-20 08:19:45.000000000 +0100
+++ post-build-checks/post-build-checks.changes 2009-02-23 15:43:56.988242000 +0100
@@ -1,0 +2,5 @@
+Mon Feb 23 15:43:35 CET 2009 - ro(a)suse.de
+
+- cleanup uname hack in preun (bnc#476885)
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ post-build-checks.spec ++++++
--- /var/tmp/diff_new_pack.x27128/_old 2009-02-24 00:01:26.000000000 +0100
+++ /var/tmp/diff_new_pack.x27128/_new 2009-02-24 00:01:26.000000000 +0100
@@ -24,7 +24,7 @@
AutoReqProv: on
Summary: post checks for build after rpms have been created
Version: 1.0
-Release: 55
+Release: 57
PreReq: aaa_base permissions sed
Source0: %{name}-%{version}.tar.bz2
BuildArch: noarch
@@ -73,12 +73,19 @@
ln -s /usr/lib/build/helper/uname.sh /bin/uname
fi
+%preun
+if test "$1" = 0 -a -f /bin/uname.bin ; then
+ mv /bin/uname.bin /bin/uname
+fi
+
%files
%defattr(-, root, root)
%doc COPYING
/usr/lib/build
%changelog
+* Mon Feb 23 2009 ro(a)suse.de
+- cleanup uname hack in preun (bnc#476885)
* Fri Feb 20 2009 coolo(a)suse.de
- don't make the sequence point gcc warnings fatal, but let security
team review them case by case
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-Net-DNS for openSUSE:Factory
checked in at Tue Feb 24 00:01:14 CET 2009.
--------
--- perl-Net-DNS/perl-Net-DNS.changes 2009-01-20 16:57:16.000000000 +0100
+++ perl-Net-DNS/perl-Net-DNS.changes 2009-02-23 16:56:03.000000000 +0100
@@ -1,0 +2,9 @@
+Mon Feb 23 16:51:55 CET 2009 - anicka(a)suse.cz
+
+- update to 0.65
+ * When the AAAA object was constructed with new_from_hash with an
+ address containing the "::" shorthand notation normalization was
+ not done properly.
+ * Typo in Win32.pm Registry root.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
Net-DNS-0.64.tar.bz2
New:
----
Net-DNS-0.65.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Net-DNS.spec ++++++
--- /var/tmp/diff_new_pack.Y18383/_old 2009-02-23 23:58:09.000000000 +0100
+++ /var/tmp/diff_new_pack.Y18383/_new 2009-02-23 23:58:09.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package perl-Net-DNS (Version 0.64)
+# spec file for package perl-Net-DNS (Version 0.65)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -20,7 +20,7 @@
Name: perl-Net-DNS
BuildRequires: perl-Digest-HMAC perl-Net-IP
-Version: 0.64
+Version: 0.65
Release: 1
Provides: perl_dns
Obsoletes: perl_dns
@@ -73,6 +73,12 @@
/var/adm/perl-modules/%{name}
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 0.65
+ * When the AAAA object was constructed with new_from_hash with an
+ address containing the "::" shorthand notation normalization was
+ not done properly.
+ * Typo in Win32.pm Registry root.
* Tue Jan 20 2009 anicka(a)suse.cz
- update to 0.64
* Added support for the APL record (RFC 3123)
++++++ Net-DNS-0.64.tar.bz2 -> Net-DNS-0.65.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/Changes new/Net-DNS-0.65/Changes
--- old/Net-DNS-0.64/Changes 2008-12-30 18:26:47.000000000 +0100
+++ new/Net-DNS-0.65/Changes 2009-01-26 18:31:43.000000000 +0100
@@ -1,8 +1,20 @@
-$Id: Changes 768 2008-12-30 16:19:04Z olaf $ -*-text-*-
+$Id: Changes 795 2009-01-26 17:28:44Z olaf $ -*-text-*-
+
+
+**** 0.65 January 26, 2009
+
+Fix rt.cpan.org #41076
+
+ When the AAAA object was constructed with new_from_hash with an
+ address containing the "::" shorthand notation normalization was
+ not done properly.
+
+Fix rt.cpan.org #42375
+
+ Typo in Win32.pm Registry root.
+
-Revision history for Net::DNS
-=============================
**** 0.64 December 30, 2008
Feature rt.cpan.org #36656
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/lib/Net/DNS/Resolver/Win32.pm new/Net-DNS-0.65/lib/Net/DNS/Resolver/Win32.pm
--- old/Net-DNS-0.64/lib/Net/DNS/Resolver/Win32.pm 2008-12-30 18:26:46.000000000 +0100
+++ new/Net-DNS-0.65/lib/Net/DNS/Resolver/Win32.pm 2009-01-26 18:31:42.000000000 +0100
@@ -1,6 +1,6 @@
package Net::DNS::Resolver::Win32;
#
-# $Id: Win32.pm 756 2008-12-22 21:32:51Z olaf $
+# $Id: Win32.pm 795 2009-01-26 17:28:44Z olaf $
#
use strict;
@@ -9,14 +9,14 @@
use Net::DNS::Resolver::Base ();
@ISA = qw(Net::DNS::Resolver::Base);
-$VERSION = (qw$LastChangedRevision: 756 $)[1];
+$VERSION = (qw$LastChangedRevision: 795 $)[1];
use Win32::IPHelper;
use Win32::Registry;
use Data::Dumper;
sub init {
- my $debug=1;
+ my $debug=0;
my ($class) = @_;
my $defaults = $class->defaults;
@@ -61,7 +61,7 @@
my ($resobj, %keys);
- my $root = 'SYSTEM\CurrentControlSet\Services\Tcplp\Parameters';
+ my $root = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters';
my $opened_registry =1;
unless ($main::HKEY_LOCAL_MACHINE->Open($root, $resobj)) {
# Didn't work, maybe we are on 95/98/Me?
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/lib/Net/DNS/RR/AAAA.pm new/Net-DNS-0.65/lib/Net/DNS/RR/AAAA.pm
--- old/Net-DNS-0.64/lib/Net/DNS/RR/AAAA.pm 2008-12-30 18:26:47.000000000 +0100
+++ new/Net-DNS-0.65/lib/Net/DNS/RR/AAAA.pm 2009-01-26 18:31:42.000000000 +0100
@@ -1,6 +1,6 @@
package Net::DNS::RR::AAAA;
#
-# $Id: AAAA.pm 388 2005-06-22 10:06:05Z olaf $
+# $Id: AAAA.pm 795 2009-01-26 17:28:44Z olaf $
#
use strict;
BEGIN {
@@ -10,7 +10,7 @@
use vars qw(@ISA $VERSION);
@ISA = qw(Net::DNS::RR);
-$VERSION = (qw$LastChangedRevision: 388 $)[1];
+$VERSION = (qw$LastChangedRevision: 795 $)[1];
sub new {
my ($class, $self, $data, $offset) = @_;
@@ -24,24 +24,52 @@
sub new_from_string {
my ($class, $self, $string) = @_;
+ $self->{"address"}=$string;
+ bless $self, $class;
+ return $self->_normalize_AAAA();
+}
+
+sub rdatastr {
+ my $self = shift;
+
+ return $self->{"address"} || '';
+}
+
+sub rr_rdata {
+ my $self = shift;
+ my $rdata = "";
+ $self->_normalize_AAAA();
+ if (exists $self->{"address"}) {
+ my @addr = split(/:/, $self->{"address"});
+ $rdata .= pack("n8", map { hex $_ } @addr);
+ }
+ return $rdata;
+}
+
+
+
+
+sub _normalize_AAAA {
+ my $self=shift();
+ return $self->{"address"} if $self->{normalized};
+
+ my $string=$self->{"address"};
if ($string) {
my @addr;
-
+ # IPv4 mapped
# I think this is correct, per RFC 1884 Sections 2.2 & 2.4.4.
if ($string =~ /^(.*):(\d+)\.(\d+)\.(\d+)\.(\d+)$/) {
my ($front, $a, $b, $c, $d) = ($1, $2, $3, $4, $5);
$string = $front . sprintf(":%x:%x",
($a << 8 | $b),
($c << 8 | $d));
- }
-
- if ($string =~ /^(.*)::(.*)$/) {
+ }elsif($string =~ /^(.*)::(.*)$/) {
my ($front, $back) = ($1, $2);
my @front = split(/:/, $front);
my @back = split(/:/, $back);
my $fill = 8 - (@front ? $#front + 1 : 0)
- - (@back ? $#back + 1 : 0);
+ - (@back ? $#back + 1 : 0);
my @middle = (0) x $fill;
@addr = (@front, @middle, @back);
}
@@ -51,30 +79,16 @@
@addr = ((0) x (8 - @addr), @addr);
}
}
-
+
$self->{"address"} = sprintf("%x:%x:%x:%x:%x:%x:%x:%x",
map { hex $_ } @addr);
}
-
- return bless $self, $class;
-}
-
-sub rdatastr {
- my $self = shift;
-
- return $self->{"address"} || '';
-}
-
-sub rr_rdata {
- my $self = shift;
- my $rdata = "";
-
- if (exists $self->{"address"}) {
- my @addr = split(/:/, $self->{"address"});
- $rdata .= pack("n8", map { hex $_ } @addr);
- }
-
- return $rdata;
+ $self->{"normalized"}=1;
+ return $self;
+
+
+
+
}
1;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/lib/Net/DNS.pm new/Net-DNS-0.65/lib/Net/DNS.pm
--- old/Net-DNS-0.64/lib/Net/DNS.pm 2008-12-30 18:26:47.000000000 +0100
+++ new/Net-DNS-0.65/lib/Net/DNS.pm 2009-01-26 18:31:42.000000000 +0100
@@ -1,7 +1,7 @@
package Net::DNS;
#
-# $Id: DNS.pm 762 2008-12-24 09:30:57Z olaf $
+# $Id: DNS.pm 796 2009-01-26 17:30:18Z olaf $
#
use strict;
@@ -48,8 +48,8 @@
- $VERSION = '0.64';
- $SVNVERSION = (qw$LastChangedRevision: 762 $)[1];
+ $VERSION = '0.65';
+ $SVNVERSION = (qw$LastChangedRevision: 796 $)[1];
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/MANIFEST new/Net-DNS-0.65/MANIFEST
--- old/Net-DNS-0.64/MANIFEST 2008-12-30 18:26:47.000000000 +0100
+++ new/Net-DNS-0.65/MANIFEST 2009-01-26 18:31:43.000000000 +0100
@@ -93,6 +93,7 @@
t/05-rr-txt.t
t/05-rr-unknown.t
t/05-rr.t
+t/05-rr-various.t
t/06-update.t
t/07-misc.t
t/08-online.t
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/META.yml new/Net-DNS-0.65/META.yml
--- old/Net-DNS-0.64/META.yml 2008-12-30 18:28:55.000000000 +0100
+++ new/Net-DNS-0.65/META.yml 2009-01-26 18:31:59.000000000 +0100
@@ -1,16 +1,25 @@
-# http://module-build.sourceforge.net/META-spec.html
-#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
-name: Net-DNS
-version: 0.64
-version_from: lib/Net/DNS.pm
-installdirs: site
+--- #YAML:1.0
+name: Net-DNS
+version: 0.65
+abstract: Perl DNS resolver module
+author:
+ - Olaf Kolkman <olaf(a)net-dns.org>
+license: unknown
+distribution_type: module
+configure_requires:
+ ExtUtils::MakeMaker: 0
requires:
- Digest::HMAC_MD5: 1
- Digest::MD5: 2.12
- IO::Socket: 0
- MIME::Base64: 2.11
- Net::IP: 1.2
- Test::More: 0.18
-
-distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.30
+ Digest::HMAC_MD5: 1
+ Digest::MD5: 2.12
+ IO::Socket: 0
+ MIME::Base64: 2.11
+ Net::IP: 1.2
+ Test::More: 0.18
+no_index:
+ directory:
+ - t
+ - inc
+generated_by: ExtUtils::MakeMaker version 6.48
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/t/05-rr-various.t new/Net-DNS-0.65/t/05-rr-various.t
--- old/Net-DNS-0.64/t/05-rr-various.t 1970-01-01 01:00:00.000000000 +0100
+++ new/Net-DNS-0.65/t/05-rr-various.t 2009-01-26 18:31:42.000000000 +0100
@@ -0,0 +1,40 @@
+# $Id: 05-rr-various.t 795 2009-01-26 17:28:44Z olaf $ -*-perl-*-
+# Contains a number of additional test for RR related functionality
+
+
+use Test::More;
+use strict;
+use Net::DNS;
+use vars qw( $HAS_DNSSEC $HAS_DLV $HAS_NSEC3 $HAS_NSEC3PARAM);
+
+
+plan tests => 4;
+
+
+is ( Net::DNS::stripdot ('foo\\\\\..'),'foo\\\\\.', "Stripdot does its magic in precense of escapes test 1");
+is ( Net::DNS::stripdot ('foo\\\\\.'),'foo\\\\\.', "Stripdot does its magic in precense of escapes test 2");
+
+
+
+# rt.cpan.org 41071
+my $pkt1 = Net::DNS::Packet->new('e3.example.com','AAAA','IN');
+$pkt1->push( answer => Net::DNS::RR->new(
+name => 'e3.example.com',
+type => 'AAAA',
+address => 'CAFE:BABE::1'
+));
+my $pkt2 = Net::DNS::Packet->new( \$pkt1->data );
+is(($pkt1->answer)[0]->string,($pkt2->answer)[0]->string,"New from string and new from hash creation ");
+
+is(($pkt1->answer)[0]->address,"cafe:babe:0:0:0:0:0:1","Lets have cafe:babe:0:0:0:0:0:1");
+
+
+
+
+#--------------
+#
+# Some test that test on appropriate normalization of internal storage
+# when using new_from_hash
+
+
+
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/t/09-tkey.t new/Net-DNS-0.65/t/09-tkey.t
--- old/Net-DNS-0.64/t/09-tkey.t 2008-12-30 18:26:46.000000000 +0100
+++ new/Net-DNS-0.65/t/09-tkey.t 2009-01-26 18:31:42.000000000 +0100
@@ -1,4 +1,4 @@
-# $Id: 09-tkey.t 616 2006-10-18 09:15:48Z olaf $ -*-perl-*-
+# $Id: 09-tkey.t 795 2009-01-26 17:28:44Z olaf $ -*-perl-*-
use Test::More tests => 7;
use strict;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/Net-DNS-0.64/t/99-cleanup.t new/Net-DNS-0.65/t/99-cleanup.t
--- old/Net-DNS-0.64/t/99-cleanup.t 2008-12-30 18:26:46.000000000 +0100
+++ new/Net-DNS-0.65/t/99-cleanup.t 2009-01-26 18:31:42.000000000 +0100
@@ -1,4 +1,4 @@
-# $Id: 99-cleanup.t 745 2008-12-18 22:42:46Z olaf $ -*-perl-*-
+# $Id: 99-cleanup.t 795 2009-01-26 17:28:44Z olaf $ -*-perl-*-
use Test::More;
plan tests => 1;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-libwww-perl for openSUSE:Factory
checked in at Mon Feb 23 23:58:02 CET 2009.
--------
--- perl-libwww-perl/perl-libwww-perl.changes 2009-01-20 16:53:42.000000000 +0100
+++ perl-libwww-perl/perl-libwww-perl.changes 2009-02-23 16:19:58.000000000 +0100
@@ -1,0 +2,17 @@
+Mon Feb 23 16:18:38 CET 2009 - anicka(a)suse.cz
+
+- update to 5.825
+ * Fixup test failure with perl-5.8.8 and older; qr/$/m doesn't work
+ * Make format_request() ensure that it returns bytes [RT#42396]
+ * Force bytes in all the format_* methods.
+ * Ignore Sitemap: lines in robots.txt [RT#42420]
+ * Refactor; use variable to hold the test port
+ * Add redirects method to HTTP::Message
+ * Setting $ua->max_redirect(0) didn't work [RT#40260]
+ * Convert files to UTF-8
+ * HTTP::Cookies destructor should not clobber $! and other globals.
+ * Deal with the Encode module distributed with perl-5.8.0
+ * Avoid failure if 127.0.0.1:8333 is in use [RT#42866]
+ * Documentation improvements, spelling fixes.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
libwww-perl-5.823.tar.bz2
New:
----
libwww-perl-5.825.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-libwww-perl.spec ++++++
--- /var/tmp/diff_new_pack.F31552/_old 2009-02-23 23:51:04.000000000 +0100
+++ /var/tmp/diff_new_pack.F31552/_new 2009-02-23 23:51:04.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package perl-libwww-perl (Version 5.823)
+# spec file for package perl-libwww-perl (Version 5.825)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -20,7 +20,7 @@
Name: perl-libwww-perl
BuildRequires: perl-Compress-Zlib perl-HTML-Parser perl-URI
-Version: 5.823
+Version: 5.825
Release: 1
Provides: libwww-perl
Provides: perl_lw3
@@ -63,7 +63,6 @@
make test
%install
-rm -rf $RPM_BUILD_ROOT
%perl_make_install
%perl_process_packlist
@@ -89,6 +88,20 @@
/var/adm/perl-modules/%{name}
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 5.825
+ * Fixup test failure with perl-5.8.8 and older; qr/$/m doesn't work
+ * Make format_request() ensure that it returns bytes [RT#42396]
+ * Force bytes in all the format_* methods.
+ * Ignore Sitemap: lines in robots.txt [RT#42420]
+ * Refactor; use variable to hold the test port
+ * Add redirects method to HTTP::Message
+ * Setting $ua->max_redirect(0) didn't work [RT#40260]
+ * Convert files to UTF-8
+ * HTTP::Cookies destructor should not clobber $! and other globals.
+ * Deal with the Encode module distributed with perl-5.8.0
+ * Avoid failure if 127.0.0.1:8333 is in use [RT#42866]
+ * Documentation improvements, spelling fixes.
* Tue Jan 20 2009 anicka(a)suse.cz
- update to 5.823
* Bring back the LWP::Debug code
++++++ libwww-perl-5.823.tar.bz2 -> libwww-perl-5.825.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/AUTHORS new/libwww-perl-5.825/AUTHORS
--- old/libwww-perl-5.823/AUTHORS 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/AUTHORS 2009-02-11 23:36:42.000000000 +0100
@@ -2,8 +2,8 @@
Albert Dvornik <bert(a)genscan.com>
Alexandre Duret-Lutz <duret_g(a)lrde.epita.fr>
Andreas Gustafsson <gson(a)araneus.fi>
-Andreas K�nig <andreas.koenig(a)anima.de>
-Andreas K�nig <koenig(a)mind.de>
+Andreas König <andreas.koenig(a)anima.de>
+Andreas König <koenig(a)mind.de>
Andrew Pimlott <andrew(a)pimlott.net>
Andy Lester <andy(a)petdance.com>
Ben Coleman <bcoleman(a)mindspring.com>
@@ -73,7 +73,7 @@
Mark D. Anderson <mda(a)discerning.com>
Marko Asplund <aspa(a)hip.fi>
Mark Stosberg <markstos(a)cpan.org>
-Markus B Kr�ger <markusk(a)pvv.org>
+Markus B Krüger <markusk(a)pvv.org>
Markus Laker <mlaker(a)contax.co.uk>
Martijn Koster <m.koster(a)nexor.co.uk>
Martin Thurn <mthurn(a)northropgrumman.com>
@@ -113,7 +113,7 @@
Tim Bunce
Tom Hughes <thh(a)cyberscience.com>
Tony Finch <fanf(a)demon.net>
-Ville Skytt� <ville.skytta(a)iki.fi>
+Ville Skyttä <ville.skytta(a)iki.fi>
Ward Vandewege <ward(a)pong.be>
William York <william(a)mathworks.com>
Yale Huang <yale(a)sdf-eu.org>
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/bin/lwp-request new/libwww-perl-5.825/bin/lwp-request
--- old/libwww-perl-5.823/bin/lwp-request 2008-12-05 20:08:38.000000000 +0100
+++ new/libwww-perl-5.825/bin/lwp-request 2009-02-13 14:56:52.000000000 +0100
@@ -180,7 +180,7 @@
$progname =~ s,.*[\\/],,; # use basename only
$progname =~ s/\.\w*$//; # strip extension, if any
-$VERSION = "5.822";
+$VERSION = "5.824";
require LWP;
@@ -421,7 +421,11 @@
}
if ($options{'S'}) {
- printResponseChain($response);
+ for my $r ($response->redirects, $response) {
+ my $method = $r->request->method;
+ my $url = $r->request->url->as_string;
+ print "$method $url --> ", $r->status_line, "\n";
+ }
}
elsif ($options{'s'}) {
print $response->status_line, "\n";
@@ -496,18 +500,6 @@
exit $errors;
-sub printResponseChain
-{
- my($response) = @_;
- return unless defined $response;
- printResponseChain($response->previous);
- my $method = $response->request->method;
- my $url = $response->request->url->as_string;
- my $code = $response->code;
- print "$method $url --> ", $response->status_line, "\n";
-}
-
-
sub usage
{
die <<"EOT";
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/Changes new/libwww-perl-5.825/Changes
--- old/libwww-perl-5.823/Changes 2009-01-12 17:41:08.000000000 +0100
+++ new/libwww-perl-5.825/Changes 2009-02-16 10:55:29.000000000 +0100
@@ -1,4 +1,36 @@
_______________________________________________________________________________
+2009-02-16 Release 5.825
+
+Zefram (1):
+ Fixup test failure with perl-5.8.8 and older; qr/$/m doesn't work
+
+
+
+_______________________________________________________________________________
+2009-02-13 Release 5.824
+
+Gisle Aas (7):
+ Make format_request() ensure that it returns bytes [RT#42396]
+ Force bytes in all the format_* methods.
+ Ignore Sitemap: lines in robots.txt [RT#42420]
+ Refactor; use variable to hold the test port
+ Add redirects method to HTTP::Message
+ Setting $ua->max_redirect(0) didn't work [RT#40260]
+ Convert files to UTF-8
+
+Zefram (2):
+ HTTP::Cookies destructor should not clobber $! and other globals.
+ Deal with the Encode module distributed with perl-5.8.0
+
+Ian Kilgore (1):
+ Avoid failure if 127.0.0.1:8333 is in use [RT#42866]
+
+Ville Skyttä (1):
+ Documentation improvements, spelling fixes.
+
+
+
+_______________________________________________________________________________
2008-12-05 Release 5.823
Gisle Aas (4):
@@ -451,7 +483,7 @@
HTTP::Header::Auth needs HTTP::Headers to be loaded before
it replace its functions.
- LWP::Protocol::nntp improvements by Ville Skytt� <ville.skytta(a)iki.fi>:
+ LWP::Protocol::nntp improvements by Ville Skyttä <ville.skytta(a)iki.fi>:
- Support the nntp: scheme.
- Support hostname in news: and nntp: URIs.
- Close connection and preserve headers also in non-OK responses.
@@ -574,7 +606,7 @@
patch by Bill Moseley.
WWW::RobotRules: Don't empty cache when agent() is called if the
- agent name does not change. Patch by Ville Skytt� <ville.skytta(a)iki.fi>.
+ agent name does not change. Patch by Ville Skyttä <ville.skytta(a)iki.fi>.
@@ -620,7 +652,7 @@
are automatically added to requests as they are sent. This
can for instance be used to initialize various Accept headers.
- Various typo fixes by Ville Skytt� <ville.skytta(a)iki.fi>.
+ Various typo fixes by Ville Skyttä <ville.skytta(a)iki.fi>.
Fixed test failure under perl-5.005.
@@ -643,12 +675,12 @@
RFC 2616 says that http: referer should not be sent with
https: requests. The lwp-rget program, the $req->referer method
and the redirect handling code now try to enforce this.
- Patch by Ville Skytt� <ville.skytta(a)iki.fi>.
+ Patch by Ville Skyttä <ville.skytta(a)iki.fi>.
WWW::RobotRules now look for the string found in
robots.txt as a case insensitive substring from its own
User-Agent string, not the other way around.
- Patch by Ville Skytt� <ville.skytta(a)iki.fi>.
+ Patch by Ville Skyttä <ville.skytta(a)iki.fi>.
HTTP::Headers: New method 'header_field_names' that
return a list of names as suggested by its name.
@@ -670,7 +702,7 @@
few bugs discovered during testing.
Typo fixes to the documentation all over the place
- by Ville Skytt� <ville.skytta(a)iki.fi>.
+ by Ville Skyttä <ville.skytta(a)iki.fi>.
Updated tests.
@@ -707,7 +739,7 @@
Patch by Ward Vandewege <ward(a)pong.be>.
LWP::UserAgent passed the wrong request to redirect_ok().
- Patch by Ville Skytt� <ville.skytta(a)iki.fi>.
+ Patch by Ville Skyttä <ville.skytta(a)iki.fi>.
https://rt.cpan.org/Ticket/Display.html?id=5828
LWP did not handle URLs like http://www.example.com?foo=bar
@@ -918,10 +950,10 @@
File::Listing::apache by Slaven Rezic <slaven(a)rezic.de>
HEAD requests now work properly for ftp: URLs.
- Patch by Ville Skytt� <ville.skytta(a)iki.fi>.
+ Patch by Ville Skyttä <ville.skytta(a)iki.fi>.
LWP::UserAgent: The protocols_allowed() and protocols_forbidden()
- methods are now case insensitive. Patch by Ville Skytt�
+ methods are now case insensitive. Patch by Ville Skyttä
<ville.skytta(a)iki.fi>.
Avoid warning from HTTP::Date on certain invalid dates.
@@ -1588,7 +1620,7 @@
Added cookie example to lwpcook.pod
HTTP::Date::str2time returns undef on failure instead
- of an empty list as suggested by Markus B Kr�ger <markusk(a)pvv.org>
+ of an empty list as suggested by Markus B Krüger <markusk(a)pvv.org>
$request->uri($uri) will now always store a copy of the $uri.
@@ -2440,7 +2472,7 @@
o t/robot/rules-dbm.t clean up better and will use AnyDBM for dumping
- o File::CounterFile: $/ strikes again by Andreas K�nig
+ o File::CounterFile: $/ strikes again by Andreas König
o File::Listing updates from William York <william(a)mathworks.com>. We
can now parse the MS-Windows ftp server listings.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/HTTP/Cookies.pm new/libwww-perl-5.825/lib/HTTP/Cookies.pm
--- old/libwww-perl-5.823/lib/HTTP/Cookies.pm 2008-12-05 20:08:53.000000000 +0100
+++ new/libwww-perl-5.825/lib/HTTP/Cookies.pm 2009-02-13 14:56:48.000000000 +0100
@@ -5,7 +5,7 @@
use HTTP::Headers::Util qw(_split_header_words join_header_words);
use vars qw($VERSION $EPOCH_OFFSET);
-$VERSION = "5.822";
+$VERSION = "5.824";
# Legacy: because "use "HTTP::Cookies" used be the ONLY way
# to load the class HTTP::Cookies::Netscape.
@@ -491,6 +491,7 @@
sub DESTROY
{
my $self = shift;
+ local($., $@, $!, $^E, $?);
$self->save if $self->{'autosave'};
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/HTTP/Message.pm new/libwww-perl-5.825/lib/HTTP/Message.pm
--- old/libwww-perl-5.823/lib/HTTP/Message.pm 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/lib/HTTP/Message.pm 2009-02-13 14:57:11.000000000 +0100
@@ -2,7 +2,7 @@
use strict;
use vars qw($VERSION $AUTOLOAD);
-$VERSION = "5.821";
+$VERSION = "5.824";
require HTTP::Headers;
require Carp;
@@ -305,6 +305,7 @@
}
$content_ref = \Encode::decode($charset, $$content_ref,
($opt{charset_strict} ? Encode::FB_CROAK() : 0) | Encode::LEAVE_SRC());
+ die "Encode::decode() returned undef improperly" unless defined $$content_ref;
}
}
};
@@ -322,7 +323,7 @@
# should match the Content-Encoding values that decoded_content can deal with
my $self = shift;
my @enc;
- # XXX preferably we should deterine if the modules are available without loading
+ # XXX preferably we should determine if the modules are available without loading
# them here
eval {
require Compress::Zlib;
@@ -332,7 +333,8 @@
require Compress::Bzip2;
push(@enc, "x-bzip2");
};
- # we don't care about announcing the 'base64' and 'quoted-printable' stuff
+ # we don't care about announcing the 'identity', 'base64' and
+ # 'quoted-printable' stuff
return wantarray ? @enc : join(", ", @enc);
}
@@ -362,7 +364,7 @@
my $content = $self->content;
for my $encoding (@enc) {
if ($encoding eq "identity") {
- # noting to do
+ # nothing to do
}
elsif ($encoding eq "base64") {
require MIME::Base64;
@@ -789,9 +791,9 @@
=back
-=item $mess->decodeable
+=item $mess->decodable
-=item HTTP::Message::decodeable()
+=item HTTP::Message::decodable()
This returns the encoding identifiers that decoded_content() can
process. In scalar context returns a comma separated string of
@@ -803,7 +805,7 @@
=item $mess->decode
This method tries to replace the content of the message with the
-decoded version and removes the C<Content-Encoding> header. Return
+decoded version and removes the C<Content-Encoding> header. Returns
TRUE if successful and FALSE if not.
If the message does not have a C<Content-Encoding> header this method
@@ -816,8 +818,9 @@
=item $mess->encode( $encoding, ... )
Apply the given encodings to the content of the message. Returns TRUE
-if successful. Currently supported encodings are "gzip", "deflate",
-"x-bzip2" and "base64".
+if successful. The "identity" (non-)encoding is always supported; other
+currently supported encodings, subject to availability of required
+additional modules, are "gzip", "deflate", "x-bzip2" and "base64".
A successful call to this function will set the C<Content-Encoding>
header.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/HTTP/Request/Common.pm new/libwww-perl-5.825/lib/HTTP/Request/Common.pm
--- old/libwww-perl-5.823/lib/HTTP/Request/Common.pm 2008-12-05 20:12:05.000000000 +0100
+++ new/libwww-perl-5.825/lib/HTTP/Request/Common.pm 2009-02-13 14:57:52.000000000 +0100
@@ -13,7 +13,7 @@
require HTTP::Request;
use Carp();
-$VERSION = "5.822";
+$VERSION = "5.824";
my $CRLF = "\015\012"; # "\r\n" is not portable
@@ -367,7 +367,7 @@
=item DELETE $url, Header => Value,...
-Like GET() but the method in the request is "DELETE". This funciton
+Like GET() but the method in the request is "DELETE". This function
is not exported by default.
=item POST $url
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/HTTP/Response.pm new/libwww-perl-5.825/lib/HTTP/Response.pm
--- old/libwww-perl-5.823/lib/HTTP/Response.pm 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/lib/HTTP/Response.pm 2009-02-13 14:59:30.000000000 +0100
@@ -2,7 +2,7 @@
require HTTP::Message;
@ISA = qw(HTTP::Message);
-$VERSION = "5.820";
+$VERSION = "5.824";
use strict;
use HTTP::Status ();
@@ -96,6 +96,19 @@
}
+sub redirects {
+ my $self = shift;
+ my @r;
+ my $r = $self;
+ while (my $p = $r->previous) {
+ push(@r, $p);
+ $r = $p;
+ }
+ return @r unless wantarray;
+ return reverse @r;
+}
+
+
sub filename
{
my $self = shift;
@@ -432,6 +445,9 @@
chains of responses if the first response is redirect or unauthorized.
The value is C<undef> if this is the first response in a chain.
+Note that the method $r->redirects is provided as a more convenient
+way to access the response chain.
+
=item $r->status_line
Returns the string "E<lt>code> E<lt>message>". If the message attribute
@@ -534,6 +550,14 @@
error occurred. This method should only be called when $r->is_error
is TRUE.
+=item $r->redirects
+
+Returns the list of redirect responses that lead up to this response
+by following the $r->previous chain. The list order is oldest first.
+
+In scalar context return the number of redirect responses leading up
+to this one.
+
=item $r->current_age
Calculates the "current age" of the response as specified by RFC 2616
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/LWP/UserAgent.pm new/libwww-perl-5.825/lib/LWP/UserAgent.pm
--- old/libwww-perl-5.823/lib/LWP/UserAgent.pm 2009-01-12 17:41:58.000000000 +0100
+++ new/libwww-perl-5.825/lib/LWP/UserAgent.pm 2009-02-13 15:06:39.000000000 +0100
@@ -5,7 +5,7 @@
require LWP::MemberMixin;
@ISA = qw(LWP::MemberMixin);
-$VERSION = "5.823";
+$VERSION = "5.824";
use HTTP::Request ();
use HTTP::Response ();
@@ -261,21 +261,12 @@
my($self, $request, $arg, $size, $previous) = @_;
my $response = $self->simple_request($request, $arg, $size);
+ $response->previous($previous) if $previous;
- if ($previous) {
- $response->previous($previous);
-
- # Check for loop in the redirects, we only count
- my $count = 0;
- my $r = $response;
- while ($r) {
- if (++$count > $self->{max_redirect}) {
- $response->header("Client-Warning" =>
- "Redirect loop detected (max_redirect = $self->{max_redirect})");
- return $response;
- }
- $r = $r->previous;
- }
+ if ($response->redirects >= $self->{max_redirect}) {
+ $response->header("Client-Warning" =>
+ "Redirect loop detected (max_redirect = $self->{max_redirect})");
+ return $response;
}
if (my $req = $self->run_handlers("response_redirect", $response)) {
@@ -1664,7 +1655,7 @@
=head1 COPYRIGHT
-Copyright 1995-2008 Gisle Aas.
+Copyright 1995-2009 Gisle Aas.
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/LWP.pm new/libwww-perl-5.825/lib/LWP.pm
--- old/libwww-perl-5.823/lib/LWP.pm 2009-01-12 17:39:58.000000000 +0100
+++ new/libwww-perl-5.825/lib/LWP.pm 2009-02-16 10:53:11.000000000 +0100
@@ -1,6 +1,6 @@
package LWP;
-$VERSION = "5.823";
+$VERSION = "5.825";
sub Version { $VERSION; }
require 5.005;
@@ -599,7 +599,7 @@
=head1 AUTHORS
LWP was made possible by contributions from Adam Newby, Albert
-Dvornik, Alexandre Duret-Lutz, Andreas Gustafsson, Andreas K�nig,
+Dvornik, Alexandre Duret-Lutz, Andreas Gustafsson, Andreas König,
Andrew Pimlott, Andy Lester, Ben Coleman, Benjamin Low, Ben Low, Ben
Tilly, Blair Zajac, Bob Dalgleish, BooK, Brad Hughes, Brian
J. Murrell, Brian McCauley, Charles C. Fu, Charles Lane, Chris Nandor,
@@ -613,7 +613,7 @@
Chamas, Joshua Hoblitt, Kartik Subbarao, Keiichiro Nagano, Ken
Williams, KONISHI Katsuhiro, Lee T Lindley, Liam Quinn, Marc Hedlund,
Marc Langheinrich, Mark D. Anderson, Marko Asplund, Mark Stosberg,
-Markus B Kr�ger, Markus Laker, Martijn Koster, Martin Thurn, Matthew
+Markus B Krüger, Markus Laker, Martijn Koster, Martin Thurn, Matthew
Eldridge, Matthew.van.Eerde, Matt Sergeant, Michael A. Chase, Michael
Quaranta, Michael Thompson, Mike Schilli, Moshe Kaminsky, Nathan
Torkington, Nicolai Langfeldt, Norton Allen, Olly Betts, Paul
@@ -622,7 +622,7 @@
Robin Barker, Roy Fielding, Sander van Zoest, Sean M. Burke,
shildreth, Slaven Rezic, Steve A Fink, Steve Hay, Steven Butler,
Steve_Kilbane, Takanori Ugai, Thomas Lotterer, Tim Bunce, Tom Hughes,
-Tony Finch, Ville Skytt�, Ward Vandewege, William York, Yale Huang,
+Tony Finch, Ville Skyttä, Ward Vandewege, William York, Yale Huang,
and Yitzchak Scott-Thoennes.
LWP owes a lot in motivation, design, and code, to the libwww-perl
@@ -635,7 +635,7 @@
=head1 COPYRIGHT
- Copyright 1995-2008, Gisle Aas
+ Copyright 1995-2009, Gisle Aas
Copyright 1995, Martijn Koster
This library is free software; you can redistribute it and/or
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/Net/HTTP/Methods.pm new/libwww-perl-5.825/lib/Net/HTTP/Methods.pm
--- old/libwww-perl-5.823/lib/Net/HTTP/Methods.pm 2008-10-20 12:20:08.000000000 +0200
+++ new/libwww-perl-5.825/lib/Net/HTTP/Methods.pm 2009-02-13 14:58:35.000000000 +0100
@@ -5,10 +5,24 @@
use strict;
use vars qw($VERSION);
-$VERSION = "5.815";
+$VERSION = "5.824";
my $CRLF = "\015\012"; # "\r\n" is not portable
+*_bytes = defined(&utf8::downgrade) ?
+ sub {
+ unless (utf8::downgrade($_[0], 1)) {
+ require Carp;
+ Carp::croak("Wide character in HTTP request (bytes required)");
+ }
+ return $_[0];
+ }
+ :
+ sub {
+ return $_[0];
+ };
+
+
sub new {
my $class = shift;
unshift(@_, "Host") if @_ == 1;
@@ -173,7 +187,7 @@
push(@h2, "Host: $h") if $h;
}
- return join($CRLF, "$method $uri HTTP/$ver", @h2, @h, "", $content);
+ return _bytes(join($CRLF, "$method $uri HTTP/$ver", @h2, @h, "", $content));
}
@@ -185,13 +199,13 @@
sub format_chunk {
my $self = shift;
return $_[0] unless defined($_[0]) && length($_[0]);
- return sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF;
+ return _bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF);
}
sub write_chunk {
my $self = shift;
return 1 unless defined($_[0]) && length($_[0]);
- $self->print(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF);
+ $self->print(_bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF));
}
sub format_chunk_eof {
@@ -200,7 +214,7 @@
while (@_) {
push(@h, sprintf "%s: %s$CRLF", splice(@_, 0, 2));
}
- return join("", "0$CRLF", @h, $CRLF);
+ return _bytes(join("", "0$CRLF", @h, $CRLF));
}
sub write_chunk_eof {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lib/WWW/RobotRules.pm new/libwww-perl-5.825/lib/WWW/RobotRules.pm
--- old/libwww-perl-5.823/lib/WWW/RobotRules.pm 2008-12-05 20:13:16.000000000 +0100
+++ new/libwww-perl-5.825/lib/WWW/RobotRules.pm 2009-02-13 14:58:55.000000000 +0100
@@ -1,6 +1,6 @@
package WWW::RobotRules;
-$VERSION = "5.822";
+$VERSION = "5.824";
sub Version { $VERSION; }
use strict;
@@ -105,6 +105,9 @@
push(@anon_disallowed, $disallow);
}
}
+ elsif (/^\s*Sitemap\s*:/i) {
+ # ignore
+ }
else {
warn "RobotRules <$robot_txt_uri>: Unexpected line: $_\n" if $^W;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lwpcook.pod new/libwww-perl-5.825/lwpcook.pod
--- old/libwww-perl-5.823/lwpcook.pod 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/lwpcook.pod 2009-01-19 09:43:05.000000000 +0100
@@ -244,7 +244,7 @@
perl -MLWP::Simple -e 'mirror("http://www.perl.com/", "perl.html")';
-The document will not be transfered unless it has been updated.
+The document will not be transferred unless it has been updated.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/lwptut.pod new/libwww-perl-5.825/lwptut.pod
--- old/libwww-perl-5.823/lwptut.pod 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/lwptut.pod 2009-01-19 09:43:05.000000000 +0100
@@ -49,7 +49,7 @@
% perl -MLWP::Simple -e "getprint 'http://cpan.org/RECENT'"
-That is the URL of a plaintext file that lists new files in CPAN in
+That is the URL of a plain text file that lists new files in CPAN in
the past two weeks. You can easily make it part of a tidy little
shell command, like this one that mails you the list of new
C<Acme::> modules:
@@ -155,8 +155,8 @@
=item *
And dozens of other convenient and more specific methods that are
-documented in the docs for L<HTML::Response>, and its superclasses
-L<HTML::Message> and L<HTML::Headers>.
+documented in the docs for L<HTTP::Response>, and its superclasses
+L<HTTP::Message> and L<HTTP::Headers>.
=back
@@ -309,7 +309,7 @@
die "$url error: ", $response->status_line
unless $response->is_success;
die "Weird content type at $url -- ", $response->content_type
- unless $response->content_type eq 'text/html';
+ unless $response->content_is_html;
if( $response->decoded_content =~ m{AltaVista found ([0-9,]+) results} ) {
# The substring will be like "AltaVista found 2,345 results"
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/Makefile.PL new/libwww-perl-5.825/Makefile.PL
--- old/libwww-perl-5.823/Makefile.PL 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/Makefile.PL 2009-02-13 14:42:11.000000000 +0100
@@ -59,6 +59,14 @@
},
clean => { FILES => join(" ", map "bin/$_", grep /^[A-Z]+$/, @prog) },
);
+
+if($] >= 5.008 && !(eval { require Encode; defined(Encode::decode("UTF-8", "\xff")) })) {
+ warn "\nYou lack a working Encode module, and so you will miss out on\n".
+ "lots of character set goodness from LWP. However, your perl is\n".
+ "sufficiently recent to support it. It is recommended that you\n".
+ "install the latest Encode from CPAN.\n\n";
+}
+
exit;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/MANIFEST new/libwww-perl-5.825/MANIFEST
--- old/libwww-perl-5.823/MANIFEST 2009-01-12 17:45:18.000000000 +0100
+++ new/libwww-perl-5.825/MANIFEST 2009-02-16 10:56:22.000000000 +0100
@@ -106,7 +106,6 @@
t/local/autoload.t Test autoloading of LWP::Protocol modules
t/local/chunked.t
t/local/get.t Try to get a local file
-t/local/http-get.t
t/local/http.t Test http to local server
t/local/protosub.t Test with other protocol module
t/net/cgi-bin/moved
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/META.yml new/libwww-perl-5.825/META.yml
--- old/libwww-perl-5.823/META.yml 2009-01-12 17:45:18.000000000 +0100
+++ new/libwww-perl-5.825/META.yml 2009-02-16 10:56:22.000000000 +0100
@@ -1,6 +1,6 @@
--- #YAML:1.0
name: libwww-perl
-version: 5.823
+version: 5.825
abstract: The World-Wide Web library for Perl
author:
- Gisle Aas <gisle(a)activestate.com>
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/README new/libwww-perl-5.825/README
--- old/libwww-perl-5.823/README 2008-09-24 11:41:59.000000000 +0200
+++ new/libwww-perl-5.825/README 2009-02-13 15:05:31.000000000 +0100
@@ -84,8 +84,8 @@
COPYRIGHT
- � 1995-2008 Gisle Aas. All rights reserved.
- � 1995 Martijn Koster. All rights reserved.
+ © 1995-2009 Gisle Aas. All rights reserved.
+ © 1995 Martijn Koster. All rights reserved.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/base/message.t new/libwww-perl-5.825/t/base/message.t
--- old/libwww-perl-5.823/t/base/message.t 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/t/base/message.t 2009-02-13 14:42:12.000000000 +0100
@@ -383,8 +383,10 @@
$m->remove_header("Content-Encoding");
$m->content("a\xFF");
-skip($NO_ENCODE, sub { $m->decoded_content }, "a\x{FFFD}");
-skip($NO_ENCODE, sub { $m->decoded_content(charset_strict => 1) }, undef);
+my $BAD_ENCODE = $NO_ENCODE || !(eval { require Encode; defined(Encode::decode("UTF-8", "\xff")) });
+
+skip($BAD_ENCODE, sub { $m->decoded_content }, "a\x{FFFD}");
+skip($BAD_ENCODE, sub { $m->decoded_content(charset_strict => 1) }, undef);
$m->header("Content-Encoding", "foobar");
ok($m->decoded_content, undef);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/base/response.t new/libwww-perl-5.825/t/base/response.t
--- old/libwww-perl-5.823/t/base/response.t 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/t/base/response.t 2009-02-11 11:09:35.000000000 +0100
@@ -5,7 +5,7 @@
use strict;
use Test;
-plan tests => 13;
+plan tests => 19;
use HTTP::Date;
use HTTP::Request;
@@ -81,3 +81,14 @@
ok($r->fresh_until); # should still return something
ok($r->fresh_until(heuristic_expiry => 0), undef);
+
+ok($r->redirects, 0);
+$r->previous($r2);
+ok($r->previous, $r2);
+ok($r->redirects, 1);
+
+$r2->previous($r->clone);
+ok($r->redirects, 2);
+for ($r->redirects) {
+ ok($_->is_success);
+}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/local/autoload.t new/libwww-perl-5.825/t/local/autoload.t
--- old/libwww-perl-5.823/t/local/autoload.t 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/t/local/autoload.t 2009-02-11 10:29:22.000000000 +0100
@@ -2,7 +2,8 @@
# See if autoloading of protocol schemes work
#
-print "1..1\n";
+use Test;
+plan tests => 1;
require LWP::UserAgent;
# note no LWP::Protocol::file;
@@ -18,11 +19,4 @@
my $request = HTTP::Request->new(GET => $url);
my $response = $ua->request($request);
-if ($response->is_success) {
- print "ok 1\n";
- print $response->as_string;
-}
-else {
- print "not ok 1\n";
- print $response->error_as_HTML;
-}
+ok($response->is_success);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/local/chunked.t new/libwww-perl-5.825/t/local/chunked.t
--- old/libwww-perl-5.823/t/local/chunked.t 2008-11-25 21:07:09.000000000 +0100
+++ new/libwww-perl-5.825/t/local/chunked.t 2009-01-29 13:49:25.000000000 +0100
@@ -93,11 +93,20 @@
$Config{useithreads} and $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/);
my $tests = @TESTS;
+my $tport = 8333;
+my $tsock = IO::Socket::INET->new(LocalAddr => '0.0.0.0',
+ LocalPort => $tport,
+ Listen => 1,
+ ReuseAddr => 1);
if (!$can_fork) {
plan skip_all => "This system cannot fork";
}
+elsif (!$tsock) {
+ plan skip_all => "Cannot listen on 0.0.0.0:$tport";
+}
else {
+ close $tsock;
plan tests => $tests;
}
@@ -120,13 +129,13 @@
my $raw = $test->{raw};
$raw =~ s/\r?\n/$CRLF/mg;
if (0) {
- open my $fh, "| socket localhost 8333" or die;
+ open my $fh, "| socket localhost $tport" or die;
print $fh $test;
}
use IO::Socket::INET;
my $sock = IO::Socket::INET->new(
PeerAddr => "127.0.0.1",
- PeerPort => 8333,
+ PeerPort => $tport,
) or die;
if (0) {
for my $pos (0..length($raw)-1) {
@@ -150,7 +159,7 @@
die "cannot fork: $!" unless defined $pid;
my $d = HTTP::Daemon->new(
LocalAddr => '0.0.0.0',
- LocalPort => 8333,
+ LocalPort => $tport,
ReuseAddr => 1,
) or die;
mywarn "Starting new daemon as '$$'";
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/local/http-get.t new/libwww-perl-5.825/t/local/http-get.t
--- old/libwww-perl-5.823/t/local/http-get.t 2008-09-24 13:19:36.000000000 +0200
+++ new/libwww-perl-5.825/t/local/http-get.t 1970-01-01 01:00:00.000000000 +0100
@@ -1,422 +0,0 @@
-if ($^O eq "MacOS") {
- print "1..0\n";
- exit(0);
-}
-
-unless (-f "CAN_TALK_TO_OURSELF") {
- print "1..0 # Skipped: Can't talk to ourself (misconfigured system)\n";
- exit;
-}
-
-# Hm, this should really use Test.pm, but not worth changing over, really.
-
-
-$| = 1; # autoflush
-
-require IO::Socket; # make sure this work before we try to make a HTTP::Daemon
-
-# First we make ourself a daemon in another process
-my $D = shift || '';
-if ($D eq 'daemon') {
-
- require HTTP::Daemon;
-
- my $d = HTTP::Daemon->new(Timeout => 10);
-
- print "Please to meet you at: <URL:", $d->url, ">\n";
- open(STDOUT, $^O eq 'VMS'? ">nl: " : ">/dev/null");
-
- while ($c = $d->accept) {
- $r = $c->get_request;
- if ($r) {
- my $p = ($r->url->path_segments)[1];
- my $func = lc("httpd_" . $r->method . "_$p");
- if (defined &$func) {
- &$func($c, $r);
- }
- else {
- $c->send_error(404);
- }
- }
- $c = undef; # close connection
- }
- print STDERR "HTTP Server terminated\n";
- exit;
-}
-else {
- use Config;
- my $perl = $Config{'perlpath'};
- $perl = $^X if $^O eq 'VMS' or -x $^X and $^X =~ m,^([a-z]:)?/,i;
- open(DAEMON, "$perl local/http-get.t daemon |") or die "Can't exec daemon: $!";
-}
-
-print "1..21\n";
-
-
-my $greeting = <DAEMON>;
-$greeting =~ /(<[^>]+>)/;
-
-require URI;
-my $base = URI->new($1);
-sub url {
- my $u = URI->new(@_);
- $u = $u->abs($_[1]) if @_ > 1;
- $u->as_string;
-}
-
-print "# Will access HTTP server at $base\n";
-
-require LWP::UserAgent;
-require HTTP::Request;
-$ua = new LWP::UserAgent;
-$ua->agent("Mozilla/0.01 " . $ua->agent);
-$ua->from('gisle(a)aas.no');
-$ua->cookie_jar({});
-
-#----------------------------------------------------------------
-print "#------------Testing: Bad request...\n";
-$res = $ua->get(
- url("/not_found", $base),
- 'X-Foo' => "Bar",
-);
-
-print "not " unless $res->is_error
- and $res->code == 404
- and $res->message =~ /not\s+found/i;
-print "ok 1\n";
-# we also expect a few headers
-print "not " if !$res->server and !$res->date;
-print "ok 2\n";
-
-#----------------------------------------------------------------
-print "#------------Testing: Simple echo...\n";
-sub httpd_get_echo
-{
- my($c, $req) = @_;
- $c->send_basic_header(200);
- print $c "Content-Type: text/plain\015\012";
- $c->send_crlf;
- print $c $req->as_string;
-}
-
-$res = $ua->get(
- url("/echo/path_info?query", $base),
- Accept => 'text/html',
- Accept => 'text/plain; q=0.9',
- Accept => 'image/*',
- Long_text => 'This is a very long header line
-which is broken between
-more than one line.',
- X_Foo => "Bar",
-
-);
-#print $res->as_string;
-
-print "not " unless $res->is_success
- and $res->code == 200 && $res->message eq "OK";
-print "ok 3\n";
-
-$_ = $res->content;
-@accept = /^Accept:\s*(.*)/mg;
-
-#print "$_\n";
-
-print "not " unless /^From:\s*gisle\@aas\.no$/m
- and /^Host:/m
- and @accept == 3
- and /^Accept:\s*text\/html/m
- and /^Accept:\s*text\/plain/m
- and /^Accept:\s*image\/\*/m
- and /^Long-Text:\s*This.*broken between/m
- and /^X-Foo:\s*Bar$/m
- and /^User-Agent:\s*Mozilla\/0.01/m;
-print "ok 4\n";
-
-#----------------------------------------------------------------
-print "#------------Testing: Send file...\n";
-
-my $file = "test-$$.html";
-sub _write_file {
- open(FILE, ">$file") or die "Can't create $file: $!";
- binmode FILE or die "Can't binmode $file: $!";
- print FILE <<EOT;
-<html><title>En pr�ve</title>
-<h1>Dette er en testfil</h1>
-Jeg vet ikke hvor stor fila beh�ver � v�re heller, men dette
-er sikkert nok i massevis.
-EOT
- close(FILE);
- print "# ", -s $file, " bytes written to $file\n";
- return;
-}
-
-sub httpd_get_file
-{
- my($c, $r) = @_;
- my %form = $r->url->query_form;
- my $file = $form{'name'};
- $c->send_file_response($file);
-}
-
-_write_file();
-
-$res = $ua->get( url("/file?name=$file", $base) );
-
-#print $res->as_string;
-
-print "not " unless $res->is_success
- and $res->content_type eq 'text/html'
- and $res->content_length == 147
- and $res->title eq 'En pr�ve'
- and $res->content =~ /� v�re/;
-print "ok 5\n";
-
-
-
-{
-
-my $content;
-
-$res = $ua->get( url("/file?name=$file", $base),
- ':content_cb' => sub { $content .= $_[0]; return; },
-);
-#print $res->as_string;
-
-print "not " unless $res->is_success
- and $res->content_type eq 'text/html'
- and $res->content_length == 147
- and defined $content
- and $res->title eq 'En pr�ve'
- and ! $res->content # No content, because callback
- and $content =~ /� v�re/;
-print "ok 6\n";
-
-}
-
-unlink($file);
-
-
-
-# Then try to list current directory
-$res = $ua->get( url("/file?name=.", $base) );
-#print $res->as_string;
-print "not " unless $res->code == 501; # NYI
-print "ok 7\n";
-
-
-#----------------------------------------------------------------
-print "#------------Testing: Check redirect...\n";
-sub httpd_get_redirect
-{
- my($c) = @_;
- $c->send_redirect("/echo/redirect");
-}
-
-$res = $ua->get( url("/redirect/foo", $base) );
-#print $res->as_string;
-
-print "not " unless $res->is_success
- and $res->content =~ m|/echo/redirect|;
-print "ok 8\n";
-print "not " unless $res->previous->is_redirect
- and $res->previous->code == 301;
-print "ok 9\n";
-
-# Let's test a redirect loop too
-sub httpd_get_redirect2 { shift->send_redirect("/redirect3/") }
-sub httpd_get_redirect3 { shift->send_redirect("/redirect2/") }
-
-$res = $ua->get(url("/redirect2", $base));
-#print $res->as_string;
-print "not " unless $res->is_redirect
- and $res->header("Client-Warning") =~ /loop detected/i;
-print "ok 10\n";
-$i = 0;
-while ($res->previous) {
- $i++;
- $res = $res->previous;
-}
-print "not " unless $i == 7;
-print "ok 11\n";
-
-sub httpd_get_redirect_file { shift->send_redirect("file:/etc/passwd") }
-$res = $ua->get(url("/redirect_file/", $base));
-#print $res->as_string;
-print "not " unless $res->is_redirect
- and $res->header("Client-Warning") =~ /can't redirect to a file:/i;
-print "ok 12\n";
-
-
-#----------------------------------------------------------------
-print "#------------Testing: Check basic authorization...\n";
-sub httpd_get_basic
-{
- my($c, $r) = @_;
- #print STDERR $r->as_string;
- my($u,$p) = $r->authorization_basic;
- if (defined($u) && $u eq 'ok 13' && $p eq 'xyzzy') {
- $c->send_basic_header(200);
- print $c "Content-Type: text/plain";
- $c->send_crlf;
- $c->send_crlf;
- $c->print("$u\n");
- }
- else {
- $c->send_basic_header(401);
- $c->print("WWW-Authenticate: Basic realm=\"libwww-perl\"\015\012");
- $c->send_crlf;
- }
-}
-
-{
- package MyUA; @ISA=qw(LWP::UserAgent);
- sub get_basic_credentials {
- my($self, $realm, $uri, $proxy) = @_;
- if ($realm eq "libwww-perl" && $uri->rel($base) eq "basic") {
- return ("ok 13", "xyzzy");
- }
- else {
- return undef;
- }
- }
-}
-
-{
-my $that_url = url("/basic", $base);
-
-$res = MyUA->new->get( $that_url );
-#print $res->as_string;
-
-my $host_port = $res->request->uri->host_port;
-
-print "not " unless $res->is_success;
-print $res->content;
-
-# Let's try with a $ua that does not pass out credentials
-$res = $ua->get( $that_url );
-print "not " unless $res->code == 401;
-print "ok 14\n";
-
-
-print "# Host port: $host_port\n";
-
-# Let's try to set credentials for this realm
-$ua->credentials($host_port, "libwww-perl", "ok 13", "xyzzy");
-
-$res = $ua->get( $that_url );
-
-print "not " unless $res->is_success;
-print "ok 15\n";
-
-# Then illegal credentials
-$ua->credentials($host_port, "libwww-perl", "user", "passwd");
-$res = $ua->get( $that_url );
-print "not " unless $res->code == 401;
-print "ok 16\n";
-}
-
-#----------------------------------------------------------------
-print "#------------Testing: Check proxy...\n";
-sub httpd_get_proxy
-{
- my($c,$r) = @_;
- if ($r->method eq "GET" and
- $r->url->scheme eq "ftp") {
- $c->send_basic_header(200);
- $c->send_crlf;
- }
- else {
- $c->send_error;
- }
-}
-
-$ua->proxy(ftp => $base);
-
-$res = $ua->get( "ftp://ftp.perl.com/proxy" );
-#print $res->as_string;
-print "not " unless $res->is_success;
-print "ok 17\n";
-
-#----------------------------------------------------------------
-print "#------------Testing: Check POSTing...\n";
-sub httpd_post_echo
-{
- my($c,$r) = @_;
- $c->send_basic_header;
- $c->print("Content-Type: text/plain");
- $c->send_crlf;
- $c->send_crlf;
- $c->print($r->as_string);
-}
-
-$res = $ua->post(
- url("/echo/foo", $base),
- ['foo' => 'bar', 'bar' => 'test'],
-);
-#print $res->as_string;
-
-$_ = $res->content;
-print "not " unless $res->is_success
- and /^Content-Length:\s*16$/mi
- and /^Content-Type:\s*application\/x-www-form-urlencoded$/mi
- and /^foo=bar&bar=test/m;
-print "ok 18\n";
-
-
-{
-
-my $content;
-
-$res = $ua->post(
- url("/echo/foo", $base),
- ['foo' => 'bar', 'bar' => 'test'],
- ':content_cb' => sub { $content .= $_[0]; return; },
-);
-
-$_ = $content;
-print "not " unless $res->is_success
- and /^Content-Length:\s*16$/mi
- and /^Content-Type:\s*application\/x-www-form-urlencoded$/mi
- and /^foo=bar&bar=test/m
- and ! $res->content
-;
-print "ok 19\n";
-
-}
-
-{
-
-my $content;
-
-$res = $ua->post(
- url("/echo/foo", $base),
- Content_Type => 'text/plain',
- Content => "Plain Text",
- ':content_cb' => sub { $content .= $_[0]; return; },
-);
-
-$_ = $content;
-print "not " unless $res->is_success
- and /^Content-Length:\s*10$/mi
- and /^Content-Type:\s*text\/plain$/mi
- and /^Plain Text$/m
- and ! $res->content
-;
-print "ok 20\n";
-
-}
-
-#----------------------------------------------------------------
-print "#------------Testing: Terminating server...\n";
-sub httpd_get_quit
-{
- my($c) = @_;
- $c->send_error(503, "Bye, bye");
- exit; # terminate HTTP server
-}
-
-$res = $ua->get( url("/quit", $base) );
-
-print "not " unless $res->code == 503 and $res->content =~ /Bye, bye/;
-print "ok 21\n";
-
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/local/http.t new/libwww-perl-5.825/t/local/http.t
--- old/libwww-perl-5.823/t/local/http.t 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/t/local/http.t 2009-02-16 09:06:54.000000000 +0100
@@ -47,8 +47,8 @@
open(DAEMON, "$perl local/http.t daemon |") or die "Can't exec daemon: $!";
}
-print "1..18\n";
-
+use Test;
+plan tests => 49;
my $greeting = <DAEMON>;
$greeting =~ /(<[^>]+>)/;
@@ -75,13 +75,12 @@
$req->header(X_Foo => "Bar");
$res = $ua->request($req);
-print "not " unless $res->is_error
- and $res->code == 404
- and $res->message =~ /not\s+found/i;
-print "ok 1\n";
+ok($res->is_error);
+ok($res->code, 404);
+ok($res->message, qr/not\s+found/i);
# we also expect a few headers
-print "not " if !$res->server and !$res->date;
-print "ok 2\n";
+ok($res->server);
+ok($res->date);
#----------------------------------------------------------------
print "Simple echo...\n";
@@ -108,25 +107,35 @@
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_success
- and $res->code == 200 && $res->message eq "OK";
-print "ok 3\n";
+ok($res->is_success);
+ok($res->code, 200);
+ok($res->message, "OK");
$_ = $res->content;
@accept = /^Accept:\s*(.*)/mg;
-print "not " unless /^From:\s*gisle\@aas\.no$/m
- and /^Host:/m
- and @accept == 3
- and /^Accept:\s*text\/html/m
- and /^Accept:\s*text\/plain/m
- and /^Accept:\s*image\/\*/m
- and /^If-Modified-Since:\s*\w{3},\s+\d+/m
- and /^Long-Text:\s*This.*broken between/m
- and /^Foo-Bar:\s*1$/m
- and /^X-Foo:\s*Bar$/m
- and /^User-Agent:\s*Mozilla\/0.01/m;
-print "ok 4\n";
+ok($_, qr/^From:\s*gisle\@aas\.no\n/m);
+ok($_, qr/^Host:/m);
+ok(@accept, 3);
+ok($_, qr/^Accept:\s*text\/html/m);
+ok($_, qr/^Accept:\s*text\/plain/m);
+ok($_, qr/^Accept:\s*image\/\*/m);
+ok($_, qr/^If-Modified-Since:\s*\w{3},\s+\d+/m);
+ok($_, qr/^Long-Text:\s*This.*broken between/m);
+ok($_, qr/^Foo-Bar:\s*1\n/m);
+ok($_, qr/^X-Foo:\s*Bar\n/m);
+ok($_, qr/^User-Agent:\s*Mozilla\/0.01/m);
+
+# Try it with the higher level 'get' interface
+$res = $ua->get(url("/echo/path_info?query", $base),
+ Accept => 'text/html',
+ Accept => 'text/plain; q=0.9',
+ Accept => 'image/*',
+ X_Foo => "Bar",
+);
+#$res->dump;
+ok($res->code, 200);
+ok($res->content, qr/^From: gisle\(a)aas.no$/m)
#----------------------------------------------------------------
print "Send file...\n";
@@ -155,27 +164,23 @@
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_success
- and $res->content_type eq 'text/html'
- and $res->content_length == 147
- and $res->title eq 'En pr�ve'
- and $res->content =~ /� v�re/;
-print "ok 5\n";
-
+ok($res->is_success);
+ok($res->content_type, 'text/html');
+ok($res->content_length, 147);
+ok($res->title, 'En pr�ve');
+ok($res->content, qr/� v�re/);
# A second try on the same file, should fail because we unlink it
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_error
- and $res->code == 404; # not found
-print "ok 6\n";
+ok($res->is_error);
+ok($res->code, 404); # not found
# Then try to list current directory
$req = new HTTP::Request GET => url("/file?name=.", $base);
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->code == 501; # NYI
-print "ok 7\n";
+ok($res->code, 501); # NYI
#----------------------------------------------------------------
@@ -190,12 +195,10 @@
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_success
- and $res->content =~ m|/echo/redirect|;
-print "ok 8\n";
-print "not " unless $res->previous->is_redirect
- and $res->previous->code == 301;
-print "ok 9\n";
+ok($res->is_success);
+ok($res->content, qr|/echo/redirect|);
+ok($res->previous->is_redirect);
+ok($res->previous->code, 301);
# Let's test a redirect loop too
sub httpd_get_redirect2 { shift->send_redirect("/redirect3/") }
@@ -205,17 +208,15 @@
$ua->max_redirect(5);
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_redirect
- and $res->header("Client-Warning") =~ /loop detected/i;
-print "ok 10\n";
-$i = 0;
-while ($res->previous) {
- $i++;
- $res = $res->previous;
-}
+ok($res->is_redirect);
+ok($res->header("Client-Warning"), qr/loop detected/i);
+ok($res->redirects, 5);
-print "not " unless $i == 5;
-print "ok 11\n";
+$ua->max_redirect(0);
+$res = $ua->request($req);
+ok($res->previous, undef);
+ok($res->redirects, 0);
+$ua->max_redirect(5);
#----------------------------------------------------------------
print "Check basic authorization...\n";
@@ -254,25 +255,22 @@
$res = MyUA->new->request($req);
#print $res->as_string;
-print "not " unless $res->is_success;
-print $res->content;
+ok($res->is_success);
+#print $res->content;
# Let's try with a $ua that does not pass out credentials
$res = $ua->request($req);
-print "not " unless $res->code == 401;
-print "ok 13\n";
+ok($res->code, 401);
# Let's try to set credentials for this realm
$ua->credentials($req->url->host_port, "libwww-perl", "ok 12", "xyzzy");
$res = $ua->request($req);
-print "not " unless $res->is_success;
-print "ok 14\n";
+ok($res->is_success);
# Then illegal credentials
$ua->credentials($req->url->host_port, "libwww-perl", "user", "passwd");
$res = $ua->request($req);
-print "not " unless $res->code == 401;
-print "ok 15\n";
+ok($res->code, 401);
#----------------------------------------------------------------
@@ -294,8 +292,7 @@
$req = new HTTP::Request GET => "ftp://ftp.perl.com/proxy";
$res = $ua->request($req);
#print $res->as_string;
-print "not " unless $res->is_success;
-print "ok 16\n";
+ok($res->is_success);
#----------------------------------------------------------------
print "Check POSTing...\n";
@@ -325,11 +322,10 @@
#print $res->as_string;
$_ = $res->content;
-print "not " unless $res->is_success
- and /^Content-Length:\s*16$/mi
- and /^Content-Type:\s*application\/x-www-form-urlencoded$/mi
- and /^foo=bar&bar=test$/m;
-print "ok 17\n";
+ok($res->is_success);
+ok($_, qr/^Content-Length:\s*16$/mi);
+ok($_, qr/^Content-Type:\s*application\/x-www-form-urlencoded$/mi);
+ok($_, qr/^foo=bar&bar=test$/m);
#----------------------------------------------------------------
print "Terminating server...\n";
@@ -343,6 +339,5 @@
$req = new HTTP::Request GET => url("/quit", $base);
$res = $ua->request($req);
-print "not " unless $res->code == 503 and $res->content =~ /Bye, bye/;
-print "ok 18\n";
-
+ok($res->code, 503);
+ok($res->content, qr/Bye, bye/);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/local/protosub.t new/libwww-perl-5.825/t/local/protosub.t
--- old/libwww-perl-5.823/t/local/protosub.t 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/t/local/protosub.t 2009-02-11 10:29:22.000000000 +0100
@@ -1,6 +1,8 @@
#!perl
-print "1..6\n";
+use strict;
+use Test;
+plan tests => 6;
# This test tries to make a custom protocol implementation by
# subclassing of LWP::Protocol.
@@ -11,27 +13,27 @@
LWP::Protocol::implementor(http => 'myhttp');
-$ua = LWP::UserAgent->new;
+my $ua = LWP::UserAgent->new;
$ua->proxy('ftp' => "http://www.sn.no/");
-$req = HTTP::Request->new(GET => 'ftp://foo/');
+my $req = HTTP::Request->new(GET => 'ftp://foo/');
$req->header(Cookie => "perl=cool");
-$res = $ua->request($req);
+my $res = $ua->request($req);
-print $res->as_string;
-
-print "not " unless $res->code == 200;
-print "ok 5\n";
-print "not " unless $res->content eq "Howdy\n";
-print "ok 6\n";
+#print $res->as_string;
+ok($res->code, 200);
+ok($res->content, "Howdy\n");
exit;
#----------------------------------
package myhttp;
+use Test qw(ok);
+
BEGIN {
+ use vars qw(@ISA);
@ISA=qw(LWP::Protocol);
}
@@ -40,8 +42,7 @@
my $class = shift;
print "CTOR: $class->new(@_)\n";
my($prot) = @_;
- print "not " unless $prot eq "http";
- print "ok 1\n";
+ ok($prot, "http");
my $self = $class->SUPER::new(@_);
for (keys %$self) {
my $v = $self->{$_};
@@ -54,18 +55,12 @@
sub request
{
my $self = shift;
- print "REQUEST: $self->request(",
- join(",", (map defined($_)? $_ : "UNDEF", @_)), ")\n";
-
my($request, $proxy, $arg, $size, $timeout) = @_;
- print $request->as_string;
+ #print $request->as_string;
- print "not " unless $proxy eq "http://www.sn.no/";
- print "ok 2\n";
- print "not " unless $request->url eq "ftp://foo/";
- print "ok 3\n";
- print "not " unless $request->header("cookie") eq "perl=cool";
- print "ok 4\n";
+ ok($proxy, "http://www.sn.no/");
+ ok($request->url, "ftp://foo/");
+ ok($request->header("cookie"), "perl=cool");
my $res = HTTP::Response->new(200 => "OK");
$res->content_type("text/plain");
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/libwww-perl-5.823/t/robot/rules.t new/libwww-perl-5.825/t/robot/rules.t
--- old/libwww-perl-5.823/t/robot/rules.t 2008-04-04 10:43:22.000000000 +0200
+++ new/libwww-perl-5.825/t/robot/rules.t 2009-01-14 22:49:18.000000000 +0100
@@ -62,6 +62,8 @@
Disallow: ftp://foo
Disallow: http://foo:8080/
Disallow: http://bar/
+
+Sitemap: http://www.adobe.com/sitemap.xml
EOM
my $content5 = <<EOM;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-ldap for openSUSE:Factory
checked in at Mon Feb 23 23:50:58 CET 2009.
--------
--- perl-ldap/perl-ldap.changes 2008-09-10 18:04:55.000000000 +0200
+++ perl-ldap/perl-ldap.changes 2009-02-23 16:11:58.000000000 +0100
@@ -1,0 +2,13 @@
+Mon Feb 23 16:11:13 CET 2009 - anicka(a)suse.cz
+
+- update to 0.39
+ * Several fixes to the handling of IntermediateMessage and LDAP
+ Content synchronisation
+ * Fix dsmt test to not fail on win32
+ * Fix Net::LDAP::Util to not cause Undefined subroutine
+ &Net::LDAP::Util::ldap_error_desc
+ * Fix bug in Net::LDAP::Extension using wrong field for resultCode
+ * Fix Net::LDAP::Control::PasswordPolicy decoding bug.
+ * Net::LDAP::Extension::SetPassword now supports controls
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
perl-ldap-0.37.tar.bz2
New:
----
perl-ldap-0.39.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-ldap.spec ++++++
--- /var/tmp/diff_new_pack.S14114/_old 2009-02-23 23:48:52.000000000 +0100
+++ /var/tmp/diff_new_pack.S14114/_new 2009-02-23 23:48:52.000000000 +0100
@@ -1,7 +1,7 @@
#
-# spec file for package perl-ldap (Version 0.37)
+# spec file for package perl-ldap (Version 0.39)
#
-# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
Name: perl-ldap
BuildRequires: perl-Authen-SASL perl-Convert-ASN1 perl-IO-Socket-SSL perl-XML-Parser
-Version: 0.37
+Version: 0.39
Release: 1
Provides: perl_ldp perl-Net-LDAP = %{version}
Obsoletes: perl_ldp perl-Net-LDAP < %{version}
@@ -103,6 +103,16 @@
%{perl_vendorlib}/Net/LDAPS.pm
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 0.39
+ * Several fixes to the handling of IntermediateMessage and LDAP
+ Content synchronisation
+ * Fix dsmt test to not fail on win32
+ * Fix Net::LDAP::Util to not cause Undefined subroutine
+ &Net::LDAP::Util::ldap_error_desc
+ * Fix bug in Net::LDAP::Extension using wrong field for resultCode
+ * Fix Net::LDAP::Control::PasswordPolicy decoding bug.
+ * Net::LDAP::Extension::SetPassword now supports controls
* Wed Sep 10 2008 anicka(a)suse.cz
- update to 0.37
* Add Modify Increment (RFC 4525) support
@@ -114,7 +124,7 @@
as array ref
* Added Net::LDAP::Control::PasswordPolicy to support draft RFC
* bugfixes
-* Wed Jul 16 2008 jw(a)suse.de
+* Tue Jul 15 2008 jw(a)suse.de
- perl-ldap does not conform to our naming conventions for perl packages.
Added a Provides: perl-Net-LDAP to make user's life easier.
(Using version numbers, to allow future package rename)
++++++ perl-ldap-0.37.tar.bz2 -> perl-ldap-0.39.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/Changes new/perl-ldap-0.39/Changes
--- old/perl-ldap-0.37/Changes 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/Changes 2008-10-27 21:05:58.000000000 +0100
@@ -1,3 +1,21 @@
+perl-ldap 0.39 -- Mon Oct 27 15:02:37 CDT 2008
+==============================================
+
+Bug Fixes
+ * Several fixes to the handling of IntermediateMessage and LDAP Content synchronisation
+ * Fix dsmt test to not fail on win32
+ * Fix Net::LDAP::Util to not cause Undefined subroutine &Net::LDAP::Util::ldap_error_desc
+
+perl-ldap 0.38 -- Sun Sep 21 09:17:25 CDT 2008
+==============================================
+
+Bug Fixes
+ * Fix bug in Net::LDAP::Extension using wrong field for resultCode
+ * Fix Net::LDAP::Control::PasswordPolicy decoding bug.
+
+Enhancements
+ * Net::LDAP::Extension::SetPassword now supports controls
+
perl-ldap 0.37 -- Thu Aug 28 07:48:13 CDT 2008
==============================================
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/ASN.pm new/perl-ldap-0.39/lib/Net/LDAP/ASN.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/ASN.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/ASN.pm 2008-10-27 21:05:58.000000000 +0100
@@ -1,7 +1,7 @@
package Net::LDAP::ASN;
-$VERSION = "0.07";
+$VERSION = "0.08";
use Convert::ASN1;
@@ -455,7 +455,7 @@
refreshAndPersist (3)
}
cookie syncCookie OPTIONAL,
- reloadHint BOOLEAN -- DEFAULT FALSE
+ reloadHint BOOLEAN OPTIONAL -- DEFAULT FALSE
}
syncStateValue ::= SEQUENCE {
@@ -471,22 +471,22 @@
syncDoneValue ::= SEQUENCE {
cookie syncCookie OPTIONAL,
- refreshDeletes BOOLEAN -- DEFAULT FALSE
+ refreshDeletes BOOLEAN OPTIONAL -- DEFAULT FALSE
}
syncInfoValue ::= CHOICE {
newcookie [0] syncCookie,
refreshDelete [1] SEQUENCE {
- refreshDeleteCookie syncCookie OPTIONAL,
- refreshDeleteDone BOOLEAN -- DEFAULT TRUE
+ cookie syncCookie OPTIONAL,
+ refreshDone BOOLEAN OPTIONAL -- DEFAULT TRUE
}
refreshPresent [2] SEQUENCE {
- refreshDeletecookie syncCookie OPTIONAL,
- refreshDeleteDone BOOLEAN -- DEFAULT TRUE
+ cookie syncCookie OPTIONAL,
+ refreshDone BOOLEAN OPTIONAL -- DEFAULT TRUE
}
syncIdSet [3] SEQUENCE {
cookie syncCookie OPTIONAL,
- refreshDeletes BOOLEAN, -- DEFAULT FALSE
+ refreshDeletes BOOLEAN OPTIONAL, -- DEFAULT FALSE
syncUUIDs SET OF syncUUID
}
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Control/PasswordPolicy.pm new/perl-ldap-0.39/lib/Net/LDAP/Control/PasswordPolicy.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Control/PasswordPolicy.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Control/PasswordPolicy.pm 2008-10-27 21:05:58.000000000 +0100
@@ -8,7 +8,7 @@
use Net::LDAP::Control;
@ISA = qw(Net::LDAP::Control);
-$VERSION = "0.01";
+$VERSION = "0.02";
use Net::LDAP::ASN qw(ppControlResponse);
use strict;
@@ -19,15 +19,16 @@
delete $self->{asn};
unless (exists $self->{value}) {
- $self->{asn} = {
- timeBeforeExpiration =>
- defined($self->{time_before_expiration}) ?
- $self->{time_before_expiration} : '',
- graceAuthNsRemaining =>
- defined($self->{grace_authentications_remaining}) ?
- $self->{grace_authentications_remaining} : '',
- error => defined($self->{error}) ? $self->{error} : '',
- };
+ $self->{asn} = \my %asn;
+ if (defined($self->{time_before_expiration})) {
+ $asn{warning}{timeBeforeExpiration} = defined($self->{time_before_expiration});
+ }
+ elsif (defined($self->{grace_authentications_remaining})) {
+ $asn{warning}{graceAuthNsRemaining} = $self->{time_before_expiration};
+ }
+ if (defined($self->{pp_error})) {
+ $asn{error} = $self->{pp_error};
+ }
}
$self;
@@ -38,9 +39,19 @@
$self->{asn} ||= $ppControlResponse->decode($self->{value});
if (@_) {
delete $self->{value};
- return $self->{asn}{timeBeforeExpiration} = shift || 0;
+ my $time = shift;
+ if (defined $time) {
+ $self->{asn}{warning} = { timeBeforeExpiration => $time };
+ }
+ elsif (my $warning = $self->{asn}{warning}) {
+ if (exists $warning->{timeBeforeExpiration}) {
+ delete $self->{asn}{warning};
+ }
+ }
+ return $time;
}
- $self->{asn}{timeBeforeExpiration};
+ my $warning = $self->{asn}{warning};
+ $warning && $warning->{timeBeforeExpiration};
}
sub grace_authentications_remaining {
@@ -48,21 +59,40 @@
$self->{asn} ||= $ppControlResponse->decode($self->{value});
if (@_) {
delete $self->{value};
- return $self->{asn}{graceAuthNsRemaining} = shift || 0;
+ my $remaining = shift;
+ if (defined $remaining) {
+ $self->{asn}{warning} = { graceAuthNsRemaining => $remaining };
+ }
+ elsif (my $warning = $self->{asn}{warning}) {
+ if (exists $warning->{graceAuthNsRemaining}) {
+ delete $self->{asn}{warning};
+ }
+ }
+ return $remaining;
}
- $self->{asn}{graceAuthNsRemaining};
+ my $warning = $self->{asn}{warning};
+ $warning && $warning->{graceAuthNsRemaining};
}
-sub error {
+sub pp_error {
my $self = shift;
$self->{asn} ||= $ppControlResponse->decode($self->{value});
if (@_) {
delete $self->{value};
- return $self->{asn}{error} = shift || 0;
+ return $self->{asn}{error} = shift;
}
$self->{asn}{error};
}
+sub value {
+ my $self = shift;
+ return $self->{value} if exists $self->{value};
+ my $asn = $self->{asn};
+ # Return undef if all optional values are missing
+ return undef unless $asn and (defined $asn->{error} or $asn->{warning});
+ $self->{value} = $ppControlResponse->encode($self->{asn});
+}
+
1;
__END__
@@ -89,7 +119,7 @@
my($resp) = $mesg->control( LDAP_CONTROL_PASSWORDPOLICY );
if (defined($resp)) {
- my $v = $resp->error;
+ my $v = $resp->pp_error;
print "Password policy error $v\n" if defined $v;
$v = $resp->time_before_expiration;
print "Password expires in $v second(s)\n" if defined $v;
@@ -123,7 +153,7 @@
If defined, this is an integer value holding the number of
authentication requests allowed before the account is locked.
-=item error
+=item pp_error
If defined, this contains a more detailed error code for the account.
See L<Net::LDAP::Constant> for definitions of each.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncDone.pm new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncDone.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncDone.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncDone.pm 2008-10-27 21:05:58.000000000 +0100
@@ -8,22 +8,19 @@
use Net::LDAP::Control;
@ISA = qw(Net::LDAP::Control);
-$VERSION = "0.01";
+$VERSION = "0.02";
use Net::LDAP::ASN qw(syncDoneValue);
use strict;
-# use some kind of hack here:
-# - calling the control without args means: response,
-# - giving an argument: means: request
sub init {
my($self) = @_;
- delete $self->{asn};
-
- unless (exists $self->{value}) {
+ if (exists $self->{value}) {
+ $self->{asn} = $syncDoneValue->decode(delete $self->{value});
+ } else {
$self->{asn} = {
- cookie => $self->{cookie} || '',
+ cookie => defined($self->{cookie}) ? $self->{cookie} : '',
refreshDeletes => $self->{refreshDeletes} || '0',
};
}
@@ -36,7 +33,7 @@
$self->{asn} ||= $syncDoneValue->decode($self->{value});
if (@_) {
delete $self->{value};
- return $self->{asn}{cookie} = shift || 0;
+ return $self->{asn}{cookie} = defined($_[0]) ? $_[0] : '';
}
$self->{asn}{cookie};
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncRequest.pm new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncRequest.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncRequest.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncRequest.pm 2008-10-27 21:05:58.000000000 +0100
@@ -8,14 +8,11 @@
use Net::LDAP::Control;
@ISA = qw(Net::LDAP::Control);
-$VERSION = "0.01";
+$VERSION = "0.02";
use Net::LDAP::ASN qw(syncRequestValue);
use strict;
-# use some kind of hack here:
-# - calling the control without args means: response,
-# - giving an argument: means: request
sub init {
my($self) = @_;
@@ -64,10 +61,8 @@
sub value {
my $self = shift;
-
- exists $self->{value}
- ? $self->{value}
- : $self->{value} = $syncRequestValue->encode($self->{asn});
+ return $self->{value} if exists $self->{value};
+ $self->{value} = $syncRequestValue->encode($self->{asn});
}
1;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncState.pm new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncState.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Control/SyncState.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Control/SyncState.pm 2008-10-27 21:05:58.000000000 +0100
@@ -8,24 +8,21 @@
use Net::LDAP::Control;
@ISA = qw(Net::LDAP::Control);
-$VERSION = "0.01";
+$VERSION = "0.02";
use Net::LDAP::ASN qw(syncStateValue);
use strict;
-# use some kind of hack here:
-# - calling the control without args means: response,
-# - giving an argument: means: request
sub init {
my($self) = @_;
- delete $self->{asn};
-
- unless (exists $self->{value}) {
+ if (exists $self->{value}) {
+ $self->{asn} = $syncStateValue->decode(delete $self->{value});
+ } else {
$self->{asn} = {
state => $self->{state} || '',
entryUUID => $self->{entryUUID} || '',
- cookie => $self->{cookie} || '',
+ cookie => defined($self->{cookie}) ? $self->{cookie} : '',
};
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Extension/SetPassword.pm new/perl-ldap-0.39/lib/Net/LDAP/Extension/SetPassword.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Extension/SetPassword.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Extension/SetPassword.pm 2008-10-27 21:05:58.000000000 +0100
@@ -3,7 +3,7 @@
require Net::LDAP::Extension;
-$VERSION = "0.02";
+$VERSION = "0.03";
@ISA = qw(Net::LDAP::Extension);
use Convert::ASN1;
@@ -25,7 +25,8 @@
my $res = $ldap->extension(
name => '1.3.6.1.4.1.4203.1.11.1',
- value => $passwdModReq->encode(\%opt)
+ value => $passwdModReq->encode(\%opt),
+ ($opt{control} ? (control => $opt{control}) : ())
);
bless $res; # Naughty :-)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Extension.pm new/perl-ldap-0.39/lib/Net/LDAP/Extension.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Extension.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Extension.pm 2008-10-27 21:05:58.000000000 +0100
@@ -7,13 +7,13 @@
use vars qw(@ISA $VERSION);
@ISA = qw(Net::LDAP::Message);
-$VERSION = "1.01";
+$VERSION = "1.02";
#fetch the response name
sub response_name {
my $self = shift;
- $self->sync unless exists $self->{Code};
+ $self->sync unless exists $self->{resultCode};
exists $self->{responseName}
? $self->{responseName}
@@ -24,7 +24,7 @@
sub response {
my $self = shift;
- $self->sync unless exists $self->{Code};
+ $self->sync unless exists $self->{resultCode};
exists $self->{response}
? $self->{response}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Intermediate/SyncInfo.pm new/perl-ldap-0.39/lib/Net/LDAP/Intermediate/SyncInfo.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Intermediate/SyncInfo.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Intermediate/SyncInfo.pm 2008-10-27 21:05:58.000000000 +0100
@@ -8,23 +8,47 @@
use Net::LDAP::Intermediate;
@ISA = qw(Net::LDAP::Intermediate);
-$VERSION = "0.01";
+$VERSION = "0.02";
use Net::LDAP::ASN qw(syncInfoValue);
use strict;
-# use some kind of hack here:
-# - calling the control without args means: response,
-# - giving an argument: means: request
sub init {
my($self) = @_;
- delete $self->{asn};
-
- unless (exists $self->{responseValue}) {
- $self->{asn} = {
- newcookie => $self->{newcookie} || '',
- };
+ if (exists $self->{responseValue}) {
+ $self->{asn} = $syncInfoValue->decode(delete $self->{responseValue});
+ } else {
+ $self->{asn} = {};
+ $self->{asn}{newcookie} =
+ delete $self->{newcookie} if exists $self->{newcookie};
+ $self->{asn}{refreshDelete} =
+ delete $self->{refreshDelete} if exists $self->{refreshDelete};
+ $self->{asn}{refreshPresent} =
+ delete $self->{refreshPresent} if exists $self->{refreshPresent};
+ $self->{asn}{syncIdSet} =
+ delete $self->{syncIdSet} if exists $self->{syncIdSet};
+ }
+ #$self->{asn}{refreshDelete}{refreshDone} defaults to TRUE
+ if(defined($self->{asn}{refreshDelete})) {
+ $self->{asn}{refreshDelete}{refreshDone} =
+ defined($self->{asn}{refreshDelete}{refreshDone})
+ ? $self->{asn}{refreshDelete}{refreshDone}
+ : 1;
+ }
+ #$self->{asn}{refreshPresent}{refreshDone} defaults to TRUE
+ if(defined($self->{asn}{refreshPresent})) {
+ $self->{asn}{refreshPresent}{refreshDone} =
+ defined($self->{asn}{refreshPresent}{refreshDone})
+ ? $self->{asn}{refreshPresent}{refreshDone}
+ : 1;
+ }
+ #$self->{asn}{syncIdSet}{refreshDeletes} defaults to FALSE
+ if(defined($self->{asn}{syncIdSet})) {
+ $self->{asn}{syncIdSet}{refreshDeletes} =
+ defined($self->{asn}{syncIdSet}{refreshDeletes})
+ ? $self->{asn}{syncIdSet}{refreshDeletes}
+ : 0;
}
$self;
@@ -32,11 +56,8 @@
sub newcookie {
my $self = shift;
- $self->{asn} ||= $syncInfoValue->decode($self->{responseValue});
- if (@_) {
- delete $self->{responseValue};
- return $self->{asn}{newcookie} = shift || 0;
- }
+ @_ ? ($self->{asn}{newcookie}=shift)
+ : $self->{asn}{newcookie};
$self->{asn}{cookie};
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Intermediate.pm new/perl-ldap-0.39/lib/Net/LDAP/Intermediate.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Intermediate.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Intermediate.pm 2008-10-27 21:05:58.000000000 +0100
@@ -11,11 +11,11 @@
LDAP_SYNC_INFO
);
-$VERSION = "0.01";
+$VERSION = "0.02";
my %Class2ResponseName = (
- #'Net::LDAP::Intermediate::SyncInfo' => LDAP_SYNC_INFO, #disabled as decoding doesn't work
+ 'Net::LDAP::Intermediate::SyncInfo' => LDAP_SYNC_INFO,
);
my %ResponseName2Class = reverse %Class2ResponseName;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Message.pm new/perl-ldap-0.39/lib/Net/LDAP/Message.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Message.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Message.pm 2008-10-27 21:05:58.000000000 +0100
@@ -9,7 +9,7 @@
use strict;
use vars qw($VERSION);
-$VERSION = "1.10";
+$VERSION = "1.11";
my $MsgID = 0;
@@ -102,10 +102,12 @@
}
sub error_name {
+ require Net::LDAP::Util;
Net::LDAP::Util::ldap_error_name(shift->code);
}
sub error_text {
+ require Net::LDAP::Util;
Net::LDAP::Util::ldap_error_text(shift->code);
}
@@ -142,9 +144,21 @@
# free up memory as we have a result so we will not need to re-send it
delete $self->{pdu};
- # tell our LDAP client to forget us as this message has now completed
- # all communications with the server
- $self->parent->_forgetmesg($self);
+ if ($data = delete $result->{protocolOp}{intermediateResponse}) {
+
+ my $intermediate = Net::LDAP::Intermediate->from_asn($data);
+
+ push(@{$self->{'intermediate'} ||= []}, $intermediate);
+
+ $self->{callback}->($self, $intermediate)
+ if (defined $self->{callback});
+
+ return $self;
+ } else {
+ # tell our LDAP client to forget us as this message has now completed
+ # all communications with the server
+ $self->parent->_forgetmesg($self);
+ }
$self->{callback}->($self)
if (defined $self->{callback});
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/RootDSE.pm new/perl-ldap-0.39/lib/Net/LDAP/RootDSE.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/RootDSE.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/RootDSE.pm 2008-10-27 21:05:58.000000000 +0100
@@ -40,7 +40,7 @@
my $dse = $ldap->root_dse();
# get naming Contexts
- my @contexts = $dse->get_value('namingContext');
+ my @contexts = $dse->get_value('namingContexts');
# get supported LDAP versions as an array reference
my $versions = $dse->get_value('supportedLDAPVersion', asref => 1);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP/Search.pm new/perl-ldap-0.39/lib/Net/LDAP/Search.pm
--- old/perl-ldap-0.37/lib/Net/LDAP/Search.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP/Search.pm 2008-10-27 21:05:58.000000000 +0100
@@ -13,7 +13,7 @@
use Net::LDAP::Constant qw(LDAP_SUCCESS LDAP_DECODING_ERROR);
@ISA = qw(Net::LDAP::Message);
-$VERSION = "0.12";
+$VERSION = "0.13";
sub first_entry { # compat
@@ -36,6 +36,8 @@
return $self->SUPER::decode($result)
if exists $result->{protocolOp}{searchResDone};
+ return $self->SUPER::decode($result)
+ if exists $result->{protocolOp}{intermediateResponse};
my $data;
@{$self}{qw(controls ctrl_hash)} = ($result->{controls}, undef);
@@ -64,17 +66,6 @@
return $self;
}
- elsif ($data = delete $result->{protocolOp}{intermediateResponse}) {
-
- my $intermediate = Net::LDAP::Intermediate->from_asn($data);
-
- push(@{$self->{'intermediate'} ||= []}, [$intermediate]);
-
- $self->{callback}->($self, $intermediate)
- if (defined $self->{callback});
-
- return $self;
- }
$self->set_error(LDAP_DECODING_ERROR, "LDAP decode error");
return;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP.pm new/perl-ldap-0.39/lib/Net/LDAP.pm
--- old/perl-ldap-0.37/lib/Net/LDAP.pm 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP.pm 2008-10-27 21:05:58.000000000 +0100
@@ -28,7 +28,7 @@
LDAP_UNAVAILABLE
);
-$VERSION = "0.37";
+$VERSION = "0.39";
@ISA = qw(Tie::StdHash Net::LDAP::Extra);
$LDAP_VERSION = 3; # default LDAP protocol version
@@ -1026,7 +1026,7 @@
return $mesg
if IO::Socket::SSL::socketToSSL($sock, {_SSL_context_init_args($arg)});
- my $err = $@;
+ my $err = $@ || $IO::Socket::SSL::SSL_ERROR || $IO::Socket::SSL::SSL_ERROR || ''; # avoid use on once warning
if ($sock_class ne ref($sock)) {
$err = $sock->errstr;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/lib/Net/LDAP.pod new/perl-ldap-0.39/lib/Net/LDAP.pod
--- old/perl-ldap-0.37/lib/Net/LDAP.pod 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/lib/Net/LDAP.pod 2008-10-27 21:05:58.000000000 +0100
@@ -417,10 +417,24 @@
string if only a single value is wanted in the attribute, or a
reference to an array of strings if multiple values are wanted.
+ $mesg = $ldap->modify( $dn,
+ add => {
+ description => 'List of members', # Add description attribute
+ member => [
+ 'cn=member1,ou=people,dc=example,dc=com', # Add to attribute
+ 'cn=member2,ou=people,dc=example,dc=com',
+ ]
+ }
+ );
+
=item delete =E<gt> [ ATTR, ... ]
Delete complete attributes from the entry.
+ $mesg = $ldap->modify( $dn,
+ delete => ['member','description'] # Delete attributes
+ );
+
=item delete =E<gt> { ATTR =E<gt> VALUE, ... }
Delete individual values from an attribute. C<VALUE> should be a
@@ -428,13 +442,40 @@
a reference to an array of strings if multiple values are being
deleted.
+If C<VALUE> is a reference to an empty array or all existing values
+of the attribute are being deleted, then the attribute will be
+deleted from the entry.
+
+ $mesg = $ldap->modify( $dn,
+ delete => {
+ description => 'List of members',
+ member => [
+ 'cn=member1,ou=people,dc=example,dc=com', # Remove members
+ 'cn=member2,ou=people,dc=example,dc=com',
+ ],
+ seeAlso => [], # Remove attribute
+ }
+ );
+
=item replace =E<gt> { ATTR =E<gt> VALUE, ... }
Replace any existing values in each given attribute with
C<VALUE>. C<VALUE> should be a string if only a single value is wanted
in the attribute, or a reference to an array of strings if multiple
values are wanted. A reference to an empty array will remove the
-entire attribute.
+entire attribute. If the attribute does not already exist in the
+entry, it will be created.
+
+ $mesg = $ldap->modify( $dn,
+ replace => {
+ description => 'New List of members', # Change the description
+ member => [ # Replace whole list with these
+ 'cn=member1,ou=people,dc=example,dc=com',
+ 'cn=member2,ou=people,dc=example,dc=com',
+ ],
+ seeAlso => [], # Remove attribute
+ }
+ );
=item increment =E<gt> { ATTR =E<gt> VALUE, ... }
@@ -444,6 +485,12 @@
advertizes support for LDAP_FEATURE_MODIFY_INCREMENT. Use
L<Net::LDAP::RootDSE/supported_feature> to check this.
+ $mesg = $ldap->modify( $dn,
+ increment => {
+ uidNumber => 1 # increment uidNumber by 1
+ }
+ );
+
=item changes =E<gt> [ OP =E<gt> [ ATTR =E<gt> VALUE ], ... ]
This is an alternative to B<add>, B<delete>, B<replace> and B<increment>
@@ -454,6 +501,21 @@
Use this form if you want to control the order in which the operations
will be performed.
+ $mesg = $ldap->modify( $dn,
+ changes => [
+ add => [
+ description => 'A description',
+ member => $newMember,
+ ],
+ delete => [
+ seeAlso => [],
+ ],
+ add => [
+ anotherAttribute => $value,
+ ],
+ ]
+ );
+
=item control =E<gt> CONTROL
=item control =E<gt> [ CONTROL, ... ]
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/Makefile.PL new/perl-ldap-0.39/Makefile.PL
--- old/perl-ldap-0.37/Makefile.PL 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/Makefile.PL 2008-10-27 21:05:58.000000000 +0100
@@ -11,6 +11,11 @@
license ('perl');
abstract ('LDAP client library');
+resources homepage => 'http://ldap.perl.org/';
+resources repository => 'http://git.goingon.net/?p=perl-lda.git;a=summary';
+resources MailingList => 'http://lists.cpan.org/showlist.cgi?name=perl-ldap';
+resources ListArchive => 'http://perl.markmail.org/search/list:perl-ldap';
+
sign(1);
check_nmake(); # check and download nmake.exe for Win32
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/META.yml new/perl-ldap-0.39/META.yml
--- old/perl-ldap-0.37/META.yml 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/META.yml 2008-10-27 21:05:58.000000000 +0100
@@ -17,4 +17,9 @@
requires:
Convert::ASN1: 0.07
perl: 5.004
-version: 0.37
+resources:
+ ListArchive: http://perl.markmail.org/search/list:perl-ldap
+ MailingList: http://lists.cpan.org/showlist.cgi?name=perl-ldap
+ homepage: http://ldap.perl.org/
+ repository: http://git.goingon.net/?p=perl-lda.git;a=summary
+version: 0.39
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/SIGNATURE new/perl-ldap-0.39/SIGNATURE
--- old/perl-ldap-0.37/SIGNATURE 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/SIGNATURE 2008-10-27 21:05:58.000000000 +0100
@@ -16,12 +16,12 @@
SHA1 24a5cce207ec42358c1cff40639e6dff8d7e8d6b .gitignore
SHA1 d0b391ea67d4af1e877c4476490c95cf3f8783e6 CREDITS
-SHA1 24b111e2babe43d89238159d69519c39c373a31c Changes
+SHA1 9ef4f162ea6a8a1807778503c3119ad70a8bc6b3 Changes
SHA1 18422f27b2f17b10e9d18b4e482d7bfc95c8df86 INSTALL
SHA1 c2bec936399190520629d3a2e25b313c471c241e MANIFEST
SHA1 88cb906904179e0adf52007f0679a294294ea021 MANIFEST.SKIP
-SHA1 9d4376f9d94e41f1ddd484f92ac4c9170d7ab388 META.yml
-SHA1 a73ad16739e5ebb9df0242295510cd3dcd4785ba Makefile.PL
+SHA1 b8ced17ca37131e36ae5fbdf57a58bbd21656afb META.yml
+SHA1 7767423201733f281c8b344b2b9079b2f545af2e Makefile.PL
SHA1 f3b66414a0872801f3c4c38a93499d0fe48509ef README
SHA1 6c5729e4c6bb46c66fcc33dbb8231292d1c14dee TODO
SHA1 8e15e7abefa826736358685aa1115810baaa9b4a bin/ldapdelete
@@ -82,51 +82,51 @@
SHA1 4dde3f6e30c239c15c234309b7c32dd5a7d409a9 install-nomake
SHA1 da956a83d04192b551118b6ddffc32977cff5427 lib/Bundle/Net/LDAP.pm
SHA1 3637699c1d2e0427a74aa5e44ef0f61a725a83f4 lib/LWP/Protocol/ldap.pm
-SHA1 f028f8fee44babefc7122fefcfd008f9af402e23 lib/Net/LDAP.pm
-SHA1 c20c8cb8fdf5f930a00ffa24706be4a67e9fc4f1 lib/Net/LDAP.pod
-SHA1 9161a577599bc648dfb2ce46fcb10a96a62dfb6a lib/Net/LDAP/ASN.pm
+SHA1 635cdcfa7a5a631ba6a2b25a9d125b6cfd7f781c lib/Net/LDAP.pm
+SHA1 a4f08a76aa0da5c2c5af06207b230aff3a429c41 lib/Net/LDAP.pod
+SHA1 1fb74f66d0ed5ba26e468d6a2b99e5eb769c2411 lib/Net/LDAP/ASN.pm
SHA1 4b1f29fd2ca60e4bf1bcf6ae8d97f56c2442eb56 lib/Net/LDAP/Bind.pm
SHA1 8b37856e342f814ff7ad3f7906ccf9025ca54bdd lib/Net/LDAP/Constant.pm
SHA1 75265c14cc727900c1cb21aeac3dc8d09bceda8a lib/Net/LDAP/Control.pm
SHA1 ab3a966de9724b2ce4197757fec087a766bb4a09 lib/Net/LDAP/Control/EntryChange.pm
SHA1 f2db11b80336a47c8bc5a1ebeb2ad0228838275c lib/Net/LDAP/Control/ManageDsaIT.pm
SHA1 409330c198b6459bffdb78761ce22a300417337e lib/Net/LDAP/Control/Paged.pm
-SHA1 d9119f1138226c7823905afd8946d8be66e849e3 lib/Net/LDAP/Control/PasswordPolicy.pm
+SHA1 fe30617a053e2edbdcfae924390fb940dff1884e lib/Net/LDAP/Control/PasswordPolicy.pm
SHA1 28e53a53f254fbee4f8b71ab311f9ca833007f59 lib/Net/LDAP/Control/PersistentSearch.pm
SHA1 4aefe0e20e65cef8c42d631de86b4fcaabc4ad93 lib/Net/LDAP/Control/PostRead.pm
SHA1 e9f76fc3b7b3cb0ef6d81fba0650373959a8abde lib/Net/LDAP/Control/PreRead.pm
SHA1 7171701e5043314e5ce026847fb42111065af2ec lib/Net/LDAP/Control/ProxyAuth.pm
SHA1 ffd5e5f5035b4aa5b3c64f018791e338a4c98372 lib/Net/LDAP/Control/Sort.pm
SHA1 9e0e84ea6eb7cefd13caa9788a3ffa24c8017d4d lib/Net/LDAP/Control/SortResult.pm
-SHA1 503b79341eb1a9818a557ffe0d2f1a728d5ad0b7 lib/Net/LDAP/Control/SyncDone.pm
-SHA1 2c033db6b95eb43b2d4395ac3103513e4b9f2af5 lib/Net/LDAP/Control/SyncRequest.pm
-SHA1 8222e4e8c461bbc593a2c1c2943b90c6e477285d lib/Net/LDAP/Control/SyncState.pm
+SHA1 3ae73fb52dbeb7c2992c578c2d73181fef8fd26f lib/Net/LDAP/Control/SyncDone.pm
+SHA1 3d7933131dee9892f0aadf18becb16fa50d3a9c1 lib/Net/LDAP/Control/SyncRequest.pm
+SHA1 a140a8ec88d15a89b8d2fcda76d05e01ce8b2255 lib/Net/LDAP/Control/SyncState.pm
SHA1 bccc55cb200ec061790cef7420dff28e0c15eb54 lib/Net/LDAP/Control/VLV.pm
SHA1 bb9ff3dde55d0f40d69a51db611c113abe994247 lib/Net/LDAP/Control/VLVResponse.pm
SHA1 3aa62f4c9ce94ead75f633a7fa1ced2a2bf9f4dc lib/Net/LDAP/DSML.pm
SHA1 9bbe4edd5987aacc832b09a2d4ed043752f7ebdd lib/Net/LDAP/Entry.pm
SHA1 19e9a756153d83d4f31cc821826f84125933a2e0 lib/Net/LDAP/Entry.pod
SHA1 f9a7c3e2ad3e9398c7c142ce6e015af2a7060f17 lib/Net/LDAP/Examples.pod
-SHA1 e52b67753bb12fd61d10cab20905fdb390361283 lib/Net/LDAP/Extension.pm
-SHA1 61301677c081a6c2afa4bd39250d3d50fd2047bf lib/Net/LDAP/Extension/SetPassword.pm
+SHA1 b3ad85252ac3fa97bd63149cbe1fc94302b2acea lib/Net/LDAP/Extension.pm
+SHA1 acc63277837285411078a27ed73c575316fa6717 lib/Net/LDAP/Extension/SetPassword.pm
SHA1 e701488dfea2250b60bf1a5e58d556ab173f57a8 lib/Net/LDAP/Extension/WhoAmI.pm
SHA1 1d0e9a195cec05800c9ad9d4fcb2d567bf4dc116 lib/Net/LDAP/Extra.pm
SHA1 ff4ff38435edd72be15178a7afceb486a560a804 lib/Net/LDAP/FAQ.pod
SHA1 9509f50030b3609b993117ce8f9dc00231343002 lib/Net/LDAP/Filter.pm
SHA1 56ff107733bf97c57b339f78e4525719689dccac lib/Net/LDAP/Filter.pod
SHA1 7e541bc6e29f1148f75d8f47f888c2716b57d294 lib/Net/LDAP/FilterMatch.pm
-SHA1 373fac8c6393802f1f4e305c821fbd14f70069a6 lib/Net/LDAP/Intermediate.pm
-SHA1 765b008e1ac52529370036cce7e4a9be46fc1338 lib/Net/LDAP/Intermediate/SyncInfo.pm
+SHA1 5cabe2f34c7aa04c301002f1af9bfc0a9c036ac8 lib/Net/LDAP/Intermediate.pm
+SHA1 ed17717ec4df7bcb432adfe203c5c4a31e25ecdb lib/Net/LDAP/Intermediate/SyncInfo.pm
SHA1 f6208ff00d3d611c171be7d2c022fd5dd5bca4cc lib/Net/LDAP/LDIF.pm
SHA1 f7f354fb4e0f3bf13a215579b8aa0842a4768dfa lib/Net/LDAP/LDIF.pod
-SHA1 bc918716f7c14d3dfba582898c9c7487d08cea86 lib/Net/LDAP/Message.pm
+SHA1 51c60e66777834451da018b7310d193a27d77278 lib/Net/LDAP/Message.pm
SHA1 6a8b2d30a43d6295de37771c2576cb66c7f10bfd lib/Net/LDAP/Message.pod
SHA1 1ae5e4d10afff9f5d6cd8262a294db331fb461d5 lib/Net/LDAP/RFC.pod
SHA1 4921a9eb85f595aaa4c5c2bf7261feae54440763 lib/Net/LDAP/Reference.pod
-SHA1 f06325e3a75f69792014a762919c1fcf90ab7d78 lib/Net/LDAP/RootDSE.pm
+SHA1 cc2a08d0823bd8ceef9b8977bfe9436e5f9e3144 lib/Net/LDAP/RootDSE.pm
SHA1 91b9629d67cc2fe12689e4a9b42cba658fc206fd lib/Net/LDAP/Schema.pm
SHA1 4e23323449b264e98257c4bc257aaa454469386b lib/Net/LDAP/Schema.pod
-SHA1 dc6bb8acf0c4bf514b02aee9f167a67e5920e386 lib/Net/LDAP/Search.pm
+SHA1 205d45feba6b42d72d1013a120c7bd255e5ad663 lib/Net/LDAP/Search.pm
SHA1 15021444c87d36bbb22755766c0554ef7f633165 lib/Net/LDAP/Search.pod
SHA1 118c4b8e7f937fa5e9abe1cb2bfff9e7d8445471 lib/Net/LDAP/Security.pod
SHA1 19892d74ed36da101a9060e0de2915ed2a4da28d lib/Net/LDAP/Util.pm
@@ -137,7 +137,7 @@
SHA1 67604a71b08d134734b07e9f5971bff62ad8bd46 t/02filter.t
SHA1 6afb905b4d8583a2f3dbeef2068cc953dffe7c25 t/03schema.t
SHA1 9b58a5eb0ec7b9ef4cb3c79d63704f986359b2ed t/04refloop.t
-SHA1 c198788b69660b3002a526622bb190afb766b6ff t/05dsml.t
+SHA1 eba304e946aef7bbae1bfda78e9e2ddc6c423648 t/05dsml.t
SHA1 3a7eb17f2c49544f59afe23d3ec89a948a0ddcd0 t/06constant.t
SHA1 77b30ffef2402f438cf57a9af95f0358d50bb27e t/50populate.t
SHA1 60962ef635db1ddf1da912cdd063611fb9181846 t/51search.t
@@ -153,7 +153,7 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
-iEYEARECAAYFAki2ny0ACgkQR0BL4gbYw3QvRACghtDa7UVuxFTHNFAJFSjVZLU0
-eNUAn375ZIZ92Rfgyo0H2mDe8xuWStWM
-=57M5
+iEYEARECAAYFAkkGHugACgkQR0BL4gbYw3SHSgCeIixCAdfWByO+qroI84cdsj4Y
+PYUAnixrLKXplCiv2XJH8LJqdN+VdV8F
+=cNnE
-----END PGP SIGNATURE-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/perl-ldap-0.37/t/05dsml.t new/perl-ldap-0.39/t/05dsml.t
--- old/perl-ldap-0.37/t/05dsml.t 2008-08-28 14:52:15.000000000 +0200
+++ new/perl-ldap-0.39/t/05dsml.t 2008-10-27 21:05:58.000000000 +0100
@@ -28,7 +28,7 @@
@entry = $ldif->read;
open(FH,">$outfile1");
-
+binmode FH;
my $dsml = Net::LDAP::DSML->new(output => \*FH,pretty_print => 1);
$dsml->write_entry($_) for @entry;
@@ -40,6 +40,7 @@
# (don't rely on unpatched XML::SAX::Writer [e.g. Debian])
{
open(FH, "+<$outfile1");
+binmode FH;
local $/; # slurp mode
my $txt = <FH>;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-IO-Socket-SSL for openSUSE:Factory
checked in at Mon Feb 23 23:48:45 CET 2009.
--------
--- perl-IO-Socket-SSL/perl-IO-Socket-SSL.changes 2009-01-20 17:52:14.000000000 +0100
+++ perl-IO-Socket-SSL/perl-IO-Socket-SSL.changes 2009-02-23 16:50:51.000000000 +0100
@@ -1,0 +2,12 @@
+Mon Feb 23 16:49:53 CET 2009 - anicka(a)suse.cz
+
+- update to 1.23
+ * if neither SSL_ca_file nor SSL_ca_path are known (e.g not given
+ and the default values have no existing file|path) disable
+ checking of certificates, but carp about the problem
+ * new test certificates, the old ones expired and caused tests
+ to fail
+ * Net::SSLeay stores verify callbacks inside hash and never clears
+ them, so set verify callback to NULL in destroy of context
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
IO-Socket-SSL-1.20.tar.bz2
New:
----
IO-Socket-SSL-1.23.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-IO-Socket-SSL.spec ++++++
--- /var/tmp/diff_new_pack.c20143/_old 2009-02-23 23:42:45.000000000 +0100
+++ /var/tmp/diff_new_pack.c20143/_new 2009-02-23 23:42:45.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package perl-IO-Socket-SSL (Version 1.20)
+# spec file for package perl-IO-Socket-SSL (Version 1.23)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -20,7 +20,7 @@
Name: perl-IO-Socket-SSL
BuildRequires: perl-Net-SSLeay perl-libwww-perl
-Version: 1.20
+Version: 1.23
Release: 1
Provides: p_iossl
Obsoletes: p_iossl
@@ -77,6 +77,15 @@
/var/adm/perl-modules/%{name}
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 1.23
+ * if neither SSL_ca_file nor SSL_ca_path are known (e.g not given
+ and the default values have no existing file|path) disable
+ checking of certificates, but carp about the problem
+ * new test certificates, the old ones expired and caused tests
+ to fail
+ * Net::SSLeay stores verify callbacks inside hash and never clears
+ them, so set verify callback to NULL in destroy of context
* Tue Jan 20 2009 anicka(a)suse.cz
- update to 1.20
* only changes on test suite to make it ready for win32
++++++ IO-Socket-SSL-1.20.tar.bz2 -> IO-Socket-SSL-1.23.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/client-cert.pem new/IO-Socket-SSL-1.23/certs/client-cert.pem
--- old/IO-Socket-SSL-1.20/certs/client-cert.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/client-cert.pem 2009-02-23 10:01:23.000000000 +0100
@@ -2,22 +2,26 @@
Data:
Version: 3 (0x2)
Serial Number:
- 91:e9:4c:0b:24:c4:be:b9
+ cc:67:19:71:99:0b:95:9f
Signature Algorithm: md5WithRSAEncryption
Issuer: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=IO::Socket::SSL Test CA
Validity
- Not Before: Feb 21 16:21:20 2008 GMT
- Not After : Feb 20 16:21:20 2009 GMT
- Subject: C=US, ST=Some-State, O=IO::Socket::SSL Dummy Certificate, CN=IO::Socket::SSL Dummy Certificate
+ Not Before: Jan 1 00:00:01 2008 GMT
+ Not After : Feb 21 09:01:20 2019 GMT
+ Subject: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=client.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (512 bit)
- Modulus (512 bit):
- 00:cd:65:60:3d:8f:55:1f:7a:9e:87:a8:72:a0:53:
- 9d:e9:31:9e:bc:f1:27:d3:ba:e9:ab:ca:28:a5:b5:
- 48:a2:24:d8:ed:01:ec:ae:69:b1:91:7b:68:e6:d1:
- 15:57:7e:b0:06:62:33:d5:88:3e:fc:dc:fb:db:8a:
- c9:9b:bb:50:9f
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:a0:d6:95:63:e9:ea:ad:d1:08:04:b5:db:3f:33:
+ 01:72:7d:d5:e9:fe:99:3b:0a:8e:8a:0d:f3:99:1a:
+ 77:64:de:52:ef:3a:5a:5e:59:28:cb:b8:01:e2:45:
+ 68:84:91:f3:02:58:28:47:f3:1e:d9:06:83:cf:e8:
+ f9:52:d3:f4:ba:70:53:44:38:96:31:75:9b:8a:8b:
+ dd:1e:e5:ad:5c:ff:8c:c9:a3:57:ea:c5:7a:f6:c6:
+ ff:be:d5:53:d7:28:3f:2d:cd:eb:d2:2f:d0:73:16:
+ 7f:de:03:4b:37:3d:bc:58:36:4e:10:16:b7:9d:bc:
+ 56:fa:3f:f3:1d:92:b3:47:eb
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
@@ -25,37 +29,39 @@
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
- 69:77:17:7C:4F:DB:25:6C:3E:F6:FB:44:A2:FB:90:53:D9:5E:B0:E4
+ 25:CB:7F:57:18:FC:CE:7A:BD:5B:AE:EC:34:8D:5E:BC:2E:77:B2:30
X509v3 Authority Key Identifier:
- keyid:FB:58:E7:57:9D:8A:E9:C1:AF:D8:F0:58:89:E6:BE:56:9C:F7:BB:85
DirName:/C=DE/ST=Bayern/L=Muenchen/O=Whatever it is/CN=IO::Socket::SSL Test CA
- serial:91:E9:4C:0B:24:C4:BE:B6
+ serial:B2:B8:11:9C:1F:B2:35:92
+ X509v3 Key Usage:
+ Digital Signature, Non Repudiation, Key Encipherment
Signature Algorithm: md5WithRSAEncryption
- af:ec:f2:eb:96:45:dd:6f:fd:f4:50:5b:db:ee:88:e4:08:a3:
- 5b:b6:8a:12:b9:45:9e:bf:e7:80:7a:a6:74:c4:d8:4f:e6:1f:
- f9:ab:4a:06:aa:6c:8f:91:39:17:e5:b0:d9:69:c8:85:d4:a4:
- f3:f2:4a:cf:08:a3:c9:c5:10:42:58:79:47:de:07:48:ca:ac:
- 38:3d:60:37:61:38:fc:76:ad:52:93:49:06:80:3d:01:f3:3f:
- 9a:d1:ee:f7:91:2f:42:ed:9d:94:20:5a:40:de:4f:55:95:c6:
- 84:e8:89:70:59:91:06:8c:17:a7:0a:45:06:24:10:9a:83:10:
- be:fd
+ 12:73:3c:00:cd:b2:31:0a:3c:e7:81:4e:3c:11:80:4c:b4:a9:
+ af:aa:12:54:cb:6a:37:85:98:4c:ae:8e:85:ae:6d:95:07:c2:
+ a7:b8:6e:92:a7:eb:38:aa:e0:77:cb:4a:79:73:44:d3:6b:c1:
+ e4:10:85:4b:00:fc:4b:da:71:f2:ce:1a:3a:c6:b4:2c:53:9f:
+ 6a:af:e6:1e:96:cf:19:89:c7:61:c0:e0:27:72:68:f2:b1:35:
+ c8:cf:13:a6:0e:fc:89:04:14:54:93:f2:50:53:ba:be:30:ce:
+ 02:59:f9:03:86:ce:59:42:0c:46:de:9f:2f:51:e3:63:35:eb:
+ 59:51
-----BEGIN CERTIFICATE-----
-MIIDHTCCAoagAwIBAgIJAJHpTAskxL65MA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
+MIIDPTCCAqagAwIBAgIJAMxnGXGZC5WfMA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYD
VQQKEw5XaGF0ZXZlciBpdCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRl
-c3QgQ0EwHhcNMDgwMjIxMTYyMTIwWhcNMDkwMjIwMTYyMTIwWjB6MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKU29tZS1TdGF0ZTEqMCgGA1UEChMhSU86OlNvY2tldDo6
-U1NMIER1bW15IENlcnRpZmljYXRlMSowKAYDVQQDEyFJTzo6U29ja2V0OjpTU0wg
-RHVtbXkgQ2VydGlmaWNhdGUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAzWVgPY9V
-H3qeh6hyoFOd6TGevPEn07rpq8oopbVIoiTY7QHsrmmxkXto5tEVV36wBmIz1Yg+
-/Nz724rJm7tQnwIDAQABo4H8MIH5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W
-HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRpdxd8T9sl
-bD72+0Si+5BT2V6w5DCBngYDVR0jBIGWMIGTgBT7WOdXnYrpwa/Y8FiJ5r5WnPe7
-haFwpG4wbDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMI
-TXVlbmNoZW4xFzAVBgNVBAoTDldoYXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6
-U29ja2V0OjpTU0wgVGVzdCBDQYIJAJHpTAskxL62MA0GCSqGSIb3DQEBBAUAA4GB
-AK/s8uuWRd1v/fRQW9vuiOQIo1u2ihK5RZ6/54B6pnTE2E/mH/mrSgaqbI+RORfl
-sNlpyIXUpPPySs8Io8nFEEJYeUfeB0jKrDg9YDdhOPx2rVKTSQaAPQHzP5rR7veR
-L0LtnZQgWkDeT1WVxoToiXBZkQaMF6cKRQYkEJqDEL79
+c3QgQ0EwHhcNMDgwMTAxMDAwMDAxWhcNMTkwMjIxMDkwMTIwWjBhMQswCQYDVQQG
+EwJERTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UE
+ChMOV2hhdGV2ZXIgaXQgaXMxFTATBgNVBAMTDGNsaWVudC5sb2NhbDCBnzANBgkq
+hkiG9w0BAQEFAAOBjQAwgYkCgYEAoNaVY+nqrdEIBLXbPzMBcn3V6f6ZOwqOig3z
+mRp3ZN5S7zpaXlkoy7gB4kVohJHzAlgoR/Me2QaDz+j5UtP0unBTRDiWMXWbiovd
+HuWtXP+MyaNX6sV69sb/vtVT1yg/Lc3r0i/QcxZ/3gNLNz28WDZOEBa3nbxW+j/z
+HZKzR+sCAwEAAaOB8TCB7jAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
+U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUJct/Vxj8znq9W67s
+NI1evC53sjAwgYYGA1UdIwR/MH2hcKRuMGwxCzAJBgNVBAYTAkRFMQ8wDQYDVQQI
+EwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYDVQQKEw5XaGF0ZXZlciBp
+dCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRlc3QgQ0GCCQCyuBGcH7I1
+kjALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEEBQADgYEAEnM8AM2yMQo854FOPBGA
+TLSpr6oSVMtqN4WYTK6Oha5tlQfCp7hukqfrOKrgd8tKeXNE02vB5BCFSwD8S9px
+8s4aOsa0LFOfaq/mHpbPGYnHYcDgJ3Jo8rE1yM8Tpg78iQQUVJPyUFO6vjDOAln5
+A4bOWUIMRt6fL1HjYzXrWVE=
-----END CERTIFICATE-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/client-key.enc new/IO-Socket-SSL-1.23/certs/client-key.enc
--- old/IO-Socket-SSL-1.20/certs/client-key.enc 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/client-key.enc 2009-02-23 10:20:49.000000000 +0100
@@ -1,12 +1,18 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,A24532ADA3AB45E3
+DEK-Info: DES-EDE3-CBC,0CA6DC0624E21D6B
-sltzmMEb/cKphkOkMQsMJHyqc17pxXf3z3QrvktJRvZQtMU6dY0eisbW3gilU+80
-qgiMkkD9TEufYQ3oLRAF8hefS+iM+Mx3F5Ml5bhArXQBRN6Gd0QkepWnrrko8Y6N
-6uGT9ndJHhLyOArDWgWkzfuT7NEVoYrLhf8x6E43v/6By5GmBZs5mbwygYr6vpzZ
-6+KHgpVFYPNQvhJTKJTe2XO+kTQtOcYmrapTr6SG4i9i7x2Q21CGhum8492KA+3N
-+EvmGAp0MMwZVTuCRyquLRfF6/NsPANb97yWsz3pe05I/p8CSzwU7ivNQZA51pyx
-zlwzjoWElSzMTssIegcCctdjeTHhiFRfvW1YDinvXPiLfAjBOv37JDvLC6vclqev
-yPXtne0iOn8hZc0QAnWESAAPz6PE0jIecqcZkXKQHfc=
+xE7VmXhTbEBfa17Lahb0SlkB2XTs9dNLE9OfoaQWJTgn1xbq2fGTTZsvKWptK9fk
+bFPhKeE+ZsaYj3usEVpC96IUaaCV2jbIRoAocDe1GlmgnXJJGM9TWzbYG/F3Bquk
+4xc8wI0LCl4YBarVEfZAJn/m4jOGeTDGmfN7V9yaBB3naSLO+3fthxbuii2IqtY6
+xUDPGqpbFWwUlDz0k2OFaJAWo5M0MZ3HR6RU0oasP5vsecuIsJE9U82xkC0ycS8M
+oa8BzJ8caSjWkcN8j9TBtZmLOT/Sqo6UTmmXoJxUetUrPZ7snOx74b0gPrkxmoQf
+NiHRj4TSOdlGXXqYYXCHZOswZApUkvzfrmoqQtc69Bnk4vXt0VrqfOAP++yhcE14
+oOu9SxKq+AOev8FYwFdhKdN7+KMEY25c+RECFRDVDwGF2pCrij3iLPeUS2ajsLOB
+yzWVOOHEHuO2ntAupGvGrMizk/csb83FZ81tkiObtUk/hH9ZGR+EH4nIvnz/xfh9
+7pnVUnZw9It3vXOX61B7llBdpcTW4ylzWeZlCCk87jWDTpgQWCFXlphNfmF0ntqy
+Qoq7uiKN3OUIi/llAFI6au8nBpYB42m1a9G1c4Rj46nMllLTukWsQBRiJzKgs5Ci
+XDibdbz+IgB8I5SXEyLodOxcSFg9QjEhhPfbTXG+1PChwIborWIM/uVu8XjECt0I
+Ts2/q0X1sW2yX0q6WFQkfnvGjeEdHtcEW2CeVZmFaJpFLCofwL9YmYPY/age5mLT
+gCqlAv3xKcXLwWazHYv1J2nB8DAy76prVL7D5pZ5olJekcHRhvUVgw==
-----END RSA PRIVATE KEY-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/client-key.pem new/IO-Socket-SSL-1.23/certs/client-key.pem
--- old/IO-Socket-SSL-1.20/certs/client-key.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/client-key.pem 2009-02-23 10:01:50.000000000 +0100
@@ -1,9 +1,15 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBOQIBAAJBAM1lYD2PVR96noeocqBTnekxnrzxJ9O66avKKKW1SKIk2O0B7K5p
-sZF7aObRFVd+sAZiM9WIPvzc+9uKyZu7UJ8CAwEAAQJAdCtxWoAWCh7lSR8J7go9
-Fya8fGr9NrDR9xr5EHhPI30lmzpj1Tst2VRymN8ojUu/3AgBAOshpqS5Ve38o2mU
-yQIhAPd44uw37QTwmefTWV+REtaGHaRwbc5qemSV6WNpgei9AiEA1HlOzr1BxqCo
-ZwlizSn5ox8YdJ6LAOA+1GOkvOyV2osCIGT26w4Y2xiy2PfeII5+78KaQSm/vO0E
-QB8dknS+rQO5AiBwv6KjMGjsFyrl6mQkjOasuf6HO+51W4nbuLidjEoE+wIgN00d
-/WcCSyj8HlfLgHPe8ZlEyMe6Hq7LfX5lShUq0qI=
+MIICXQIBAAKBgQCg1pVj6eqt0QgEtds/MwFyfdXp/pk7Co6KDfOZGndk3lLvOlpe
+WSjLuAHiRWiEkfMCWChH8x7ZBoPP6PlS0/S6cFNEOJYxdZuKi90e5a1c/4zJo1fq
+xXr2xv++1VPXKD8tzevSL9BzFn/eA0s3PbxYNk4QFredvFb6P/MdkrNH6wIDAQAB
+AoGBAIODctwj5TUDex7+5KuktUY9BrEy8XCJjUvtZIaIUaA0+nOKr2H+XZFWgJPY
+VUIxZRdBpo5OiabD4Pwcb+H+VljgWzlfprt/wszFtOEC5uZS76GGfPrEuUmbXjoo
+rl4/w3z90+edsLeh8pXKYyyWcKxnZJQz2STfZ4Dz70+IKv6BAkEA1DLQG1ownEjo
+yAx6qG9F7eB8/2uDwc42xTwAmpf68zs6xajN0Kr0gBdyUH5IXzN3K2lIGgJ4/Kg9
+580egIOX0QJBAMIJvn2oGwj89vzO/DeMbh6oXFtRO7mSHtJHuE+ZG0F8MneQ5cB3
+PER1fgnHamFsc2VtH8VODGHqAmZTa6FgDvsCQBvlskZmTQ2+6BukyFtshZ0IbmaG
+FARewASeJtYsNOnVV5y03JoaX5qXeofqkkkx0vD6HmiM+qr802auKNxscIECQQC7
+FVIJLZADdoNc9OTRWiDChmml0gjXvz7gWC4o8OIKnYi7J4WdsFj3WKERJKg5Dquk
+WzaKsdnWfh2aM0xO56MJAkALg4BrhFoTcI2Mvq9EdJx+hHhK/8nlL2fiWIPk2Z9k
+Py76SO1hy3hv9uXPzhiftxtm+EOyqbNMmftx5knasrKP
-----END RSA PRIVATE KEY-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/my-ca.pem new/IO-Socket-SSL-1.23/certs/my-ca.pem
--- old/IO-Socket-SSL-1.20/certs/my-ca.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/my-ca.pem 2009-02-23 10:00:16.000000000 +0100
@@ -1,19 +1,15 @@
-----BEGIN CERTIFICATE-----
-MIIDKDCCApGgAwIBAgIJAJHpTAskxL62MA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYD
-VQQKEw5XaGF0ZXZlciBpdCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRl
-c3QgQ0EwHhcNMDgwMjIxMTYxNzE1WhcNMTgwMjE4MTYxNzE1WjBsMQswCQYDVQQG
-EwJERTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UE
-ChMOV2hhdGV2ZXIgaXQgaXMxIDAeBgNVBAMTF0lPOjpTb2NrZXQ6OlNTTCBUZXN0
-IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZd3gL4A+oOGVKwfYR7pIC
-2UKv38UkiSeHw8EU8b5sqPOXqYmjoeE1XgWeio2wIsicRo9IlODesGAAzZAmJpvC
-LUMKcp9IND5IVNSdYR0l6buJJwIlsjPkChX6wWUSK0YWIecwUV8dty5b7Mpx01au
-ZMVm6L7qt7J2HV5aXkz5mQIDAQABo4HRMIHOMB0GA1UdDgQWBBT7WOdXnYrpwa/Y
-8FiJ5r5WnPe7hTCBngYDVR0jBIGWMIGTgBT7WOdXnYrpwa/Y8FiJ5r5WnPe7haFw
-pG4wbDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMITXVl
-bmNoZW4xFzAVBgNVBAoTDldoYXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6U29j
-a2V0OjpTU0wgVGVzdCBDQYIJAJHpTAskxL62MAwGA1UdEwQFMAMBAf8wDQYJKoZI
-hvcNAQEEBQADgYEATrXcn5Act14ia1elRAuTbpAC7vIj4Jkyxmg1sFqrHyrpH6AX
-R4vTO2gl3DypYnVfqcGJWQqQOYlgyJYYzFq3RYDX9fhGpQigRUXqdDeTqJS/NTa4
-x8QYIuS8+zY8jXWGdaEdo2AslqSawjGJSE9nxG1d8AO5YktLWM7YVJVgi+o=
+MIICTzCCAbgCCQCyuBGcH7I1kjANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJE
+RTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UEChMO
+V2hhdGV2ZXIgaXQgaXMxIDAeBgNVBAMTF0lPOjpTb2NrZXQ6OlNTTCBUZXN0IENB
+MB4XDTA5MDIyMzA4NTc0N1oXDTA5MDMyNTA4NTc0N1owbDELMAkGA1UEBhMCREUx
+DzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMITXVlbmNoZW4xFzAVBgNVBAoTDldo
+YXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6U29ja2V0OjpTU0wgVGVzdCBDQTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArLYg3GfTUe+aPdVA5U29JVXQUHkx
+9FHOZWZ/8j9hSHGVwcSp2Y4ChZt0K26c7NYUg8mUTJJN9/i+fmVH8EECymzr+68W
+scpY+ja/YECbXe9a0RPz+iOwxJx14beraiMERkhmEAhZdCBHhgTCdeUVW3eMX8ML
+aiIr0xsAZ40peekCAwEAATANBgkqhkiG9w0BAQUFAAOBgQCVDgfz+fXBxtjiRHPB
+d9s3FPeiUJd/owpuvS8SSg+Jbm1KLmKnstqLQaKoz2TktiRUt0361d4PTUEZ7GHl
+3+t6HP0+/lokrBPhEGzuzHzJnfDcUIMvS2Uo7trwhLxl0tEbbVsmqigJOu3uxR14
+6CG7rf+dyth3L0jsEQOXc0Jeyw==
-----END CERTIFICATE-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/server-cert.pem new/IO-Socket-SSL-1.23/certs/server-cert.pem
--- old/IO-Socket-SSL-1.20/certs/server-cert.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/server-cert.pem 2009-02-23 09:59:03.000000000 +0100
@@ -2,22 +2,26 @@
Data:
Version: 3 (0x2)
Serial Number:
- 91:e9:4c:0b:24:c4:be:b8
+ cc:67:19:71:99:0b:95:9e
Signature Algorithm: md5WithRSAEncryption
Issuer: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=IO::Socket::SSL Test CA
Validity
- Not Before: Feb 21 16:19:34 2008 GMT
- Not After : Feb 20 16:19:34 2009 GMT
- Subject: C=US, ST=Some-State, O=IO::Socket::SSL Dummy Server Certificate, CN=IO::Socket::SSL Dummy Server Certificate
+ Not Before: Jan 1 00:00:01 2008 GMT
+ Not After : Feb 21 08:58:59 2019 GMT
+ Subject: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=server.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (512 bit)
- Modulus (512 bit):
- 00:9f:27:5f:4a:8a:35:4a:7f:3f:d1:80:25:96:26:
- 0a:da:af:9a:6d:bc:23:ba:71:91:5b:40:d1:2d:2b:
- c8:60:2a:ef:e9:54:e5:a2:64:0a:57:90:35:bf:cd:
- b6:36:f3:25:53:68:65:2c:d8:d0:f9:b7:f3:7f:2e:
- f8:e2:3d:e0:dd
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:a4:28:c9:39:f8:79:11:b0:3f:1e:28:1e:5d:26:
+ 73:30:05:52:ff:b7:a4:97:32:7a:6a:b7:2b:96:08:
+ 85:e4:60:d5:b2:54:a6:b2:ae:b0:22:23:89:92:d4:
+ 04:b4:a7:79:83:8f:0b:e7:a4:a6:a1:78:57:88:ae:
+ a3:42:8e:28:8d:fa:c1:d8:12:bc:59:39:4b:15:5b:
+ f6:f2:e9:34:56:ca:a8:8c:c5:f6:cf:fd:e3:0f:7d:
+ 7e:14:16:86:ac:b2:e9:13:04:85:26:43:60:2d:d2:
+ a4:d6:b6:6b:fe:14:05:6c:ef:b9:7f:80:13:ab:0f:
+ 73:b5:be:9e:68:5a:43:64:41
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
@@ -25,37 +29,39 @@
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
- 76:C0:1F:1B:E5:AE:13:92:1A:7A:DA:07:CF:B9:37:ED:47:1B:DB:A2
+ 62:45:C2:4B:A4:8A:0D:6E:40:21:FA:60:21:C2:EF:D7:E7:D5:1D:98
X509v3 Authority Key Identifier:
- keyid:FB:58:E7:57:9D:8A:E9:C1:AF:D8:F0:58:89:E6:BE:56:9C:F7:BB:85
DirName:/C=DE/ST=Bayern/L=Muenchen/O=Whatever it is/CN=IO::Socket::SSL Test CA
- serial:91:E9:4C:0B:24:C4:BE:B6
+ serial:B2:B8:11:9C:1F:B2:35:92
+ X509v3 Key Usage:
+ Digital Signature, Non Repudiation, Key Encipherment
Signature Algorithm: md5WithRSAEncryption
- 4c:23:0c:6d:ad:36:0c:47:b5:bd:1c:70:44:76:a6:e7:8f:81:
- e1:83:55:f0:36:92:a3:34:35:84:a5:55:15:ff:2b:69:a2:f9:
- 37:65:0b:4e:78:46:5b:68:57:d9:5f:f0:36:85:6d:c8:fa:9d:
- e5:f9:33:d6:d8:aa:ad:44:e1:2a:e3:73:23:4b:a7:85:a4:6c:
- c0:ef:71:4a:b5:ef:21:fc:04:ff:9e:a4:cd:f3:64:ab:7e:47:
- 73:16:90:30:47:ed:15:ba:4a:4b:df:d4:9d:7c:ba:f4:3b:cf:
- 27:2c:83:71:94:ca:20:a9:19:9b:03:e5:4d:33:4a:1d:7c:8f:
- 8a:e3
+ 63:c5:72:55:26:ca:d7:49:0d:21:35:63:e8:db:4c:7f:dd:5f:
+ 49:be:5e:8d:7c:b0:32:21:e7:f8:28:7f:d8:4f:92:0a:fb:00:
+ 83:c4:54:18:ce:5e:f9:3d:f1:0f:37:a3:48:0b:a8:64:e2:90:
+ 3b:24:71:37:3f:e9:1e:ac:c3:2b:c1:38:32:e8:7f:78:60:87:
+ 80:ed:a9:70:88:ba:7e:34:fb:ea:e0:fe:0e:b6:86:01:26:bf:
+ 97:c7:0a:48:4a:87:ae:75:fd:cc:da:0d:f6:a7:fb:c8:f0:9d:
+ 36:c8:e7:c8:a1:72:8b:a5:87:e4:38:7b:58:c4:d1:b3:ff:d0:
+ b2:c4
-----BEGIN CERTIFICATE-----
-MIIDLDCCApWgAwIBAgIJAJHpTAskxL64MA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
+MIIDPTCCAqagAwIBAgIJAMxnGXGZC5WeMA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYD
VQQKEw5XaGF0ZXZlciBpdCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRl
-c3QgQ0EwHhcNMDgwMjIxMTYxOTM0WhcNMDkwMjIwMTYxOTM0WjCBiDELMAkGA1UE
-BhMCVVMxEzARBgNVBAgTClNvbWUtU3RhdGUxMTAvBgNVBAoTKElPOjpTb2NrZXQ6
-OlNTTCBEdW1teSBTZXJ2ZXIgQ2VydGlmaWNhdGUxMTAvBgNVBAMTKElPOjpTb2Nr
-ZXQ6OlNTTCBEdW1teSBTZXJ2ZXIgQ2VydGlmaWNhdGUwXDANBgkqhkiG9w0BAQEF
-AANLADBIAkEAnydfSoo1Sn8/0YAlliYK2q+abbwjunGRW0DRLSvIYCrv6VTlomQK
-V5A1v822NvMlU2hlLNjQ+bfzfy744j3g3QIDAQABo4H8MIH5MAkGA1UdEwQCMAAw
-LAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0G
-A1UdDgQWBBR2wB8b5a4Tkhp62gfPuTftRxvbojCBngYDVR0jBIGWMIGTgBT7WOdX
-nYrpwa/Y8FiJ5r5WnPe7haFwpG4wbDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJh
-eWVybjERMA8GA1UEBxMITXVlbmNoZW4xFzAVBgNVBAoTDldoYXRldmVyIGl0IGlz
-MSAwHgYDVQQDExdJTzo6U29ja2V0OjpTU0wgVGVzdCBDQYIJAJHpTAskxL62MA0G
-CSqGSIb3DQEBBAUAA4GBAEwjDG2tNgxHtb0ccER2puePgeGDVfA2kqM0NYSlVRX/
-K2mi+TdlC054RltoV9lf8DaFbcj6neX5M9bYqq1E4SrjcyNLp4WkbMDvcUq17yH8
-BP+epM3zZKt+R3MWkDBH7RW6Skvf1J18uvQ7zycsg3GUyiCpGZsD5U0zSh18j4rj
+c3QgQ0EwHhcNMDgwMTAxMDAwMDAxWhcNMTkwMjIxMDg1ODU5WjBhMQswCQYDVQQG
+EwJERTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UE
+ChMOV2hhdGV2ZXIgaXQgaXMxFTATBgNVBAMTDHNlcnZlci5sb2NhbDCBnzANBgkq
+hkiG9w0BAQEFAAOBjQAwgYkCgYEApCjJOfh5EbA/HigeXSZzMAVS/7eklzJ6arcr
+lgiF5GDVslSmsq6wIiOJktQEtKd5g48L56SmoXhXiK6jQo4ojfrB2BK8WTlLFVv2
+8uk0VsqojMX2z/3jD31+FBaGrLLpEwSFJkNgLdKk1rZr/hQFbO+5f4ATqw9ztb6e
+aFpDZEECAwEAAaOB8TCB7jAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
+U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUYkXCS6SKDW5AIfpg
+IcLv1+fVHZgwgYYGA1UdIwR/MH2hcKRuMGwxCzAJBgNVBAYTAkRFMQ8wDQYDVQQI
+EwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYDVQQKEw5XaGF0ZXZlciBp
+dCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRlc3QgQ0GCCQCyuBGcH7I1
+kjALBgNVHQ8EBAMCBeAwDQYJKoZIhvcNAQEEBQADgYEAY8VyVSbK10kNITVj6NtM
+f91fSb5ejXywMiHn+Ch/2E+SCvsAg8RUGM5e+T3xDzejSAuoZOKQOyRxNz/pHqzD
+K8E4Muh/eGCHgO2pcIi6fjT76uD+DraGASa/l8cKSEqHrnX9zNoN9qf7yPCdNsjn
+yKFyi6WH5Dh7WMTRs//QssQ=
-----END CERTIFICATE-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/server-key.enc new/IO-Socket-SSL-1.23/certs/server-key.enc
--- old/IO-Socket-SSL-1.20/certs/server-key.enc 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/server-key.enc 2009-02-23 09:58:54.000000000 +0100
@@ -1,12 +1,18 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,25B674CF19D8A5D7
+DEK-Info: DES-EDE3-CBC,52AB5E09B9FC2D5F
-fLLIyUYuJLP0YzaBTMrdHSN9ROApAIyDdZNUM3qOW19IfER87Rw90pTJLTIe2r9d
-tDIBY0w3MCYHOKEC+g9R8nsgLJNEkXG/Zi6fbhufnPAk343X8mDm+hjtQVzZONVc
-VE8v4EA6qYHm54y/UlXnK9fJ9OhFru+btueQ+8z2pYZJEZ9ktAEJBj+jeD9nOcw4
-lZ2vgpGwyj5pzNSS/4QlujRSB4gddPlJyig+STN2iom7BetPUVJg0XOW74ezZSr9
-WU/c8Ghbg/efzah56WUYzBdIhXjpQr5zDmXi6uj8zCLSSFjdR48KQVfbXULoeqeA
-8Nru2tXv34C5UdDgOkKbZSHar0n3o6t73B3WS9i90/1A4VLHvCvNxoBet7JdkEx8
-yv0b3A6wBHtAI5LRryaHAVN7bkIpXCfXGeMGFoCUpdO2jCeg/j54AQ==
+7AfoKE7FDzVgUMUMHPrfghRO4LZuhdEHr28vMMXrLvWSfdacGBohXemsMkx+nTe9
+6MKJV56+nKujrzEA2RUPan9dXEg0PhCnShHZvExq6TY371EMRMNlbp+WMh7jZdV2
+3hYHaEWbXAe/FNXhesqNgKsq5Z0m5fvsr/lmyg9pRBcoQt5F80T1+rUuOoQ0Bgw5
+mBFHjFfDe5ClXs4hUovprDqtYaJVSbMRda1+lNUU+3uBs4Tq3K66QPTLxSWj7nXJ
+U1UK+6fuWx+DxOPf02z7SPjtql/MYMAa7k0NNnOlW2Jh1462mFt5Baz8ppHh0Zlu
+BiyqyR3ePiRCfGuXviloz1FhNrM/lf5nVJCbAVn6qBq9Bjm2voufSUoNcGee/Vod
+fDNUsPS/D80CI+BHOxr0IyYV6bS6CdiInijGOYp7WGW5GqbZ0LgugXL9Zp6C+s3I
+osYrjE02vxAxSm0R06XpCvnb4WqvG8ysnXOgZephsmXSWiOCDOUb8rZ3pfrQFohF
+H7Z0nBacNft8dh3pMYD18GqoTVD88KaZ8Y3TsmSnMHAZmOezApQN2j+CL0u+N5XX
+tUma9Jf45fjF6n3Uzkb1LDLJ7Uv7WpKf49cddVhb85kDQBIJbEgpDDMspS7TqaEt
+oduT/TYWfUkrhibJ8Db5yN2rJ/z8U68PiSzOu+0+b33sdzQeQJpmjAQBUOGgZHZS
+aJpjtT+F11vST2X1IXsQYDKIORSJQ5CeyXdLgPYB4oRg6oWLi/EBYVVl8nwhSEgb
+4HQHm9jAf7oO1tbCInbIEhERjXT5yIgwnWYl61CdstO3/qpwThazhw==
-----END RSA PRIVATE KEY-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/server-key.pem new/IO-Socket-SSL-1.23/certs/server-key.pem
--- old/IO-Socket-SSL-1.20/certs/server-key.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/server-key.pem 2009-02-23 09:59:59.000000000 +0100
@@ -1,9 +1,15 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIBPAIBAAJBAJ8nX0qKNUp/P9GAJZYmCtqvmm28I7pxkVtA0S0ryGAq7+lU5aJk
-CleQNb/NtjbzJVNoZSzY0Pm3838u+OI94N0CAwEAAQJAf/DavcVVCco5t2TY0ldK
-qno4Hrb70cmyHDWC8lkb/5HAGbCGxpsstXxVKczRO201vcFUKm6PX5moUnFCINpg
-UQIhAM+ooHbD0eLL0K6limEnW7GId/+DFI/6KFXk2Nzm//XXAiEAxDQbWQvZS8DO
-HJ5JV8flvMhH30KLeH+zpsvBjWJK4GsCIQCUF7woNsquJZBznNctJjZ8S8jYThES
-BONTLluCXrNYDQIhAJFnsHDQqCxM6jMpV193pJnAsAsUbPpTYZeWX43hL26bAiEA
-jNB3PPNvTNr5tICkO/lMZcN87eUn4ZAtrNzCVF5ilEo=
+MIICXgIBAAKBgQCkKMk5+HkRsD8eKB5dJnMwBVL/t6SXMnpqtyuWCIXkYNWyVKay
+rrAiI4mS1AS0p3mDjwvnpKaheFeIrqNCjiiN+sHYErxZOUsVW/by6TRWyqiMxfbP
+/eMPfX4UFoassukTBIUmQ2At0qTWtmv+FAVs77l/gBOrD3O1vp5oWkNkQQIDAQAB
+AoGBAJISaNxYqQKAXemrsTkaGa1FT5GUC7UuiZej3fjnJJ0PPZgtkxe0Ma5vCN/K
+IVXPIGVcSC+bZ1qPBvTs0QFMFfCzIL7KEuRKQX/LNVL2XzUf7Mfwscmvm5Hf+kpf
+CHHJZ8bnNTLhHUXCll2ll1qeFAubH6xmofGhTX7976Z3tCUBAkEA2QZMp1ep86sY
+150HLGy4gwMR92skSM0YmouR1xQlS5s6PJh6wdbE76qinwnRUFirxeaIE3Iky64y
+x5bndX4F6QJBAMGkAacfk9/Fn/4slxoZV6jLdiWmlDlkIf9Ao2T1rWBp9U1S1uul
+7mjitTThCpZXkOVc3QW0VF0qmbB/rdBNfJkCQQDRHr7SKSi8gUuox8jXx9NrepPf
+Y0BNXkOs93wKUYE2f1b4eL0g9wBBKJ0WvnERCMBMK71Hb5+BHFQV+pUBo/OxAkAT
+N5uSYmfihVJjfzlftbQlZEvNYMLFD1LwahHNKzSRpPJbQiViLY2DizxAizTpxrby
+jEzDDCpzNI8cHQ+65HXBAkEApXrXU7uaRstGaDVJtOzDNPiLbim0vwitHXhZ8WQG
+nmvHjb5hJ3QM/AWyTlKXueFPVek1fP+Nl+BTE71IS5dc3Q==
-----END RSA PRIVATE KEY-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/server-wildcard.pem new/IO-Socket-SSL-1.23/certs/server-wildcard.pem
--- old/IO-Socket-SSL-1.20/certs/server-wildcard.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/server-wildcard.pem 2009-02-23 10:02:56.000000000 +0100
@@ -2,26 +2,26 @@
Data:
Version: 3 (0x2)
Serial Number:
- 91:e9:4c:0b:24:c4:be:bc
+ cc:67:19:71:99:0b:95:a0
Signature Algorithm: md5WithRSAEncryption
Issuer: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=IO::Socket::SSL Test CA
Validity
- Not Before: Feb 22 08:06:33 2008 GMT
- Not After : Feb 21 08:06:33 2009 GMT
+ Not Before: Jan 1 00:00:01 2008 GMT
+ Not After : Feb 21 09:02:40 2019 GMT
Subject: C=DE, ST=Bayern, L=Muenchen, O=Whatever it is, CN=server.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
- 00:ed:89:20:5e:f3:e1:6c:62:f8:11:84:2b:39:88:
- da:89:fc:c3:b9:de:a5:7c:fd:f2:40:94:97:c7:7e:
- 46:22:b9:13:50:79:91:50:30:f7:dd:53:9b:21:09:
- 30:c9:37:3d:dc:49:1b:1c:08:5e:7f:16:d5:03:d5:
- 83:17:76:06:d6:e6:35:a6:1b:b2:aa:4e:0c:8e:71:
- 16:1c:46:ff:3d:32:9a:43:a6:b0:a0:32:70:b6:59:
- 73:85:3e:5c:3b:c8:22:09:60:cf:57:ca:78:f2:be:
- db:84:2c:1b:e1:d4:a8:46:82:d1:7b:83:69:a9:cf:
- c4:0e:6f:33:19:7c:85:fa:bd
+ 00:cb:21:e4:f9:1a:32:b8:13:70:f7:9b:c1:a4:ec:
+ b8:d2:b3:98:f5:54:7c:ff:4d:7b:fe:6a:de:ff:60:
+ 69:a5:dd:27:59:29:cc:3e:70:4d:33:e5:50:13:c8:
+ fc:14:c1:de:2b:37:8d:de:b4:27:33:06:0d:af:6e:
+ f8:9a:37:e5:1c:70:20:db:55:fe:01:2b:c6:c2:38:
+ 63:1a:ec:93:9d:ce:ad:94:67:f2:68:0b:e8:27:ae:
+ e6:06:8e:5a:44:6f:78:00:9a:8f:15:81:6f:5c:71:
+ 68:ff:1c:d7:a6:ea:a4:a2:41:e0:c6:4a:b6:67:d2:
+ 14:36:e4:53:b9:98:8d:f4:bd
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
@@ -29,59 +29,58 @@
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
- 25:32:75:FD:36:10:15:AB:8A:E6:DC:82:D6:18:62:45:70:E5:65:6B
+ 30:68:75:C1:78:51:67:E6:71:03:40:19:9A:02:F0:CE:E2:93:BB:D2
X509v3 Authority Key Identifier:
- keyid:FB:58:E7:57:9D:8A:E9:C1:AF:D8:F0:58:89:E6:BE:56:9C:F7:BB:85
DirName:/C=DE/ST=Bayern/L=Muenchen/O=Whatever it is/CN=IO::Socket::SSL Test CA
- serial:91:E9:4C:0B:24:C4:BE:B6
+ serial:B2:B8:11:9C:1F:B2:35:92
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Alternative Name:
DNS:*.server.local, IP Address:127.0.0.1, DNS:www*.other.local, DNS:smtp.mydomain.local, DNS:xn--lwe-sna.idntest.local
Signature Algorithm: md5WithRSAEncryption
- 21:2a:b1:ea:9c:a8:a1:f0:9c:8e:1e:0d:f2:07:85:94:dd:81:
- 56:96:06:20:d3:dd:c2:14:59:56:d7:02:91:22:bb:e4:45:c4:
- eb:f3:41:4f:16:38:26:ed:cc:ea:11:4c:13:97:15:29:eb:2f:
- 15:4c:a3:b0:2b:7a:3e:c4:00:e3:a6:17:88:31:ea:9f:bd:95:
- 94:8e:c1:a4:73:93:8a:9f:6b:99:10:d7:40:47:49:17:1f:0d:
- d1:51:b1:fa:86:ee:61:5d:c8:7b:9e:67:3e:ae:77:67:10:38:
- 83:ec:5e:47:24:c1:06:0b:2c:e0:76:00:11:f0:55:55:15:6f:
- e6:16
+ 85:aa:38:ba:74:b1:2b:13:d7:cd:b9:69:ef:56:5d:c4:0f:35:
+ ee:8d:07:38:85:c8:4d:9c:2a:af:67:0d:3b:82:db:16:16:89:
+ 21:bb:56:68:ba:d7:5b:3c:c0:98:cd:a6:87:8a:35:61:c0:45:
+ 78:dd:c8:8d:b5:6e:40:45:e1:18:0e:6b:07:d6:ed:09:f5:84:
+ 68:d2:50:87:90:b8:99:8e:ae:04:d3:3d:3a:c3:13:33:8b:30:
+ c1:68:5a:a2:76:a3:30:d1:5a:b8:97:45:01:70:d8:de:81:ce:
+ fc:98:89:6d:e0:9a:49:6f:00:42:91:52:b7:22:79:f2:9f:6f:
+ 63:56
-----BEGIN CERTIFICATE-----
-MIIDujCCAyOgAwIBAgIJAJHpTAskxL68MA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
+MIIDojCCAwugAwIBAgIJAMxnGXGZC5WgMA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYD
VQQKEw5XaGF0ZXZlciBpdCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRl
-c3QgQ0EwHhcNMDgwMjIyMDgwNjMzWhcNMDkwMjIxMDgwNjMzWjBhMQswCQYDVQQG
+c3QgQ0EwHhcNMDgwMTAxMDAwMDAxWhcNMTkwMjIxMDkwMjQwWjBhMQswCQYDVQQG
EwJERTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UE
ChMOV2hhdGV2ZXIgaXQgaXMxFTATBgNVBAMTDHNlcnZlci5sb2NhbDCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA7YkgXvPhbGL4EYQrOYjaifzDud6lfP3yQJSX
-x35GIrkTUHmRUDD33VObIQkwyTc93EkbHAhefxbVA9WDF3YG1uY1phuyqk4MjnEW
-HEb/PTKaQ6awoDJwtllzhT5cO8giCWDPV8p48r7bhCwb4dSoRoLRe4Npqc/EDm8z
-GXyF+r0CAwEAAaOCAW0wggFpMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9w
-ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBQlMnX9NhAVq4rm
-3ILWGGJFcOVlazCBngYDVR0jBIGWMIGTgBT7WOdXnYrpwa/Y8FiJ5r5WnPe7haFw
-pG4wbDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMITXVl
-bmNoZW4xFzAVBgNVBAoTDldoYXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6U29j
-a2V0OjpTU0wgVGVzdCBDQYIJAJHpTAskxL62MAsGA1UdDwQEAwIF4DBhBgNVHREE
-WjBYgg4qLnNlcnZlci5sb2NhbIcEfwAAAYIQd3d3Ki5vdGhlci5sb2NhbIITc210
-cC5teWRvbWFpbi5sb2NhbIIZeG4tLWx3ZS1zbmEuaWRudGVzdC5sb2NhbDANBgkq
-hkiG9w0BAQQFAAOBgQAhKrHqnKih8JyOHg3yB4WU3YFWlgYg093CFFlW1wKRIrvk
-RcTr80FPFjgm7czqEUwTlxUp6y8VTKOwK3o+xADjpheIMeqfvZWUjsGkc5OKn2uZ
-ENdAR0kXHw3RUbH6hu5hXch7nmc+rndnEDiD7F5HJMEGCyzgdgAR8FVVFW/mFg==
+hkiG9w0BAQEFAAOBjQAwgYkCgYEAyyHk+RoyuBNw95vBpOy40rOY9VR8/017/mre
+/2Bppd0nWSnMPnBNM+VQE8j8FMHeKzeN3rQnMwYNr274mjflHHAg21X+ASvGwjhj
+GuyTnc6tlGfyaAvoJ67mBo5aRG94AJqPFYFvXHFo/xzXpuqkokHgxkq2Z9IUNuRT
+uZiN9L0CAwEAAaOCAVUwggFRMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9w
+ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBQwaHXBeFFn5nED
+QBmaAvDO4pO70jCBhgYDVR0jBH8wfaFwpG4wbDELMAkGA1UEBhMCREUxDzANBgNV
+BAgTBkJheWVybjERMA8GA1UEBxMITXVlbmNoZW4xFzAVBgNVBAoTDldoYXRldmVy
+IGl0IGlzMSAwHgYDVQQDExdJTzo6U29ja2V0OjpTU0wgVGVzdCBDQYIJALK4EZwf
+sjWSMAsGA1UdDwQEAwIF4DBhBgNVHREEWjBYgg4qLnNlcnZlci5sb2NhbIcEfwAA
+AYIQd3d3Ki5vdGhlci5sb2NhbIITc210cC5teWRvbWFpbi5sb2NhbIIZeG4tLWx3
+ZS1zbmEuaWRudGVzdC5sb2NhbDANBgkqhkiG9w0BAQQFAAOBgQCFqji6dLErE9fN
+uWnvVl3EDzXujQc4hchNnCqvZw07gtsWFokhu1ZoutdbPMCYzaaHijVhwEV43ciN
+tW5AReEYDmsH1u0J9YRo0lCHkLiZjq4E0z06wxMzizDBaFqidqMw0Vq4l0UBcNje
+gc78mIlt4JpJbwBCkVK3Innyn29jVg==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDtiSBe8+FsYvgRhCs5iNqJ/MO53qV8/fJAlJfHfkYiuRNQeZFQ
-MPfdU5shCTDJNz3cSRscCF5/FtUD1YMXdgbW5jWmG7KqTgyOcRYcRv89MppDprCg
-MnC2WXOFPlw7yCIJYM9XynjyvtuELBvh1KhGgtF7g2mpz8QObzMZfIX6vQIDAQAB
-AoGAMC0br6ZvFfiMr6DK04R6LnphiBUsI0muFIMOtZtaxjgbPrspScZkvzLxx6WB
-i430sfTx1qGr6MLMuVZYnC2H/THrLkMUvZe8hFmwqCvM3/fkupFao+p+2mOcc6hq
-hs+J67/B/YC3DQmrz3vN8nEENGgXuYV8L0cEHW8RYGJYHNECQQD9SX+P0OyaBd9P
-6J/ivEm3M3Bfii672OyQdkOic77iEnEiSq08YY7/vhVuTe29rNRNz45VXQY02iB0
-80BTfwrXAkEA8BRwOqADkXjanTDW+wGga105n1YbFLNGJ8T0efgQitU2htL9jQCN
-aR+RQyGTCnNx+GAdJtoWQRklTqE8ZEKoiwJAa4PGZRrPRDYX68iYDdvVArIQEk4K
-tmxHRq8c2Jl/PmGLqn2+eXIEDGT4neDweOIjIIBpL60UFF0/B8W12XuE8wJBAKPQ
-bluyP30Nh63mW2peS8W2kNDmAgh34xDT1TU8TJ1OqqwIX7XMgLEQNyAlUp249DVT
-79BI0xKMQ+aJIhoPWc0CQQDNTZkPN0Evpz07Y/W7EHTiiGrQ4Ta9z32r6Q6dPqK9
-l/V2WlS+zGdrnyGf6TrWuAbZv235pr5kYuKuZeNzXkch
+MIICXQIBAAKBgQDLIeT5GjK4E3D3m8Gk7LjSs5j1VHz/TXv+at7/YGml3SdZKcw+
+cE0z5VATyPwUwd4rN43etCczBg2vbviaN+UccCDbVf4BK8bCOGMa7JOdzq2UZ/Jo
+C+gnruYGjlpEb3gAmo8VgW9ccWj/HNem6qSiQeDGSrZn0hQ25FO5mI30vQIDAQAB
+AoGAeGAkpa3twoHa3xERRx/1Qv+lNDUWQeD0CsfgUGwdD2qoJ8GKRLIePhO1SZRA
+NjjQ5MFuNDyEQktjDsRvVEytWweArYeZ2eIordoQi9wy3yGkRY1B767Yossv1/QT
+ElCXFvsH7B0m/qKu21XLxK/D8KobtEqvVonVSya+zGBCPO0CQQDqsg8FUnxNk+HV
+R58s2PJLyN7i0kdhtJTKMU63NIRsE89dnT9GWxZTB7xjT7VfL4FuRlif4MZv4bM0
+lhcGyh1vAkEA3ZJcH5RW7kCWSsSyvPnDWZSyxI9yo9uyPpQzWUeaKoy6LBjYZHDr
+xN5evdWuqz60aCFo3ARqnndFo5YJxkbSkwJBAKno2sMJooAvbbGQtoYrUc7Xz7T6
+cz8jEw0GgWxVEwGDnf6yFtsCmrjlwtdLH42XwOZq+0JT4pWhGrIZbvY1YPUCQHRl
+eresOa6Xh1xn0G2t142rq+3OXa7urshpGkCAeOB5ZSPdOXAqUfDt0F9xbXzQR/2b
+73YFa+0rQw4Yt7HNarkCQQDFLSjquUHjmuRGAXGdCpGPzl1r+xEUbcK5xlnvmcAf
+Q5w/tJ4QoQQiJWztiKx5Jk4xqrt6FA0vgknQjRtsKQEG
-----END RSA PRIVATE KEY-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/certs/test-ca.pem new/IO-Socket-SSL-1.23/certs/test-ca.pem
--- old/IO-Socket-SSL-1.20/certs/test-ca.pem 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/certs/test-ca.pem 2009-02-23 10:00:18.000000000 +0100
@@ -1,19 +1,15 @@
-----BEGIN CERTIFICATE-----
-MIIDKDCCApGgAwIBAgIJAJHpTAskxL62MA0GCSqGSIb3DQEBBAUAMGwxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZCYXllcm4xETAPBgNVBAcTCE11ZW5jaGVuMRcwFQYD
-VQQKEw5XaGF0ZXZlciBpdCBpczEgMB4GA1UEAxMXSU86OlNvY2tldDo6U1NMIFRl
-c3QgQ0EwHhcNMDgwMjIxMTYxNzE1WhcNMTgwMjE4MTYxNzE1WjBsMQswCQYDVQQG
-EwJERTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UE
-ChMOV2hhdGV2ZXIgaXQgaXMxIDAeBgNVBAMTF0lPOjpTb2NrZXQ6OlNTTCBUZXN0
-IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZd3gL4A+oOGVKwfYR7pIC
-2UKv38UkiSeHw8EU8b5sqPOXqYmjoeE1XgWeio2wIsicRo9IlODesGAAzZAmJpvC
-LUMKcp9IND5IVNSdYR0l6buJJwIlsjPkChX6wWUSK0YWIecwUV8dty5b7Mpx01au
-ZMVm6L7qt7J2HV5aXkz5mQIDAQABo4HRMIHOMB0GA1UdDgQWBBT7WOdXnYrpwa/Y
-8FiJ5r5WnPe7hTCBngYDVR0jBIGWMIGTgBT7WOdXnYrpwa/Y8FiJ5r5WnPe7haFw
-pG4wbDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMITXVl
-bmNoZW4xFzAVBgNVBAoTDldoYXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6U29j
-a2V0OjpTU0wgVGVzdCBDQYIJAJHpTAskxL62MAwGA1UdEwQFMAMBAf8wDQYJKoZI
-hvcNAQEEBQADgYEATrXcn5Act14ia1elRAuTbpAC7vIj4Jkyxmg1sFqrHyrpH6AX
-R4vTO2gl3DypYnVfqcGJWQqQOYlgyJYYzFq3RYDX9fhGpQigRUXqdDeTqJS/NTa4
-x8QYIuS8+zY8jXWGdaEdo2AslqSawjGJSE9nxG1d8AO5YktLWM7YVJVgi+o=
+MIICTzCCAbgCCQCyuBGcH7I1kjANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJE
+RTEPMA0GA1UECBMGQmF5ZXJuMREwDwYDVQQHEwhNdWVuY2hlbjEXMBUGA1UEChMO
+V2hhdGV2ZXIgaXQgaXMxIDAeBgNVBAMTF0lPOjpTb2NrZXQ6OlNTTCBUZXN0IENB
+MB4XDTA5MDIyMzA4NTc0N1oXDTA5MDMyNTA4NTc0N1owbDELMAkGA1UEBhMCREUx
+DzANBgNVBAgTBkJheWVybjERMA8GA1UEBxMITXVlbmNoZW4xFzAVBgNVBAoTDldo
+YXRldmVyIGl0IGlzMSAwHgYDVQQDExdJTzo6U29ja2V0OjpTU0wgVGVzdCBDQTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArLYg3GfTUe+aPdVA5U29JVXQUHkx
+9FHOZWZ/8j9hSHGVwcSp2Y4ChZt0K26c7NYUg8mUTJJN9/i+fmVH8EECymzr+68W
+scpY+ja/YECbXe9a0RPz+iOwxJx14beraiMERkhmEAhZdCBHhgTCdeUVW3eMX8ML
+aiIr0xsAZ40peekCAwEAATANBgkqhkiG9w0BAQUFAAOBgQCVDgfz+fXBxtjiRHPB
+d9s3FPeiUJd/owpuvS8SSg+Jbm1KLmKnstqLQaKoz2TktiRUt0361d4PTUEZ7GHl
+3+t6HP0+/lokrBPhEGzuzHzJnfDcUIMvS2Uo7trwhLxl0tEbbVsmqigJOu3uxR14
+6CG7rf+dyth3L0jsEQOXc0Jeyw==
-----END CERTIFICATE-----
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/Changes new/IO-Socket-SSL-1.23/Changes
--- old/IO-Socket-SSL-1.20/Changes 2009-01-15 21:43:42.000000000 +0100
+++ new/IO-Socket-SSL-1.23/Changes 2009-02-23 10:49:22.000000000 +0100
@@ -1,10 +1,27 @@
+v1.23 2009.02.23
+- if neither SSL_ca_file nor SSL_ca_path are known (e.g not given and the
+ default values have no existing file|path) disable checking of
+ certificates, but carp about the problem
+- new test certificates, the old ones expired and caused tests to fail
+
+v1.22 2009.01.24
+- Net::SSLeay stores verify callbacks inside hash and never clears them, so
+ set verify callback to NULL in destroy of context
+
+v1.21 2009.01.22
+- auto verification of name in certificate created circular reference between
+ SSL and CTX object with the verify_callback, which caused the objects to be
+ destroyed only at program end. Fix it be no longer access $self from inside
+ the callback.
+ Thanks to odenbach[AT]uni-paderborn[DOT]de for reporting
+
v1.20 2009.01.15
- only changes on test suite to make it ready for win32
(tested with strawberry perl 5.8.8)
v1.19 2008.12.31
-- fix verfycn_name autodetection from PeerAddr/PeerHost
+- fix verifycn_name autodetection from PeerAddr/PeerHost
v1.18 2008.11.17
- fixed typo in argument: wildcars_in_cn -> wildcards_in_cn
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/Makefile.PL new/IO-Socket-SSL-1.23/Makefile.PL
--- old/IO-Socket-SSL-1.20/Makefile.PL 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/Makefile.PL 2009-01-27 07:39:34.000000000 +0100
@@ -95,5 +95,4 @@
'DISTNAME' => 'IO-Socket-SSL',
'PREREQ_PM' => { 'Net::SSLeay' => 1.21, 'Scalar::Util' => 0 },
'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz', },
- 'NO_META' => 1,
);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/MANIFEST new/IO-Socket-SSL-1.23/MANIFEST
--- old/IO-Socket-SSL-1.20/MANIFEST 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/MANIFEST 2009-02-23 10:57:47.000000000 +0100
@@ -41,4 +41,4 @@
t/inet6.t
t/testlib.pl
util/export_certs.pl
-META.yml
+META.yml Module meta-data (added by MakeMaker)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/META.yml new/IO-Socket-SSL-1.23/META.yml
--- old/IO-Socket-SSL-1.20/META.yml 2009-01-15 17:56:24.000000000 +0100
+++ new/IO-Socket-SSL-1.23/META.yml 2009-02-23 10:57:47.000000000 +0100
@@ -1,12 +1,15 @@
-# http://module-build.sourceforge.net/META-spec.html
-#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
-name: IO-Socket-SSL
-version: 0.99
-version_from: SSL.pm
-installdirs: site
-license: perl
-requires:
+--- #YAML:1.0
+name: IO-Socket-SSL
+version: 1.23
+abstract: Nearly transparent SSL encapsulation for IO::Socket::INET.
+license: ~
+author:
+ - Steffen Ullrich & Peter Behroozi & Marko Asplund
+generated_by: ExtUtils::MakeMaker version 6.44
+distribution_type: module
+requires:
Net::SSLeay: 1.21
-
-distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.17
+ Scalar::Util: 0
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+ version: 1.3
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/README.Win32 new/IO-Socket-SSL-1.23/README.Win32
--- old/IO-Socket-SSL-1.20/README.Win32 2009-01-15 17:56:25.000000000 +0100
+++ new/IO-Socket-SSL-1.23/README.Win32 2009-01-22 22:44:47.000000000 +0100
@@ -4,5 +4,3 @@
non-blocking).
See also http://www.perlmonks.org/?node_id=378675
-Because fork() on Win32 is just an incomplete implementation using threads
-the tests might block, e.g. the test suite will not succeed.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/IO-Socket-SSL-1.20/SSL.pm new/IO-Socket-SSL-1.23/SSL.pm
--- old/IO-Socket-SSL-1.20/SSL.pm 2009-01-15 21:42:54.000000000 +0100
+++ new/IO-Socket-SSL-1.23/SSL.pm 2009-02-23 10:56:20.000000000 +0100
@@ -66,7 +66,7 @@
}) {
@ISA = qw(IO::Socket::INET);
}
- $VERSION = '1.20';
+ $VERSION = '1.23';
$GLOBAL_CONTEXT_ARGS = {};
#Make $DEBUG another name for $Net::SSLeay::trace
@@ -209,8 +209,6 @@
my %default_args = (
Proto => 'tcp',
SSL_server => $is_server,
- SSL_ca_file => 'certs/my-ca.pem',
- SSL_ca_path => 'ca/',
SSL_use_cert => $is_server,
SSL_check_crl => 0,
SSL_version => 'sslv23',
@@ -231,46 +229,48 @@
: "certs/client-${k}.pem";
}
+ # add only SSL_ca_* if not in args
+ if ( ! exists $arg_hash->{SSL_ca_file} && ! exists $arg_hash->{SSL_ca_path} ) {
+ if ( -f 'certs/my-ca.pem' ) {
+ $default_args{SSL_ca_file} = 'certs/my-ca.pem'
+ } elsif ( -d 'ca/' ) {
+ $default_args{SSL_ca_path} = 'ca/'
+ }
+ }
+
#Replace nonexistent entries with defaults
%$arg_hash = ( %default_args, %$GLOBAL_CONTEXT_ARGS, %$arg_hash );
#Avoid passing undef arguments to Net::SSLeay
defined($arg_hash->{$_}) or delete($arg_hash->{$_}) foreach (keys %$arg_hash);
- #Handle CA paths properly if no CA file is specified
- if ($arg_hash->{'SSL_ca_path'} ne '' and !(-f $arg_hash->{'SSL_ca_file'})) {
- DEBUG(1, "CA file $arg_hash->{SSL_ca_file} not found, using CA path instead.\n" )
- if $arg_hash->{SSL_ca_file};
- $arg_hash->{'SSL_ca_file'} = '';
- }
-
my $vcn_scheme = delete $arg_hash->{SSL_verifycn_scheme};
if ( $vcn_scheme && $vcn_scheme ne 'none' ) {
+ # don't access ${*self} inside callback - this seems to create
+ # circular references from the ssl object to the context and back
+
+ # use SSL_verifycn_name or determine from PeerAddr
+ my $host = $arg_hash->{SSL_verifycn_name};
+ if (not defined($host)) {
+ if ( $host = $arg_hash->{PeerAddr} || $arg_hash->{PeerHost} ) {
+ $host =~s{:\w+$}{};
+ }
+ }
+ $host ||= ref($vcn_scheme) && $vcn_scheme->{callback} && 'unknown';
+ $host or return $self->error( "Cannot determine peer hostname for verification" );
+
my $vcb = $arg_hash->{SSL_verify_callback};
$arg_hash->{SSL_verify_callback} = sub {
- my ($ok,$ctx_store,$cert,$error) = @_;
- $ok = $vcb->($ok,$ctx_store,$cert,$error) if $vcb;
+ my ($ok,$ctx_store,$certname,$error,$cert) = @_;
+ $ok = $vcb->($ok,$ctx_store,$certname,$error,$cert) if $vcb;
$ok or return;
my $depth = Net::SSLeay::X509_STORE_CTX_get_error_depth($ctx_store);
return $ok if $depth != 0;
- # use SSL_peer_hostname or determine from PeerAddr
- my $arg_hash = ${*$self}{_SSL_arguments};
- my $host = $arg_hash->{SSL_verifycn_name};
- if (not defined($host)) {
- if ( $host = $arg_hash->{PeerAddr} || $arg_hash->{PeerHost} ) {
- $host =~s{:\w+$}{};
- }
- }
- $host ||= ref($vcn_scheme) && $vcn_scheme->{callback} && 'unknown';
- $host or return $self->error( "Cannot determine peer hostname for verification" );
-
# verify name
- my $x509 = Net::SSLeay::X509_STORE_CTX_get_current_cert($ctx_store);
- my $rv = verify_hostname_of_cert( $host,$x509,$vcn_scheme );
+ my $rv = verify_hostname_of_cert( $host,$cert,$vcn_scheme );
# just do some code here against optimization because x509 has no
# increased reference and CRYPTO_add is not available from Net::SSLeay
- DEBUG(99999,"don't to anything with $x509" );
return $rv;
};
}
@@ -948,8 +948,8 @@
{
my %dispatcher = (
- issuer => sub { Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_issuer_name( shift )) },
- subject => sub { Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_subject_name( shift )) },
+ issuer => sub { Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_issuer_name( shift )) },
+ subject => sub { Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_subject_name( shift )) },
);
if ( $Net::SSLeay::VERSION >= 1.30 ) {
# I think X509_NAME_get_text_by_NID got added in 1.30
@@ -1292,6 +1292,7 @@
package IO::Socket::SSL::SSL_Context;
+use Carp;
use strict;
my %CTX_CREATED_IN_THIS_THREAD;
@@ -1341,10 +1342,15 @@
my $verify_mode = $arg_hash->{SSL_verify_mode};
- unless ($verify_mode == Net::SSLeay::VERIFY_NONE()) {
- Net::SSLeay::CTX_load_verify_locations(
- $ctx, $arg_hash->{SSL_ca_file},$arg_hash->{SSL_ca_path}
- ) || return IO::Socket::SSL->error("Invalid certificate authority locations");
+ if ( $verify_mode != Net::SSLeay::VERIFY_NONE() and
+ ! Net::SSLeay::CTX_load_verify_locations(
+ $ctx, $arg_hash->{SSL_ca_file} || '',$arg_hash->{SSL_ca_path} || '') ) {
+ if ( ! $arg_hash->{SSL_ca_file} && ! $arg_hash->{SSL_ca_path} ) {
+ carp("No certificate verification because neither SSL_ca_file nor SSL_ca_path known");
+ $verify_mode = Net::SSLeay::VERIFY_NONE();
+ } else {
+ return IO::Socket::SSL->error("Invalid certificate authority locations");
+ }
}
if ($arg_hash->{'SSL_check_crl'}) {
@@ -1410,21 +1416,22 @@
my $verify_cb = $arg_hash->{SSL_verify_callback};
my $verify_callback = $verify_cb && sub {
my ($ok, $ctx_store) = @_;
- my ($cert, $error);
+ my ($certname,$cert,$error);
if ($ctx_store) {
$cert = Net::SSLeay::X509_STORE_CTX_get_current_cert($ctx_store);
$error = Net::SSLeay::X509_STORE_CTX_get_error($ctx_store);
- $cert &&= Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_issuer_name($cert)).
+ $certname = Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_issuer_name($cert)).
Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_subject_name($cert));
$error &&= Net::SSLeay::ERR_error_string($error);
}
DEBUG(3, "ok=$ok cert=$cert" );
- return $verify_cb->($ok, $ctx_store, $cert, $error);
+ return $verify_cb->($ok,$ctx_store,$certname,$error,$cert);
};
Net::SSLeay::CTX_set_verify($ctx, $verify_mode, $verify_callback);
$ctx_object = { context => $ctx };
+ $ctx_object->{has_verifycb} = 1 if $verify_callback;
DEBUG(3, "new ctx $ctx" );
$CTX_CREATED_IN_THIS_THREAD{$ctx} = 1;
@@ -1463,6 +1470,11 @@
DEBUG( 3,"free ctx $ctx open=".join( " ",keys %CTX_CREATED_IN_THIS_THREAD ));
if ( %CTX_CREATED_IN_THIS_THREAD and
delete $CTX_CREATED_IN_THIS_THREAD{$ctx} ) {
+ # remove any verify callback for this context
+ if ( $self->{has_verifycb}) {
+ DEBUG( 3,"free ctx $ctx callback" );
+ Net::SSLeay::CTX_set_verify($ctx, 0,undef);
+ }
DEBUG( 3,"OK free ctx $ctx" );
Net::SSLeay::CTX_free($ctx);
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-Curses for openSUSE:Factory
checked in at Mon Feb 23 23:42:38 CET 2009.
--------
--- perl-Curses/perl-Curses.changes 2008-09-10 18:03:09.000000000 +0200
+++ perl-Curses/perl-Curses.changes 2009-02-23 16:24:24.000000000 +0100
@@ -1,0 +2,12 @@
+Mon Feb 23 16:22:52 CET 2009 - anicka(a)suse.cz
+
+- update to 1.27
+ * Extraneous .i and .s files in 1.26 removed. 'make clean' cleans
+ all .i and .s too.
+ * 'gen' directory is replaced by gen.tar file, so CPAN doesn't
+ index the stuff in there. That directory is stuff for developing
+ the Curses package, not stuff for users.
+ * newterm() is available and putwin() and getwin() work in newer
+ Perl (with PerlIO). We now use PerlIO_findFile().
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
Curses-1.24.tar.bz2
New:
----
Curses-1.27.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Curses.spec ++++++
--- /var/tmp/diff_new_pack.O10543/_old 2009-02-23 23:41:36.000000000 +0100
+++ /var/tmp/diff_new_pack.O10543/_new 2009-02-23 23:41:36.000000000 +0100
@@ -1,7 +1,7 @@
#
-# spec file for package perl-Curses (Version 1.24)
+# spec file for package perl-Curses (Version 1.27)
#
-# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
Name: perl-Curses
BuildRequires: ncurses-devel
-Version: 1.24
+Version: 1.27
Release: 1
Provides: perl_cur Curses
Obsoletes: perl_cur
@@ -69,6 +69,15 @@
/var/adm/perl-modules/%{name}
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 1.27
+ * Extraneous .i and .s files in 1.26 removed. 'make clean' cleans
+ all .i and .s too.
+ * 'gen' directory is replaced by gen.tar file, so CPAN doesn't
+ index the stuff in there. That directory is stuff for developing
+ the Curses package, not stuff for users.
+ * newterm() is available and putwin() and getwin() work in newer
+ Perl (with PerlIO). We now use PerlIO_findFile().
* Wed Sep 10 2008 anicka(a)suse.cz
- update to 1.24
* Export KEY_RESIZE, KEY_EVENT.
++++++ Curses-1.24.tar.bz2 -> Curses-1.27.tar.bz2 ++++++
++++ 3040 lines of diff (skipped)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package perl-BerkeleyDB for openSUSE:Factory
checked in at Mon Feb 23 23:41:29 CET 2009.
--------
--- perl-BerkeleyDB/perl-BerkeleyDB.changes 2009-01-20 16:05:46.000000000 +0100
+++ perl-BerkeleyDB/perl-BerkeleyDB.changes 2009-02-23 16:59:42.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Feb 23 16:57:30 CET 2009 - anicka(a)suse.cz
+
+- update to 0.38
+ * Fixed typo in BerkleyDB.pod that broke t/pod.t
+ * Included CDS section to the pod.
+ * Various documentation patches from RT#42243
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
BerkeleyDB-0.36.tar.bz2
New:
----
BerkeleyDB-0.38.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-BerkeleyDB.spec ++++++
--- /var/tmp/diff_new_pack.J20163/_old 2009-02-23 23:37:50.000000000 +0100
+++ /var/tmp/diff_new_pack.J20163/_new 2009-02-23 23:37:50.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package perl-BerkeleyDB (Version 0.36)
+# spec file for package perl-BerkeleyDB (Version 0.38)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -26,7 +26,7 @@
Requires: perl = %{perl_version}
AutoReqProv: on
Summary: Perl Module for Accessing Berkeley DB Functions
-Version: 0.36
+Version: 0.38
Release: 1
Source: BerkeleyDB-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -71,6 +71,11 @@
/var/adm/perl-modules/perl-BerkeleyDB
%changelog
+* Mon Feb 23 2009 anicka(a)suse.cz
+- update to 0.38
+ * Fixed typo in BerkleyDB.pod that broke t/pod.t
+ * Included CDS section to the pod.
+ * Various documentation patches from RT#42243
* Tue Jan 20 2009 anicka(a)suse.cz
- update to 0.36
* Added support for $ENV->log_get_config and $ENV->log_set_config.
++++++ BerkeleyDB-0.36.tar.bz2 -> BerkeleyDB-0.38.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/BerkeleyDB.pm new/BerkeleyDB-0.38/BerkeleyDB.pm
--- old/BerkeleyDB-0.36/BerkeleyDB.pm 2008-09-30 23:30:56.000000000 +0200
+++ new/BerkeleyDB-0.38/BerkeleyDB.pm 2009-02-21 14:58:00.000000000 +0100
@@ -2,7 +2,7 @@
package BerkeleyDB;
-# Copyright (c) 1997-2008 Paul Marquess. All rights reserved.
+# Copyright (c) 1997-2009 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
@@ -17,7 +17,7 @@
use vars qw($VERSION @ISA @EXPORT $AUTOLOAD
$use_XSLoader);
-$VERSION = '0.36';
+$VERSION = '0.38';
require Exporter;
#require DynaLoader;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/BerkeleyDB.pod new/BerkeleyDB-0.38/BerkeleyDB.pod
--- old/BerkeleyDB-0.36/BerkeleyDB.pod 2007-09-28 22:39:28.000000000 +0200
+++ new/BerkeleyDB-0.38/BerkeleyDB.pod 2009-02-21 14:55:26.000000000 +0100
@@ -1370,6 +1370,13 @@
=back
+The variant C<db_pget> allows you to query a secondary database:
+
+ $status = $sdb->db_pget($skey, $pkey, $value);
+
+using the key C<$skey> in the secondary db to lookup C<$pkey> and C<$value>
+from the primary db.
+
=head2 $status = $db->db_put($key, $value [, $flags])
@@ -1536,9 +1543,23 @@
=back
-You need to be running Berkeley DB 4.4 or better if you wan to make use of
+You need to be running Berkeley DB 4.4 or better if you want to make use of
C<compact>.
+=head2 $status = $db->associate($secondary, \&key_callback)
+
+Associate C<$db> with the secondary DB C<$secondary>
+
+New key/value pairs inserted to the database will be passed to the callback
+which must set its third argument to the secondary key to allow lookup. If
+an array reference is set multiple keys secondary keys will be associated
+with the primary database entry.
+
+Data may be retrieved fro the secondary database using C<db_pget> to also
+obtain the primary key.
+
+Secondary databased are maintained automatically.
+
=head1 CURSORS
A cursor is used whenever you want to access the contents of a database
@@ -1735,7 +1756,7 @@
=head2 $status = $cursor->c_pget() ;
-TODO
+See C<db_pget>
=head2 $status = $cursor->c_close()
@@ -1757,13 +1778,403 @@
=head1 TRANSACTIONS
-TODO.
+Transactions are created using the C<txn_begin> method on L<BerkeleyDB::Env>:
+
+ my $txn = $env->txn_begin;
+
+If this is a nested transaction, supply the parent transaction as an
+argument:
+
+ my $child_txn = $env->txn_begin($parent_txn);
+
+Then in order to work with the transaction, you must set it as the current
+transaction on the database handles you want to work with:
+
+ $db->Txn($txn);
+
+Or for multiple handles:
+
+ $txn->Txn(@handles);
+
+The current transaction is given by BerkeleyDB each time to the various BDB
+operations. In the C api it is required explicitly as an argument to every
+operation.
+
+To commit a transaction call the C<commit> method on it:
+
+ $txn->commit;
+
+and to roll back call abort:
+
+ $txn->abort
+
+After committing or aborting a child transaction you need to set the active
+transaction again using C<Txn>.
+
+
+=head1 Berkeley DB Concurrent Data Store (CDS)
+
+The Berkeley DB I<Concurrent Data Store> (CDS) is a lightweight locking
+mechanism that is useful in scenarios where transactions are overkill.
+
+=head2 What is CDS?
+
+The Berkeley DB CDS interface is a simple lightweight locking mechanism
+that allows safe concurrent access to Berkeley DB databases. Your
+application can have multiple reader and write processes, but Berkeley DB
+will arrange it so that only one process can have a write lock against the
+database at a time, i.e. multiple processes can read from a database
+concurrently, but all write processes will be serialised.
+
+=head2 Should I use it?
+
+Whilst this simple locking model is perfectly adequate for some
+applications, it will be too restrictive for others. Before deciding on
+using CDS mode, you need to be sure that it is suitable for the expected
+behaviour of your application.
+
+The key features of this model are
+
+=over 5
+
+=item *
+
+All writes operations are serialised.
+
+=item *
+
+A write operation will block until all reads have finished.
+
+=back
+
+There are a few of the attributes of your application that you need to be
+aware of before choosing to use CDS.
+
+Firstly, if you application needs either recoverability or transaction
+support, then CDS will not be suitable.
+
+Next what is the ratio of read operation to write operations will your
+application have?
+
+If it is carrying out mostly read operations, and very few writes, then CDS
+may be appropriate.
+
+What is the expected throughput of reads/writes in your application?
+
+If you application does 90% writes and 10% reads, but on average you only
+have a transaction every 5 seconds, then the fact that all writes are
+serialised will not matter, because there will hardly ever be multiple
+writes processes blocking.
+
+In summary CDS mode may be appropriate for your application if it performs
+mostly reads and very few writes or there is a low throughput. Also, if
+you do not need to be able to roll back a series of database operations if
+an error occurs, then CDS is ok.
+
+If any of these is not the case you will need to use Berkeley DB
+transactions. That is outside the scope of this document.
+
+=head2 Locking Used
+
+Berkeley DB implements CDS mode using two kinds of lock behind the scenes -
+namely read locks and write locks. A read lock allows multiple processes to
+access the database for reading at the same time. A write lock will only
+get access to the database when there are no read or write locks active.
+The write lock will block until the process holding the lock releases it.
+
+Multiple processes with read locks can all access the database at the same
+time as long as no process has a write lock. A process with a write lock
+can only access the database if there are no other active read or write
+locks.
+
+The majority of the time the Berkeley DB CDS mode will handle all locking
+without your application having to do anything. There are a couple of
+exceptions you need to be aware of though - these will be discussed in
+L<Safely Updating Records> and L<Implicit Cursors> below.
+
+A Berkeley DB Cursor (created with C<< $db->db_cursor >>) will by hold a
+lock on the database until it is either explicitly closed or destroyed.
+This means the lock has the potential to be long lived.
+
+By default Berkeley DB cursors create a read lock, but it is possible to
+create a cursor that holds a write lock, thus
+
+ $cursor = $db->db_cursor(DB_WRITECURSOR);
+
+
+Whilst either a read or write cursor is active, it will block any other
+processes that wants to write to the database.
+
+To avoid blocking problems, only keep cursors open as long as they are
+needed. The same is true when you use the C<cursor> method or the
+C<cds_lock> method.
+
+For full information on CDS see the "Berkeley DB Concurrent Data Store
+applications" section in the Berkeley DB Reference Guide.
+
+
+=head2 Opening a database for CDS
+
+Here is the typical signature that is used when opening a database in CDS
+mode.
+
+ use BerkeleyDB ;
+
+ my $env = new BerkeleyDB::Env
+ -Home => "./home" ,
+ -Flags => DB_CREATE| DB_INIT_CDB | DB_INIT_MPOOL
+ or die "cannot open environment: $BerkeleyDB::Error\n";
+
+ my $db = new BerkeleyDB::Hash
+ -Filename => 'test1.db',
+ -Flags => DB_CREATE,
+ -Env => $env
+ or die "cannot open database: $BerkeleyDB::Error\n";
+
+or this, if you use the tied interface
+
+ tie %hash, "BerkeleyDB::Hash",
+ -Filename => 'test2.db',
+ -Flags => DB_CREATE,
+ -Env => $env
+ or die "cannot open database: $BerkeleyDB::Error\n";
+
+The first thing to note is that you B<MUST> always use a Berkeley DB
+environment if you want to use locking with Berkeley DB.
+
+Remember, that apart from the actual database files you explicitly create
+yourself, Berkeley DB will create a few behind the scenes to handle locking
+- they usually have names like "__db.001". It is therefore a good idea to
+use the C<-Home> option, unless you are happy for all these files to be
+written in the current directory.
+
+Next, remember to include the C<DB_CREATE> flag when opening the
+environment for the first time. A common mistake is to forget to add this
+option and then wonder why the application doesn't work.
+
+Finally, it is vital that all processes that are going to access the
+database files use the same Berkeley DB environment.
+
+
+=head2 Safely Updating a Record
+
+One of the main gotchas when using CDS is if you want to update a record in
+a database, i.e. you want to retrieve a record from a database, modify it
+in some way and put it back in the database.
+
+For example, say you are writing a web application and you want to keep a
+record of the number of times your site is accessed in a Berkeley DB
+database. So your code will have a line of code like this (assume, of
+course, that C<%hash> has been tied to a Berkeley DB database):
+
+ $hash{Counter} ++ ;
+
+That may look innocent enough, but there is a race condition lurking in
+there. If I rewrite the line of code using the low-level Berkeley DB API,
+which is what will actually be executed, the race condition may be more
+apparent:
+
+ $db->db_get("Counter", $value);
+ ++ $value ;
+ $db->db_put("Counter", $value);
+
+Consider what happens behind the scenes when you execute the commands
+above. Firstly, the existing value for the key "Counter" is fetched from
+the database using C<db_get>. A read lock will be used for this part of the
+update. The value is then incremented, and the new value is written back
+to the database using C<db_put>. This time a write lock will be used.
+
+Here's the problem - there is nothing to stop two (or more) processes
+executing the read part at the same time. Remember multiple processes can
+hold a read lock on the database at the same time. So both will fetch the
+same value, let's say 7, from the database. Both increment the value to 8
+and attempt to write it to the database. Berkeley DB will ensure that only
+one of the processes gets a write lock, while the other will be blocked. So
+the process that happened to get the write lock will store the value 8 to
+the database and release the write lock. Now the other process will be
+unblocked, and it too will write the value 8 to the database. The result,
+in this example, is we have missed a hit in the counter.
+
+To deal with this kind of scenario, you need to make the update atomic. A
+convenience method, called C<cds_lock>, is supplied with the BerkeleyDB
+module for this purpose. Using C<cds_lock>, the counter update code can now
+be rewritten thus:
+
+ my $lk = $dbh->cds_lock() ;
+ $hash{Counter} ++ ;
+ $lk->cds_unlock;
+
+or this, where scoping is used to limit the lifetime of the lock object
+
+ {
+ my $lk = $dbh->cds_lock() ;
+ $hash{Counter} ++ ;
+ }
+
+Similarly, C<cds_lock> can be used with the native Berkeley DB API
+
+ my $lk = $dbh->cds_lock() ;
+ $db->db_get("Counter", $value);
+ ++ $value ;
+ $db->db_put("Counter", $value);
+ $lk->unlock;
+
+
+The C<cds_lock> method will ensure that the current process has exclusive
+access to the database until the lock is either explicitly released, via
+the C<< $lk->cds_unlock() >> or by the lock object being destroyed.
+
+If you are interested, all that C<cds_lock> does is open a "write" cursor.
+This has the useful side-effect of holding a write-lock on the database
+until the cursor is deleted. This is how you create a write-cursor
+
+ $cursor = $db->db_cursor(DB_WRITECURSOR);
+
+If you have instantiated multiple C<cds_lock> objects for one database
+within a single process, that process will hold a write-lock on the
+database until I<ALL> C<cds_lock> objects have been destroyed.
+
+As with all write-cursors, you should try to limit the scope of the
+C<cds_lock> to as short a time as possible. Remember the complete database
+will be locked to other process whilst the write lock is in place.
+
+=head2 Cannot write with a read cursor while a write cursor is active
+
+This issue is easier to demonstrate with an example, so consider the code
+below. The intention of the code is to increment the values of all the
+elements in a database by one.
+
+ # Assume $db is a database opened in a CDS environment.
+
+ # Create a write-lock
+ my $lock = $db->db_cursor(DB_WRITECURSOR);
+ # or
+ # my $lock = $db->cds_lock();
+
+
+ my $cursor = $db->db_cursor();
+
+ # Now loop through the database, and increment
+ # each value using c_put.
+ while ($cursor->c_get($key, $value, DB_NEXT) == 0)
+ {
+ $cursor->c_put($key, $value+1, DB_CURRENT) == 0
+ or die "$BerkeleyDB::Error\n";
+ }
+
+
+When this code is run, it will fail on the C<c_put> line with this error
+
+ Write attempted on read-only cursor
+
+The read cursor has automatically disallowed a write operation to prevent a
+deadlock.
+
+
+So the rule is -- you B<CANNOT> carry out a write operation using a
+read-only cursor (i.e. you cannot use C<c_put> or C<c_del>) whilst another
+write-cursor is already active.
+
+The workaround for this issue is to just use C<db_put> instead of C<c_put>,
+like this
+
+ # Assume $db is a database opened in a CDS environment.
+
+ # Create a write-lock
+ my $lock = $db->db_cursor(DB_WRITECURSOR);
+ # or
+ # my $lock = $db->cds_lock();
+
+
+ my $cursor = $db->db_cursor();
+
+ # Now loop through the database, and increment
+ # each value using c_put.
+ while ($cursor->c_get($key, $value, DB_NEXT) == 0)
+ {
+ $db->db_put($key, $value+1) == 0
+ or die "$BerkeleyDB::Error\n";
+ }
+
+
+
+=head2 Implicit Cursors
+
+All Berkeley DB cursors will hold either a read lock or a write lock on the
+database for the existence of the cursor. In order to prevent blocking of
+other processes you need to make sure that they are not long lived.
+
+There are a number of instances where the Perl interface to Berkeley DB
+will create a cursor behind the scenes without you being aware of it. Most
+of these are very short-lived and will not affect the running of your
+script, but there are a few notable exceptions.
+
+Consider this snippet of code
+
+ while (my ($k, $v) = each %hash)
+ {
+ # do something
+ }
+
+
+To implement the "each" functionality, a read cursor will be created behind
+the scenes to allow you to iterate through the tied hash, C<%hash>. While
+that cursor is still active, a read lock will obviously be held against the
+database. If your application has any other writing processes, these will
+be blocked until the read cursor is closed. That won't happen until the
+loop terminates.
+
+To avoid blocking problems, only keep cursors open as long as they are
+needed. The same is true when you use the C<cursor> method or the
+C<cds_lock> method.
+
+
+The locking behaviour of the C<values> or C<keys> functions, shown below,
+is subtly different.
+
+ foreach my $k (keys %hash)
+ {
+ # do something
+ }
+
+ foreach my $v (values %hash)
+ {
+ # do something
+ }
+
+
+Just as in the C<each> function, a read cursor will be created to iterate
+over the database in both of these cases. Where C<keys> and C<values>
+differ is the place where the cursor carries out the iteration through the
+database. Whilst C<each> carried out a single iteration every time it was
+invoked, the C<keys> and C<values> functions will iterate through the
+entire database in one go -- the complete database will be read into memory
+before the first iteration of the loop.
+
+Apart from the fact that a read lock will be held for the amount of time
+required to iterate through the database, the use of C<keys> and C<values>
+is B<not> recommended because it will result in the complete database being
+read into memory.
+
+
+=head2 Avoiding Deadlock with multiple databases
+
+If your CDS application uses multiple database files, and you need to write
+to more than one of them, you need to be careful you don't create a
+deadlock.
+
+For example, say you have two databases, D1 and D2, and two processes, P1
+and P2. Assume you want to write a record to each database. If P1 writes
+the records to the databases in the order D1, D2 while process P2 writes
+the records in the order D2, D1, there is the potential for a deadlock to
+occur.
-=head1 CDS Mode
+This scenario can be avoided by either always acquiring the write locks in
+exactly the same order in your application code, or by using the
+C<DB_CDB_ALLDB> flag when opening the environment. This flag will make a
+write-lock apply to all the databases in the environment.
-The Berkeley Db Concurrent Data Store is a lightweight locking mechanism
-that is useful in scenarios where transactions are overkill. See the
-accompanying document .. for details of using this module in CDS mode.
+Add example here
=head1 DBM Filters
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/BerkeleyDB.pod.P new/BerkeleyDB-0.38/BerkeleyDB.pod.P
--- old/BerkeleyDB-0.36/BerkeleyDB.pod.P 2007-09-28 22:39:24.000000000 +0200
+++ new/BerkeleyDB-0.38/BerkeleyDB.pod.P 2009-02-21 14:50:47.000000000 +0100
@@ -1176,6 +1176,13 @@
=back
+The variant C<db_pget> allows you to query a secondary database:
+
+ $status = $sdb->db_pget($skey, $pkey, $value);
+
+using the key C<$skey> in the secondary db to lookup C<$pkey> and C<$value>
+from the primary db.
+
=head2 $status = $db->db_put($key, $value [, $flags])
@@ -1342,9 +1349,23 @@
=back
-You need to be running Berkeley DB 4.4 or better if you wan to make use of
+You need to be running Berkeley DB 4.4 or better if you want to make use of
C<compact>.
+=head2 $status = $db->associate($secondary, \&key_callback)
+
+Associate C<$db> with the secondary DB C<$secondary>
+
+New key/value pairs inserted to the database will be passed to the callback
+which must set its third argument to the secondary key to allow lookup. If
+an array reference is set multiple keys secondary keys will be associated
+with the primary database entry.
+
+Data may be retrieved fro the secondary database using C<db_pget> to also
+obtain the primary key.
+
+Secondary databased are maintained automatically.
+
=head1 CURSORS
A cursor is used whenever you want to access the contents of a database
@@ -1541,7 +1562,7 @@
=head2 $status = $cursor->c_pget() ;
-TODO
+See C<db_pget>
=head2 $status = $cursor->c_close()
@@ -1563,13 +1584,403 @@
=head1 TRANSACTIONS
-TODO.
+Transactions are created using the C<txn_begin> method on L<BerkeleyDB::Env>:
+
+ my $txn = $env->txn_begin;
+
+If this is a nested transaction, supply the parent transaction as an
+argument:
+
+ my $child_txn = $env->txn_begin($parent_txn);
+
+Then in order to work with the transaction, you must set it as the current
+transaction on the database handles you want to work with:
+
+ $db->Txn($txn);
+
+Or for multiple handles:
+
+ $txn->Txn(@handles);
+
+The current transaction is given by BerkeleyDB each time to the various BDB
+operations. In the C api it is required explicitly as an argument to every
+operation.
+
+To commit a transaction call the C<commit> method on it:
+
+ $txn->commit;
+
+and to roll back call abort:
+
+ $txn->abort
+
+After committing or aborting a child transaction you need to set the active
+transaction again using C<Txn>.
+
+
+=head1 Berkeley DB Concurrent Data Store (CDS)
+
+The Berkeley DB I<Concurrent Data Store> (CDS) is a lightweight locking
+mechanism that is useful in scenarios where transactions are overkill.
+
+=head2 What is CDS?
+
+The Berkeley DB CDS interface is a simple lightweight locking mechanism
+that allows safe concurrent access to Berkeley DB databases. Your
+application can have multiple reader and write processes, but Berkeley DB
+will arrange it so that only one process can have a write lock against the
+database at a time, i.e. multiple processes can read from a database
+concurrently, but all write processes will be serialised.
+
+=head2 Should I use it?
+
+Whilst this simple locking model is perfectly adequate for some
+applications, it will be too restrictive for others. Before deciding on
+using CDS mode, you need to be sure that it is suitable for the expected
+behaviour of your application.
+
+The key features of this model are
+
+=over 5
+
+=item *
+
+All writes operations are serialised.
+
+=item *
+
+A write operation will block until all reads have finished.
+
+=back
+
+There are a few of the attributes of your application that you need to be
+aware of before choosing to use CDS.
+
+Firstly, if you application needs either recoverability or transaction
+support, then CDS will not be suitable.
+
+Next what is the ratio of read operation to write operations will your
+application have?
+
+If it is carrying out mostly read operations, and very few writes, then CDS
+may be appropriate.
+
+What is the expected throughput of reads/writes in your application?
+
+If you application does 90% writes and 10% reads, but on average you only
+have a transaction every 5 seconds, then the fact that all writes are
+serialised will not matter, because there will hardly ever be multiple
+writes processes blocking.
+
+In summary CDS mode may be appropriate for your application if it performs
+mostly reads and very few writes or there is a low throughput. Also, if
+you do not need to be able to roll back a series of database operations if
+an error occurs, then CDS is ok.
+
+If any of these is not the case you will need to use Berkeley DB
+transactions. That is outside the scope of this document.
+
+=head2 Locking Used
+
+Berkeley DB implements CDS mode using two kinds of lock behind the scenes -
+namely read locks and write locks. A read lock allows multiple processes to
+access the database for reading at the same time. A write lock will only
+get access to the database when there are no read or write locks active.
+The write lock will block until the process holding the lock releases it.
+
+Multiple processes with read locks can all access the database at the same
+time as long as no process has a write lock. A process with a write lock
+can only access the database if there are no other active read or write
+locks.
+
+The majority of the time the Berkeley DB CDS mode will handle all locking
+without your application having to do anything. There are a couple of
+exceptions you need to be aware of though - these will be discussed in
+L<Safely Updating Records> and L<Implicit Cursors> below.
+
+A Berkeley DB Cursor (created with C<< $db->db_cursor >>) will by hold a
+lock on the database until it is either explicitly closed or destroyed.
+This means the lock has the potential to be long lived.
+
+By default Berkeley DB cursors create a read lock, but it is possible to
+create a cursor that holds a write lock, thus
+
+ $cursor = $db->db_cursor(DB_WRITECURSOR);
+
+
+Whilst either a read or write cursor is active, it will block any other
+processes that wants to write to the database.
+
+To avoid blocking problems, only keep cursors open as long as they are
+needed. The same is true when you use the C<cursor> method or the
+C<cds_lock> method.
+
+For full information on CDS see the "Berkeley DB Concurrent Data Store
+applications" section in the Berkeley DB Reference Guide.
+
+
+=head2 Opening a database for CDS
+
+Here is the typical signature that is used when opening a database in CDS
+mode.
+
+ use BerkeleyDB ;
+
+ my $env = new BerkeleyDB::Env
+ -Home => "./home" ,
+ -Flags => DB_CREATE| DB_INIT_CDB | DB_INIT_MPOOL
+ or die "cannot open environment: $BerkeleyDB::Error\n";
+
+ my $db = new BerkeleyDB::Hash
+ -Filename => 'test1.db',
+ -Flags => DB_CREATE,
+ -Env => $env
+ or die "cannot open database: $BerkeleyDB::Error\n";
+
+or this, if you use the tied interface
+
+ tie %hash, "BerkeleyDB::Hash",
+ -Filename => 'test2.db',
+ -Flags => DB_CREATE,
+ -Env => $env
+ or die "cannot open database: $BerkeleyDB::Error\n";
+
+The first thing to note is that you B<MUST> always use a Berkeley DB
+environment if you want to use locking with Berkeley DB.
+
+Remember, that apart from the actual database files you explicitly create
+yourself, Berkeley DB will create a few behind the scenes to handle locking
+- they usually have names like "__db.001". It is therefore a good idea to
+use the C<-Home> option, unless you are happy for all these files to be
+written in the current directory.
+
+Next, remember to include the C<DB_CREATE> flag when opening the
+environment for the first time. A common mistake is to forget to add this
+option and then wonder why the application doesn't work.
+
+Finally, it is vital that all processes that are going to access the
+database files use the same Berkeley DB environment.
+
+
+=head2 Safely Updating a Record
+
+One of the main gotchas when using CDS is if you want to update a record in
+a database, i.e. you want to retrieve a record from a database, modify it
+in some way and put it back in the database.
+
+For example, say you are writing a web application and you want to keep a
+record of the number of times your site is accessed in a Berkeley DB
+database. So your code will have a line of code like this (assume, of
+course, that C<%hash> has been tied to a Berkeley DB database):
+
+ $hash{Counter} ++ ;
+
+That may look innocent enough, but there is a race condition lurking in
+there. If I rewrite the line of code using the low-level Berkeley DB API,
+which is what will actually be executed, the race condition may be more
+apparent:
+
+ $db->db_get("Counter", $value);
+ ++ $value ;
+ $db->db_put("Counter", $value);
+
+Consider what happens behind the scenes when you execute the commands
+above. Firstly, the existing value for the key "Counter" is fetched from
+the database using C<db_get>. A read lock will be used for this part of the
+update. The value is then incremented, and the new value is written back
+to the database using C<db_put>. This time a write lock will be used.
+
+Here's the problem - there is nothing to stop two (or more) processes
+executing the read part at the same time. Remember multiple processes can
+hold a read lock on the database at the same time. So both will fetch the
+same value, let's say 7, from the database. Both increment the value to 8
+and attempt to write it to the database. Berkeley DB will ensure that only
+one of the processes gets a write lock, while the other will be blocked. So
+the process that happened to get the write lock will store the value 8 to
+the database and release the write lock. Now the other process will be
+unblocked, and it too will write the value 8 to the database. The result,
+in this example, is we have missed a hit in the counter.
+
+To deal with this kind of scenario, you need to make the update atomic. A
+convenience method, called C<cds_lock>, is supplied with the BerkeleyDB
+module for this purpose. Using C<cds_lock>, the counter update code can now
+be rewritten thus:
+
+ my $lk = $dbh->cds_lock() ;
+ $hash{Counter} ++ ;
+ $lk->cds_unlock;
+
+or this, where scoping is used to limit the lifetime of the lock object
+
+ {
+ my $lk = $dbh->cds_lock() ;
+ $hash{Counter} ++ ;
+ }
+
+Similarly, C<cds_lock> can be used with the native Berkeley DB API
+
+ my $lk = $dbh->cds_lock() ;
+ $db->db_get("Counter", $value);
+ ++ $value ;
+ $db->db_put("Counter", $value);
+ $lk->unlock;
+
+
+The C<cds_lock> method will ensure that the current process has exclusive
+access to the database until the lock is either explicitly released, via
+the C<< $lk->cds_unlock() >> or by the lock object being destroyed.
+
+If you are interested, all that C<cds_lock> does is open a "write" cursor.
+This has the useful side-effect of holding a write-lock on the database
+until the cursor is deleted. This is how you create a write-cursor
+
+ $cursor = $db->db_cursor(DB_WRITECURSOR);
+
+If you have instantiated multiple C<cds_lock> objects for one database
+within a single process, that process will hold a write-lock on the
+database until I<ALL> C<cds_lock> objects have been destroyed.
+
+As with all write-cursors, you should try to limit the scope of the
+C<cds_lock> to as short a time as possible. Remember the complete database
+will be locked to other process whilst the write lock is in place.
+
+=head2 Cannot write with a read cursor while a write cursor is active
+
+This issue is easier to demonstrate with an example, so consider the code
+below. The intention of the code is to increment the values of all the
+elements in a database by one.
+
+ # Assume $db is a database opened in a CDS environment.
+
+ # Create a write-lock
+ my $lock = $db->db_cursor(DB_WRITECURSOR);
+ # or
+ # my $lock = $db->cds_lock();
+
+
+ my $cursor = $db->db_cursor();
+
+ # Now loop through the database, and increment
+ # each value using c_put.
+ while ($cursor->c_get($key, $value, DB_NEXT) == 0)
+ {
+ $cursor->c_put($key, $value+1, DB_CURRENT) == 0
+ or die "$BerkeleyDB::Error\n";
+ }
+
+
+When this code is run, it will fail on the C<c_put> line with this error
+
+ Write attempted on read-only cursor
+
+The read cursor has automatically disallowed a write operation to prevent a
+deadlock.
+
+
+So the rule is -- you B<CANNOT> carry out a write operation using a
+read-only cursor (i.e. you cannot use C<c_put> or C<c_del>) whilst another
+write-cursor is already active.
+
+The workaround for this issue is to just use C<db_put> instead of C<c_put>,
+like this
+
+ # Assume $db is a database opened in a CDS environment.
+
+ # Create a write-lock
+ my $lock = $db->db_cursor(DB_WRITECURSOR);
+ # or
+ # my $lock = $db->cds_lock();
+
+
+ my $cursor = $db->db_cursor();
+
+ # Now loop through the database, and increment
+ # each value using c_put.
+ while ($cursor->c_get($key, $value, DB_NEXT) == 0)
+ {
+ $db->db_put($key, $value+1) == 0
+ or die "$BerkeleyDB::Error\n";
+ }
+
+
+
+=head2 Implicit Cursors
+
+All Berkeley DB cursors will hold either a read lock or a write lock on the
+database for the existence of the cursor. In order to prevent blocking of
+other processes you need to make sure that they are not long lived.
+
+There are a number of instances where the Perl interface to Berkeley DB
+will create a cursor behind the scenes without you being aware of it. Most
+of these are very short-lived and will not affect the running of your
+script, but there are a few notable exceptions.
+
+Consider this snippet of code
+
+ while (my ($k, $v) = each %hash)
+ {
+ # do something
+ }
+
+
+To implement the "each" functionality, a read cursor will be created behind
+the scenes to allow you to iterate through the tied hash, C<%hash>. While
+that cursor is still active, a read lock will obviously be held against the
+database. If your application has any other writing processes, these will
+be blocked until the read cursor is closed. That won't happen until the
+loop terminates.
+
+To avoid blocking problems, only keep cursors open as long as they are
+needed. The same is true when you use the C<cursor> method or the
+C<cds_lock> method.
+
+
+The locking behaviour of the C<values> or C<keys> functions, shown below,
+is subtly different.
+
+ foreach my $k (keys %hash)
+ {
+ # do something
+ }
+
+ foreach my $v (values %hash)
+ {
+ # do something
+ }
+
+
+Just as in the C<each> function, a read cursor will be created to iterate
+over the database in both of these cases. Where C<keys> and C<values>
+differ is the place where the cursor carries out the iteration through the
+database. Whilst C<each> carried out a single iteration every time it was
+invoked, the C<keys> and C<values> functions will iterate through the
+entire database in one go -- the complete database will be read into memory
+before the first iteration of the loop.
+
+Apart from the fact that a read lock will be held for the amount of time
+required to iterate through the database, the use of C<keys> and C<values>
+is B<not> recommended because it will result in the complete database being
+read into memory.
+
+
+=head2 Avoiding Deadlock with multiple databases
+
+If your CDS application uses multiple database files, and you need to write
+to more than one of them, you need to be careful you don't create a
+deadlock.
+
+For example, say you have two databases, D1 and D2, and two processes, P1
+and P2. Assume you want to write a record to each database. If P1 writes
+the records to the databases in the order D1, D2 while process P2 writes
+the records in the order D2, D1, there is the potential for a deadlock to
+occur.
-=head1 CDS Mode
+This scenario can be avoided by either always acquiring the write locks in
+exactly the same order in your application code, or by using the
+C<DB_CDB_ALLDB> flag when opening the environment. This flag will make a
+write-lock apply to all the databases in the environment.
-The Berkeley Db Concurrent Data Store is a lightweight locking mechanism
-that is useful in scenarios where transactions are overkill. See the
-accompanying document .. for details of using this module in CDS mode.
+Add example here
=head1 DBM Filters
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/BerkeleyDB.xs new/BerkeleyDB-0.38/BerkeleyDB.xs
--- old/BerkeleyDB-0.36/BerkeleyDB.xs 2008-09-30 23:37:43.000000000 +0200
+++ new/BerkeleyDB-0.38/BerkeleyDB.xs 2009-02-18 21:31:46.000000000 +0100
@@ -6,7 +6,7 @@
All comments/suggestions/problems are welcome
- Copyright (c) 1997-2008 Paul Marquess. All rights reserved.
+ Copyright (c) 1997-2009 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/Changes new/BerkeleyDB-0.38/Changes
--- old/BerkeleyDB-0.36/Changes 2008-09-30 23:35:16.000000000 +0200
+++ new/BerkeleyDB-0.38/Changes 2009-02-21 14:57:40.000000000 +0100
@@ -1,5 +1,15 @@
Revision history for Perl extension BerkeleyDB.
+0.38 21st February 2009
+
+ * Fixed typo in BerkleyDB.pod that broke t/pod.t
+
+0.37 18th February 2009
+
+ * Included CDS section to the pod.
+
+ * Various documentation patches from RT#42243
+
0.36 30th September 2008
* Added support for $ENV->log_get_config and $ENV->log_set_config.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/dbinfo new/BerkeleyDB-0.38/dbinfo
--- old/BerkeleyDB-0.36/dbinfo 2008-03-27 09:54:38.000000000 +0100
+++ new/BerkeleyDB-0.38/dbinfo 2009-02-18 21:33:23.000000000 +0100
@@ -5,7 +5,7 @@
#
# Author: Paul Marquess <Paul.Marquess(a)btinternet.com>
# Version: 1.06
-# Date 27th MArch 2008
+# Date 27th March 2008
#
# Copyright (c) 1998-2008 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/META.yml new/BerkeleyDB-0.38/META.yml
--- old/BerkeleyDB-0.36/META.yml 2008-09-30 23:43:41.000000000 +0200
+++ new/BerkeleyDB-0.38/META.yml 2009-02-21 15:02:20.000000000 +0100
@@ -1,19 +1,13 @@
--- #YAML:1.0
-name: BerkeleyDB
-version: 0.36
-abstract: Perl extension for Berkeley DB version 2, 3 or 4
-author:
+name: BerkeleyDB
+version: 0.38
+abstract: Perl extension for Berkeley DB version 2, 3 or 4
+license: perl
+author:
- Paul Marquess <pmqs(a)cpan.org>
-license: perl
-distribution_type: module
-configure_requires:
- ExtUtils::MakeMaker: 0
-requires: {}
-no_index:
- directory:
- - t
- - inc
-generated_by: ExtUtils::MakeMaker version 6.46
+generated_by: ExtUtils::MakeMaker version 6.42
+distribution_type: module
+requires:
meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ url: http://module-build.sourceforge.net/META-spec-v1.3.html
+ version: 1.3
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/README new/BerkeleyDB-0.38/README
--- old/BerkeleyDB-0.36/README 2008-09-30 23:43:28.000000000 +0200
+++ new/BerkeleyDB-0.38/README 2009-02-21 14:57:51.000000000 +0100
@@ -1,11 +1,11 @@
BerkeleyDB
- Version 0.36
+ Version 0.38
- 30th September 2008
+ 21st February 2009
- Copyright (c) 1997-2008 Paul Marquess. All rights reserved. This
+ Copyright (c) 1997-2009 Paul Marquess. All rights reserved. This
program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/t/examples3.t new/BerkeleyDB-0.38/t/examples3.t
--- old/BerkeleyDB-0.36/t/examples3.t 2008-09-14 17:30:30.000000000 +0200
+++ new/BerkeleyDB-0.38/t/examples3.t 2009-02-21 14:55:26.000000000 +0100
@@ -14,6 +14,14 @@
use Test::More;
use util ;
+#BEGIN
+#{
+# if ($BerkeleyDB::db_version < 3) {
+# print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
+# exit 0 ;
+# }
+#}
+
plan(skip_all => "this needs Berkeley DB 3.x or better\n" )
if $BerkeleyDB::db_version < 3;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/t/examples3.t.T new/BerkeleyDB-0.38/t/examples3.t.T
--- old/BerkeleyDB-0.36/t/examples3.t.T 2007-06-13 23:43:28.000000000 +0200
+++ new/BerkeleyDB-0.38/t/examples3.t.T 2009-02-21 14:55:23.000000000 +0100
@@ -12,7 +12,7 @@
use lib 't';
use BerkeleyDB;
use Test::More;
-use util (1);
+use util ;
#BEGIN
#{
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/BerkeleyDB-0.36/t/examples.t.T new/BerkeleyDB-0.38/t/examples.t.T
--- old/BerkeleyDB-0.36/t/examples.t.T 2005-10-10 12:48:10.000000000 +0200
+++ new/BerkeleyDB-0.38/t/examples.t.T 2009-02-21 14:55:04.000000000 +0100
@@ -12,7 +12,7 @@
use lib 't';
use BerkeleyDB;
use Test::More;
-use util(1);
+use util;
plan tests => 7;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0