Bug#696564: unblock: fusioninventory-agent/2.2.3-5
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear release team,
Please unblock fusioninventory-agent/2.2.3-5, uploaded by Gonéri Le Bouder. It
fixes a serious bug and an important bug. Debdiff between testing and unstable
attached.
unblock fusioninventory-agent/2.2.3-5
Cheers,
Ivo
diff -u fusioninventory-agent-2.2.3/debian/changelog fusioninventory-agent-2.2.3/debian/changelog
--- fusioninventory-agent-2.2.3/debian/changelog
+++ fusioninventory-agent-2.2.3/debian/changelog
@@ -1,3 +1,36 @@
+fusioninventory-agent (2.2.3-5) unstable; urgency=low
+
+ * Yet another maintain scripts update :(, thanks Adam D. Barratt,
+ (closes: #679299)
+ * Disable 2 unit tests known for depending to much on the machine
+ configuration (using port 8080). These tests were enough to create FTBFS
+ time to time (e.g: s390 for 2.2.3-4)
+
+ -- Gonéri Le Bouder <goneri@rulezlan.org> Sun, 25 Nov 2012 16:14:15 +0100
+
+fusioninventory-agent (2.2.3-4) unstable; urgency=low
+
+ * fix the postrm script, thanks Adam D. Barratt,
+ (closes: #679299)
+ * Import bug fixes from upstream
+ * Disable t/components/server.t, the test is too fragile. it needs to be
+ able to bind port 8080.
+
+ -- Gonéri Le Bouder <goneri@rulezlan.org> Sat, 03 Nov 2012 13:34:31 +0100
+
+fusioninventory-agent (2.2.3-3) unstable; urgency=low
+
+ * Add a post{inst,rm} scripts to prepeare and clean up
+ the config file, thanks Andreas Beckmann (closes: #679299)
+ * Depends on libio-socket-ssl-perl instead of libnet-ssleay-perl
+ directly
+ * Migrate debian/copyright to Machine-readable format
+ * Add a B-D on libio-socket-ssl-perl
+ * Backport SSL cert from upstream, the ones from the archive were expired,
+ thanks Gregor Herrmann and Lucas Nussbaum (closes: #684855)
+
+ -- Gonéri Le Bouder <goneri@rulezlan.org> Wed, 11 Jul 2012 12:11:55 -0300
+
fusioninventory-agent (2.2.3-2) unstable; urgency=low
* Add a dependency on ucf (closes: #679299)
diff -u fusioninventory-agent-2.2.3/debian/fusioninventory-agent.postrm fusioninventory-agent-2.2.3/debian/fusioninventory-agent.postrm
--- fusioninventory-agent-2.2.3/debian/fusioninventory-agent.postrm
+++ fusioninventory-agent-2.2.3/debian/fusioninventory-agent.postrm
@@ -1,44 +1,98 @@
-#!/bin/sh
-# postrm script for fusioninventory-agent
-#
-# see: dh_installdeb(1)
-
+#! /bin/sh
set -e
-# summary of how this script can be called:
-# * <postrm> `remove'
-# * <postrm> `purge'
-# * <old-postrm> `upgrade' <new-version>
-# * <new-postrm> `failed-upgrade' <old-version>
-# * <new-postrm> `abort-install'
-# * <new-postrm> `abort-install' <old-version>
-# * <new-postrm> `abort-upgrade' <old-version>
-# * <disappearer's-postrm> `disappear' <overwriter>
-# <overwriter-version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
+#DEBHELPER#
case "$1" in
- purge)
- ucf --purge /etc/fusioninventory/agent.cfg
- rm -rf /var/lib/fusioninventory-agent
- ;;
+ remove)
+ # This package is being removed, but its configuration has not yet
+ # been purged.
+ :
+
+ # ldconfig is NOT needed during removal of a library, only during
+ # installation
- remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
;;
+ purge)
+ # This package has previously been removed and is now having
+ # its configuration purged from the system.
+ :
+
+ # we mimic dpkg as closely as possible, so we remove configuration
+ # files with dpkg backup extensions too:
+ ### Some of the following is from Tore Anderson:
+ for ext in '~' '%' .bak .ucf-new .ucf-old .ucf-dist; do
+ rm -f /etc/fusioninventory/agent.cfg$ext
+ done
+
+ # remove the configuration file itself
+ rm -f /etc/fusioninventory/agent.cfg
+ rm -r /etc/fusioninventory
+
+ # and finally clear it out from the ucf database
+ if which ucf >/dev/null; then
+ ucf --purge /etc/fusioninventory/agent.cfg
+ fi
+ if which ucfr >/dev/null; then
+ ucfr --purge fusioninventory-agent /etc/fusioninventory/agent.cfg
+ fi
- *)
- echo "postrm called with unknown argument \`$1'" >&2
- exit 1
;;
-esac
+ disappear)
+ if test "$2" != overwriter; then
+ echo "$0: undocumented call to \`postrm $*'" 1>&2
+ exit 0
+ fi
+ # This package has been completely overwritten by package $3
+ # (version $4). All our files are already gone from the system.
+ # This is a special case: neither "prerm remove" nor "postrm remove"
+ # have been called, because dpkg didn't know that this package would
+ # disappear until this stage.
+ :
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
+ ;;
+ upgrade)
+ # About to upgrade FROM THIS VERSION to version $2 of this package.
+ # "prerm upgrade" has been called for this version, and "preinst
+ # upgrade" has been called for the new version. Last chance to
+ # clean up.
+ :
-#DEBHELPER#
+ ;;
+ failed-upgrade)
+ # About to upgrade from version $2 of this package TO THIS VERSION.
+ # "prerm upgrade" has been called for the old version, and "preinst
+ # upgrade" has been called for this version. This is only used if
+ # the previous version's "postrm upgrade" couldn't handle it and
+ # returned non-zero. (Fix old postrm bugs here.)
+ :
-exit 0
+ ;;
+ abort-install)
+ # Back out of an attempt to install this package. Undo the effects of
+ # "preinst install...". There are two sub-cases.
+ :
+
+ if test "${2+set}" = set; then
+ # When the install was attempted, version $2's configuration
+ # files were still on the system. Undo the effects of "preinst
+ # install $2".
+ :
+
+ else
+ # We were being installed from scratch. Undo the effects of
+ # "preinst install".
+ :
+
+ fi ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package from version $2
+ # TO THIS VERSION. Undo the effects of "preinst upgrade $2".
+ :
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+exit 0
diff -u fusioninventory-agent-2.2.3/debian/rules fusioninventory-agent-2.2.3/debian/rules
--- fusioninventory-agent-2.2.3/debian/rules
+++ fusioninventory-agent-2.2.3/debian/rules
@@ -23,11 +23,13 @@
[ ! -f MYMETA.json ] || rm MYMETA.json
[ ! -f t/inventory/generic/lspci/controllers.t ] || rm t/inventory/generic/lspci/controllers.t
-ifeq ($(BACKPORT),yes)
- [ ! -f t/components/client/ocs/response.t ] || rm t/components/client/ocs/response.t
+ [ ! -f t/components/server.t ] || rm t/components/server.t
[ ! -f t/components/client/connection.t ] || rm t/components/client/connection.t
+ [ ! -f t/components/client/ocs/response.t ] || rm t/components/client/ocs/response.t
+ifeq ($(BACKPORT),yes)
[ ! -f t/components/logger.t ] || rm t/components/logger.t
[ ! -f t/xml/response.t ] || rm t/xml/response.t
# HTTP::Server::Simple::Authen is missing
[ ! -f t/components/client/ssl.t ] || rm t/components/client/ssl.t
+ [ ! -f t/apps/agent.t ] || rm t/apps/agent.t
endif
dh_clean
diff -u fusioninventory-agent-2.2.3/debian/control fusioninventory-agent-2.2.3/debian/control
--- fusioninventory-agent-2.2.3/debian/control
+++ fusioninventory-agent-2.2.3/debian/control
@@ -11,7 +11,8 @@
libipc-run-perl, libhttp-proxy-perl, libtext-template-perl,
libjson-perl, libio-capture-perl,
libtest-simple-perl, libtest-mockmodule-perl,
- libhttp-server-simple-authen-perl, libhttp-daemon-perl
+ libhttp-server-simple-authen-perl, libhttp-daemon-perl,
+ libio-socket-ssl-perl
Standards-Version: 3.9.3
Homepage: http://fusioninventory.org/
Vcs-Browser: http://git.debian.org/?p=users/goneri/fusioninventory-agent.git;a=summary
@@ -26,6 +27,7 @@
libfile-which-perl, libxml-treepp-perl, libyaml-perl, libtext-template-perl,
libjson-perl, pciutils, libhttp-daemon-perl,
Suggests: smartmontools, read-edid
+Recommends: libio-socket-ssl-perl
Description: Hardware and software inventory tool (client)
FusionInventory Agent is an application designed to help a network
or system administrator to keep track of the hardware and software
diff -u fusioninventory-agent-2.2.3/debian/copyright fusioninventory-agent-2.2.3/debian/copyright
--- fusioninventory-agent-2.2.3/debian/copyright
+++ fusioninventory-agent-2.2.3/debian/copyright
@@ -1,44 +1,57 @@
-It was downloaded from http://search.cpan.org/dist/FusionInventory-Agent/
-
-Upstream maintainer: Gonéri Le Bouder <goneri@rulezlan.org>
-
-Copyright 2006-2010 OCS Inventory contributors
-Copyright 2010 FusionInventory Team
-Copyright 2005 Mandriva
-Copyright 2007 Gonéri Le Bouder <goneri@rulezlan.org>
-Copyright 2008 Jean Parpaillon <jean.parpaillon@kerlabs.com>
-
-
-License:
-
-lib/FusionInventory/Agent/Task/Inventory/OS/Generic/Screen.pm
-and memconf are released under this license:
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
-The rest of the files are released under this license:
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
-On Debian GNU/Linux systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL-2'.
-
-
-The Debian packaging is Copyright (C) 2007-2010,Pierre Chifflier,
- Benoit Mortier and Gonéri Le Bouder and is licensed under the
-GPLv2, see `/usr/share/common-licenses/GPL-2'.
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Contact: FusionInventory Team
+Source: http://search.cpan.org/dist/FusionInventory-Agent/
+Upstream-Name: FusionInventory-Agent
+
+Files: *
+Copyright: 2006-2010 OCS Inventory contributors
+ 2010 FusionInventory Team
+ 2007 Gonéri Le Bouder <goneri@rulezlan.org>
+ 2008 Jean Parpaillon <jean.parpaillon@kerlabs.com>
+ 2005-2010 Mandriva SA
+License: GPL-2+
+ This program is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later
+ version.
+ .
+ This program is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the GNU General Public License for more
+ details.
+ .
+ You should have received a copy of the GNU General Public
+ License along with this package; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301 USA
+ .
+ On Debian systems, the full text of the GNU General Public
+ License version 2 can be found in the file
+ `/usr/share/common-licenses/GPL-2'.
+
+Files: debian/*
+Copyright: 2012, Gonéri Le Bouder <goneri@rulezlan.org>
+License: GPL-2+
+ This program is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later
+ version.
+ .
+ This program is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the GNU General Public License for more
+ details.
+ .
+ You should have received a copy of the GNU General Public
+ License along with this package; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301 USA
+ .
+ On Debian systems, the full text of the GNU General Public
+ License version 2 can be found in the file
+ `/usr/share/common-licenses/GPL-2'.
reverted:
--- fusioninventory-agent-2.2.3/debian/tools/gen-ppa.sh
+++ fusioninventory-agent-2.2.3.orig/debian/tools/gen-ppa.sh
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-VERSION=`dpkg-parsechangelog | awk '/Version/ {print $2}'`
-UBUREV=1
-
-echo $VERSION
-
-for dist in natty maverick lucid hardy; do
- git checkout HEAD -- debian/changelog
- dch --force-distribution -v $VERSION$dist$UBUREV -D $dist "Backport for $dist"
- dpkg-buildpackage -S -D -sa -i.git
- dput ppa ../fusioninventory-agent_$VERSION$dist${UBUREV}_source.changes
-done
diff -u fusioninventory-agent-2.2.3/debian/patches/series fusioninventory-agent-2.2.3/debian/patches/series
--- fusioninventory-agent-2.2.3/debian/patches/series
+++ fusioninventory-agent-2.2.3/debian/patches/series
@@ -1,0 +2 @@
+ssl_cert_backport.diff
only in patch2:
unchanged:
--- fusioninventory-agent-2.2.3.orig/debian/fusioninventory-agent.postinst
+++ fusioninventory-agent-2.2.3/debian/fusioninventory-agent.postinst
@@ -0,0 +1,13 @@
+#! /bin/sh
+set -e
+
+#DEBHELPER#
+
+case "$1" in
+ configure)
+ [ -d "/etc/fusioninventory" ] || mkdir "/etc/fusioninventory"
+ ucf /usr/share/doc/fusioninventory-agent/agent.cfg /etc/fusioninventory/agent.cfg
+ ucfr fusioninventory-agent /etc/fusioninventory/agent.cfg
+esac
+
+exit 0
only in patch2:
unchanged:
--- fusioninventory-agent-2.2.3.orig/debian/tools/prepare-bpo.pl
+++ fusioninventory-agent-2.2.3/debian/tools/prepare-bpo.pl
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Data::Dumper;
+use Dpkg::Control::Info;
+use Dpkg::Changelog::Debian;
+
+$ENV{'DEBFULLNAME'} = 'Gonéri Le Bouder';
+$ENV{'EMAIL'} = 'goneri@rulezlan.org';
+
+my %dropTest = (
+ 'fusioninventory-agent' => [
+ 't/components/client/ocs/response.t', 't/xml/response.t',
+ 't/components/logger.t', 't/components/client/ssl.t',
+ 't/components/client/connection.t', 't/01compile.t',
+ 't/apps/agent.t',
+ ],
+ 'libfusioninventory-agent-task-deploy-perl' => [ 't/server.t', ]
+
+);
+
+my %newDeps = (
+ 'Depends' => {
+ 'libfusioninventory-agent-task-esx-perl' => [ 'libio-socket-ssl-perl' ],
+ },
+ 'Build-Depends' => {
+ 'libfusioninventory-agent-task-esx-perl' => [ 'libio-socket-ssl-perl' ]
+
+ }
+
+);
+
+open RULES, "<debian/rules";
+my @origin_rules = <RULES>;
+close RULES;
+open RULES, ">debian/rules";
+foreach (@origin_rules) {
+ s/BACKPORT = no/BACKPORT = yes/;
+ print RULES;
+}
+close RULES;
+
+sub bpDeps {
+ my ($pkg) = @_;
+
+ my $name = $pkg->{Package} || $pkg->{Source};
+ foreach my $section (qw/Build-Depends Build-Depends-Indep Depends/) {
+ next unless $pkg->{$section};
+ $pkg->{$section} =~ s/\s*\n//g;
+ my @list = split( /,/, $pkg->{$section} );
+
+ my @listFinal;
+ foreach (@list) {
+ s/^\s*//;
+ next if $_ eq "libhttp-daemon-perl";
+ next if $_ eq "libhttp-server-simple-authen-perl";
+ next if $_ eq "libhttp-cookies-perl";
+ push @listFinal, $_;
+ }
+ if ( $newDeps{$section}->{$name} ) {
+ push @listFinal, $_ foreach ( @{ $newDeps{$section}->{$name} } );
+ }
+ $pkg->{$section} = join( ",\n", @listFinal );
+ }
+
+}
+
+my $c = Dpkg::Control::Info->new("debian/control");
+
+my $s = $c->get_source();
+bpDeps($s);
+use Data::Dumper;
+
+my @pList = $c->get_packages();
+foreach my $p (@pList) {
+ bpDeps($p);
+}
+
+open my $f, ">debian/control";
+$c->output($f);
+
+foreach ( @{ $dropTest{ $s->{Source} } } ) {
+ unlink($_);
+}
+
+my $changelog = Dpkg::Changelog::Debian->new();
+$changelog->load('debian/changelog');
+use Data::Dumper;
+if ( $changelog->[0]->get_distributions() ne 'squeeze-backports' ) {
+ system("dch --bpo");
+}
+
+my $lastVersion = $changelog->[ @$changelog - 1 ]->get_version();
+if ( `rmadison $s->{Source} -s squeeze-backports` =~ /^[^\|]*\|\s(\S+)~bpo6/ ) {
+ $lastVersion = "-v$1";
+}
+print "lastVersion: $lastVersion\n";
+system( "dpkg-buildpackage", "-i", "-sa", "-v$lastVersion" );
only in patch2:
unchanged:
--- fusioninventory-agent-2.2.3.orig/debian/patches/upstream-fix-backport.diff
+++ fusioninventory-agent-2.2.3/debian/patches/upstream-fix-backport.diff
@@ -0,0 +1,688 @@
+diff --git a/lib/FusionInventory/Agent.pm b/lib/FusionInventory/Agent.pm
+index 03bf240..f2a8482 100644
+--- a/lib/FusionInventory/Agent.pm
++++ b/lib/FusionInventory/Agent.pm
+@@ -22,7 +22,7 @@ use FusionInventory::Agent::Tools;
+ use FusionInventory::Agent::Tools::Hostname;
+ use FusionInventory::Agent::XML::Query::Prolog;
+
+-our $VERSION = '2.2.3';
++our $VERSION = '2.2.3debian';
+ our $VERSION_STRING =
+ "FusionInventory unified agent for UNIX, Linux and MacOSX ($VERSION)";
+ our $AGENT_STRING =
+@@ -143,8 +143,17 @@ sub init {
+ $logger->error("Can't load Proc::Daemon. Is the module installed?");
+ exit 1;
+ }
++
++ my $cwd = getcwd();
+ Proc::Daemon::Init();
+ $logger->debug("Daemon started");
++
++
++ # If we use relative path, we must stay in the current directory
++ if (substr( $params{libdir}, 0, 1 ) ne '/') {
++ chdir($cwd);
++ }
++
+ if ($self->_isAlreadyRunning()) {
+ $logger->debug("An agent is already runnnig, exiting...");
+ exit 1;
+@@ -520,6 +529,6 @@ Get all available tasks found on the system, as a list of module / version
+ pairs:
+
+ %tasks = (
+- 'FusionInventory::Agent::Task::Foo' => x,
+- 'FusionInventory::Agent::Task::Bar' => y,
++ 'Foo' => x,
++ 'Bar' => y,
+ );
+diff --git a/lib/FusionInventory/Agent/Config.pm b/lib/FusionInventory/Agent/Config.pm
+index f4a910b..f1345da 100644
+--- a/lib/FusionInventory/Agent/Config.pm
++++ b/lib/FusionInventory/Agent/Config.pm
+@@ -15,6 +15,8 @@ my $default = {
+ 'backend-collect-timeout' => 30,
+ 'httpd-port' => 62354,
+ 'timeout' => 180,
++ 'no-task' => [],
++ 'no-category' => []
+ };
+
+ my $deprecated = {
+@@ -50,31 +52,31 @@ my $deprecated = {
+ },
+ 'no-inventory' => {
+ message => 'use --no-task inventory option instead',
+- new => { 'no-task' => 'inventory' }
++ new => { 'no-task' => '+inventory' }
+ },
+ 'no-wakeonlan' => {
+ message => 'use --no-task wakeonlan option instead',
+- new => { 'no-task' => 'wakeonlan' }
++ new => { 'no-task' => '+wakeonlan' }
+ },
+ 'no-netdiscovery' => {
+ message => 'use --no-task netdiscovery option instead',
+- new => { 'no-task' => 'netdiscovery' }
++ new => { 'no-task' => '+netdiscovery' }
+ },
+ 'no-snmpquery' => {
+ message => 'use --no-task snmpquery option instead',
+- new => { 'no-task' => 'snmpquery' }
++ new => { 'no-task' => '+snmpquery' }
+ },
+ 'no-ocsdeploy' => {
+ message => 'use --no-task ocsdeploy option instead',
+- new => { 'no-task' => 'ocsdeploy' }
++ new => { 'no-task' => '+ocsdeploy' }
+ },
+ 'no-printer' => {
+ message => 'use --no-category printer option instead',
+- new => { 'no-category' => 'printer' }
++ new => { 'no-category' => '+printer' }
+ },
+ 'no-software' => {
+ message => 'use --no-category software option instead',
+- new => { 'no-category' => 'software' }
++ new => { 'no-category' => '+software' }
+ },
+ };
+
+@@ -215,19 +217,25 @@ sub _checkContent {
+ # transfer the value to the new option, if possible
+ if ($handler->{new}) {
+ if (ref $handler->{new} eq 'HASH') {
+- # list of new options with new values
++ # old boolean option replaced by new non-boolean options
+ foreach my $key (keys %{$handler->{new}}) {
+- $self->{$key} = $self->{$key} ?
+- $self->{$key} . ',' . $handler->{new}->{$key} :
+- $handler->{new}->{$key};
++ my $value = $handler->{new}->{$key};
++ if ($value =~ /^\+(\S+)/) {
++ # multiple values: add it to exiting one
++ $self->{$key} = $self->{$key} ?
++ $self->{$key} . ',' . $1 : $1;
++ } else {
++ # unique value: replace exiting value
++ $self->{$key} = $value;
++ }
+ }
+ } elsif (ref $handler->{new} eq 'ARRAY') {
+- # list of new options, with same value
++ # old boolean option replaced by new boolean options
+ foreach my $new (@{$handler->{new}}) {
+ $self->{$new} = $self->{$old};
+ }
+ } else {
+- # new option, with same value
++ # old non-boolean option replaced by new option
+ $self->{$handler->{new}} = $self->{$old};
+ }
+ }
+@@ -244,10 +252,8 @@ sub _checkContent {
+ # multi-values options
+ $self->{logger} = [ split(/,/, $self->{logger}) ] if $self->{logger};
+ $self->{server} = [ split(/,/, $self->{server}) ] if $self->{server};
+- $self->{'no-task'} = [ split(/,/, $self->{'no-task'}) ]
+- if $self->{'no-task'};
+- $self->{'no-category'} = [ split(/,/, $self->{'no-category'}) ]
+- if $self->{'no-category'};
++ $self->{'no-task'} = [ split(/,/, $self->{'no-task'}) ];
++ $self->{'no-category'} = [ split(/,/, $self->{'no-category'}) ];
+
+ # files location
+ $self->{'ca-cert-file'} =
+diff --git a/lib/FusionInventory/Agent/Logger/File.pm b/lib/FusionInventory/Agent/Logger/File.pm
+index f0b8cb7..1102245 100644
+--- a/lib/FusionInventory/Agent/Logger/File.pm
++++ b/lib/FusionInventory/Agent/Logger/File.pm
+@@ -36,23 +36,30 @@ sub addMessage {
+ }
+
+ my $handle;
+- if (open $handle, '>>', $self->{logfile}) {
++ if (!open $handle, '>>', $self->{logfile}) {
++ die "can't open $self->{logfile}: $ERRNO";
++ }
+
+- # get an exclusive lock on log file
+- flock($handle, LOCK_EX)
+- or die "can't get an exclusive lock on $self->{logfile}: $ERRNO";
++ my $locked;
++ my $retryTill = time + 60;
+
+- print {$handle}
+- "[". localtime() ."]" .
+- "[$level]" .
+- " $message\n";
++ while ($retryTill > time && !$locked) {
++ # get an exclusive lock on log file
++ $locked = 1 if flock($handle, LOCK_EX|LOCK_NB);
++ }
+
+- # closing handle release the lock automatically
+- close $handle;
+- } else {
+- die "can't open $self->{logfile}: $ERRNO";
++ if (!$locked) {
++ die "can't get an exclusive lock on $self->{logfile}: $ERRNO";
+ }
+
++ print {$handle}
++ "[". localtime() ."]" .
++ "[$level]" .
++ " $message\n";
++
++ # closing handle release the lock automatically
++ close $handle;
++
+ }
+
+ 1;
+diff --git a/lib/FusionInventory/Agent/Storage.pm b/lib/FusionInventory/Agent/Storage.pm
+index b38df9f..63b140c 100644
+--- a/lib/FusionInventory/Agent/Storage.pm
++++ b/lib/FusionInventory/Agent/Storage.pm
+@@ -15,13 +15,14 @@ sub new {
+ my ($class, %params) = @_;
+
+ die "no directory parameter" unless $params{directory};
+-
+ if (!-d $params{directory}) {
+- mkpath($params{directory}, {error => \my $err});
+- if (@$err) {
+- my (undef, $message) = %{$err->[0]};
+- die "Can't create $params{directory}: $message";
+- }
++ # {error => \my $err} is not supported on RHEL 5,
++ # we let mkpath call die() itself
++ # http://forge.fusioninventory.org/issues/1817
++ eval {
++ mkpath($params{directory});
++ };
++ die "Can't create $params{directory}: $EVAL_ERROR" if $EVAL_ERROR;
+ }
+
+ if (! -w $params{directory}) {
+diff --git a/lib/FusionInventory/Agent/Target.pm b/lib/FusionInventory/Agent/Target.pm
+index 710df8d..db61331 100644
+--- a/lib/FusionInventory/Agent/Target.pm
++++ b/lib/FusionInventory/Agent/Target.pm
+@@ -122,7 +122,7 @@ sub _computeNextRunDate {
+
+ my $ret;
+ if ($self->{initialDelay}) {
+- $ret = time + $self->{initialDelay};
++ $ret = time + ($self->{initialDelay} / 2) + int rand($self->{initialDelay} / 2);
+ $self->{initialDelay} = undef;
+ } else {
+ $ret =
+diff --git a/lib/FusionInventory/Agent/Task/Inventory.pm b/lib/FusionInventory/Agent/Task/Inventory.pm
+index 13dc0b0..2cd774a 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory.pm
+@@ -61,10 +61,11 @@ sub run {
+ }
+
+ if (not $ENV{PATH}) {
+- # set a minimal PATH if none is set (#1129)
+- $ENV{PATH} = '/sbin:/usr/sbin:/bin:/usr/bin';
++ # set a minimal PATH if none is set (#1129, #1747)
++ $ENV{PATH} =
++ '/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin';
+ $self->{logger}->debug(
+- "PATH is not set, using /sbin:/usr/sbin:/bin:/usr/bin as default"
++ "PATH is not set, using $ENV{PATH} as default"
+ );
+ }
+
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode.pm
+index 57ed095..c0ccc71 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Dmidecode.pm
+@@ -6,27 +6,12 @@ use warnings;
+ use English qw(-no_match_vars);
+ use UNIVERSAL::require;
+
+-use FusionInventory::Agent::Tools;
++use FusionInventory::Agent::Tools::Generic;
+
+ sub isEnabled {
+
+- if ($OSNAME eq 'MSWin32') {
+- # don't run dmidecode on Win2003
+- # http://forge.fusioninventory.org/issues/379
+- Win32->require();
+- my @osver = Win32::GetOSVersion();
+- return if
+- $osver[4] == 2 &&
+- $osver[1] == 5 &&
+- $osver[2] == 2;
+- }
+-
+- return unless canRun('dmidecode');
+-
+- my $count = getLinesCount(
+- command => "dmidecode"
+- );
+- return $count > 10;
++ return unless getDmidecodeInfos();
++
+ }
+
+ sub doInventory {}
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Screen.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Screen.pm
+index 0991f88..7846745 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Screen.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Generic/Screen.pm
+@@ -30,22 +30,15 @@ sub doInventory {
+ foreach my $screen (_getScreens($logger)) {
+
+ if ($screen->{edid}) {
+- my $edid = parseEdid($screen->{edid});
+- if (my $err = checkParsedEdid($edid)) {
+- $logger->debug("check failed: bad edid: $err");
+- } else {
+- $screen->{CAPTION} =
+- $edid->{monitor_name};
+- $screen->{DESCRIPTION} =
+- $edid->{week} . "/" . $edid->{year};
+- $screen->{MANUFACTURER} =
+- getManufacturerFromCode($edid->{manufacturer_name});
+- $screen->{SERIAL} = $edid->{serial_number2}->[0];
+- }
+- $screen->{BASE64} = encode_base64($screen->{edid});
++ my $info = _getEdidInfo($screen->{edid}, $logger);
++ $screen->{CAPTION} = $info->{CAPTION};
++ $screen->{DESCRIPTION} = $info->{DESCRIPTION};
++ $screen->{MANUFACTURER} = $info->{MANUFACTURER};
++ $screen->{SERIAL} = $info->{SERIAL};
+
++ $screen->{BASE64} = encode_base64($screen->{edid});
++ delete $screen->{edid};
+ }
+- delete $screen->{edid};
+
+ $inventory->addEntry(
+ section => 'MONITORS',
+@@ -54,6 +47,61 @@ sub doInventory {
+ }
+ }
+
++sub _getEdidInfo {
++ my ($raw_edid, $logger) = @_;
++
++ my $edid = parseEdid($raw_edid);
++ if (my $error = checkParsedEdid($edid)) {
++ $logger->debug("bad edid: $error");
++ return;
++ }
++
++ my $info = {
++ CAPTION => $edid->{monitor_name},
++ DESCRIPTION => $edid->{week} . "/" . $edid->{year},
++ MANUFACTURER => getManufacturerFromCode($edid->{manufacturer_name}) ||
++ $edid->{manufacturer_name}
++ };
++
++ # they are two different serial numbers in EDID
++ # - a mandatory 4 bytes numeric value
++ # - an optional 13 bytes ASCII value
++ # we use the ASCII value if present, the numeric value as an hex string
++ # unless for a few list of known exceptions deserving specific handling
++ # References:
++ # http://forge.fusioninventory.org/issues/1607
++ # http://forge.fusioninventory.org/issues/1614
++ if (
++ $edid->{EISA_ID} &&
++ $edid->{EISA_ID} =~ /^ACR(0018|0020|0024|00A8|7883|ad49|adaf)$/
++ ) {
++ $info->{SERIAL} =
++ substr($edid->{serial_number2}->[0], 0, 8) .
++ sprintf("%08x", $edid->{serial_number}) .
++ substr($edid->{serial_number2}->[0], 8, 4) ;
++ } elsif (
++ $edid->{EISA_ID} &&
++ $edid->{EISA_ID} eq 'GSM4b21'
++ ) {
++ # split serial in two parts
++ my ($high, $low) = $edid->{serial_number} =~ /(\d+) (\d\d\d)$/x;
++
++ # translate the first part using a custom alphabet
++ my @alphabet = split(//, "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ");
++ my $base = scalar @alphabet;
++
++ $info->{SERIAL} =
++ $alphabet[$high / $base] . $alphabet[$high % $base] .
++ $low;
++ } else {
++ $info->{SERIAL} = $edid->{serial_number2} ?
++ $edid->{serial_number2}->[0] :
++ sprintf("%08x", $edid->{serial_number});
++ }
++
++ return $info;
++}
++
+ sub _getScreensFromWindows {
+ my ($logger) = @_;
+
+@@ -117,25 +165,23 @@ sub _getScreensFromUnix {
+
+ my @screens;
+
+- if (-d '/sys') {
++ if (-d '/sys/devices') {
+ my $wanted = sub {
+- return unless $File::Find::name =~ m{/edid$};
+- open my $handle, '<', $File::Find::name;
+- my $edid = <$handle>;
+- close $handle;
+-
++ return unless $_ eq 'edid';
++ return unless -s $File::Find::name;
++ my $edid = getAllLines(file => $File::Find::name);
+ push @screens, { edid => $edid } if $edid;
+ };
+
+ no warnings 'File::Find';
+- File::Find::find($wanted, '/sys');
++ File::Find::find($wanted, '/sys/devices');
+
+ return @screens if @screens;
+ }
+
+ my $edid =
+- getFirstLine(command => 'monitor-get-edid-using-vbe') ||
+- getFirstLine(command => 'monitor-get-edid');
++ getAllLines(command => 'monitor-get-edid-using-vbe') ||
++ getAllLines(command => 'monitor-get-edid');
+ push @screens, { edid => $edid };
+
+ return @screens if @screens;
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/LVM.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/LVM.pm
+index d4bf1a8..d775a80 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/LVM.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/LVM.pm
+@@ -71,6 +71,11 @@ sub _getPhysicalVolumes {
+ while (my $line = <$handle>) {
+ my @infos = split(/\s+/, $line);
+
++ my $pe_size;
++ if ($infos[7] && $infos[7]>0) {
++ $pe_size = int($infos[4] / $infos[7]);
++ }
++
+ push @volumes, {
+ DEVICE => $infos[1],
+ FORMAT => $infos[2],
+@@ -79,7 +84,7 @@ sub _getPhysicalVolumes {
+ FREE => int($infos[5]||0),
+ PV_UUID => $infos[6],
+ PV_PE_COUNT => $infos[7],
+- PE_SIZE => int($infos[4] / $infos[7]),
++ PE_SIZE => $pe_size,
+ VG_UUID => $infos[8]
+ };
+ }
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
+index 1b01862..bd1bb68 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages.pm
+@@ -37,7 +37,8 @@ sub doInventory {
+ }
+ }
+
+- # fallback on sysfs if udev didn't worked
++ # fallback on sysfs if /dev/.udev is not available. That's the
++ # case on any up to date Linux system
+ if (!@devices) {
+ @devices = getDevicesFromProc(logger => $logger);
+ }
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Qemu.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Qemu.pm
+index 6c333ff..e0052c3 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Qemu.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Qemu.pm
+@@ -28,7 +28,7 @@ sub doInventory {
+ )) {
+ # match only if an qemu instance
+ next unless
+- $process->{CMD} =~ /(qemu|kvm|qemu-kvm) .* -([fhsv]d[a-d]|cdrom)/x;
++ $process->{CMD} =~ /(qemu|kvm|qemu-kvm) .* -([fhsv]d[a-z]|cdrom|drive)/x;
+
+ my $name;
+ my $mem = 0;
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Vmsystem.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Vmsystem.pm
+index 9f5bd60..8416eb4 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Vmsystem.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Virtualization/Vmsystem.pm
+@@ -191,8 +191,8 @@ sub _getStatus {
+ logger => $logger
+ );
+ while (my $line = <$handle>) {
+- my ( $varID, $varValue ) = split( ":", $line );
+- $result = "Virtuozzo" if ( $varID eq 'envID' && $varValue > 0 );
++ my ($key, $value) = split(/:/, $line);
++ $result = "Virtuozzo" if $key eq 'envID' && $value > 0;
+ }
+ }
+ return $result if $result;
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/Bios.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/Bios.pm
+index b664c67..cfb11d0 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/Bios.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/Bios.pm
+@@ -31,7 +31,7 @@ sub doInventory {
+ foreach my $object (getWmiObjects(
+ class => 'Win32_Bios',
+ properties => [ qw/
+- SerialNumber Version Manufacturer SMBIOSBIOSVersion BIOSVersion
++ SerialNumber Version Manufacturer SMBIOSBIOSVersion BIOSVersion ReleaseDate
+ / ]
+ )) {
+ $bios->{BIOSSERIAL} = $object->{SerialNumber};
+@@ -40,6 +40,7 @@ sub doInventory {
+ $bios->{BVERSION} = $object->{SMBIOSBIOSVersion} ||
+ $object->{BIOSVersion} ||
+ $object->{Version};
++ $bios->{BDATE} = $object->{ReleaseDate};
+ }
+
+ foreach my $object (getWmiObjects(
+diff --git a/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm b/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm
+index 17479c9..abaca7e 100644
+--- a/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm
++++ b/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm
+@@ -354,6 +354,9 @@ sub computeChecksum {
+ $self->{last_state_content} = XML::TreePP->new()->parsefile(
+ $self->{last_state_file}
+ );
++ };
++ if (ref($self->{last_state_content}) ne 'HASH') {
++ $self->{last_state_file} = {};
+ }
+ } else {
+ $logger->debug(
+diff --git a/lib/FusionInventory/Agent/Task/WakeOnLan.pm b/lib/FusionInventory/Agent/Task/WakeOnLan.pm
+index fc35b51..106b1b1 100644
+--- a/lib/FusionInventory/Agent/Task/WakeOnLan.pm
++++ b/lib/FusionInventory/Agent/Task/WakeOnLan.pm
+@@ -9,6 +9,7 @@ use constant PF_PACKET => 17;
+ use constant SOCK_PACKET => 10;
+
+ use English qw(-no_match_vars);
++use List::Util qw(first);
+ use Socket;
+
+ use FusionInventory::Agent::Tools;
+@@ -85,6 +86,8 @@ sub run {
+ # degraded WOL by UDP
+ eval {
+ socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('udp'));
++ setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1)
++ or warn "Can't do setsockopt: $ERRNO\n";
+ my $magic_packet =
+ chr(0xFF) x 6 .
+ (pack('H12', $target) x 16);
+diff --git a/lib/FusionInventory/Agent/Tools.pm b/lib/FusionInventory/Agent/Tools.pm
+index c507bc3..97e19e6 100644
+--- a/lib/FusionInventory/Agent/Tools.pm
++++ b/lib/FusionInventory/Agent/Tools.pm
+@@ -357,7 +357,8 @@ sub hex2char {
+ return undef unless $value;
+ return $value unless $value =~ /^0x/;
+
+- $value =~ s/^0x//;
++ $value =~ s/^0x//; # drop hex prefix
++ $value =~ s/00$//; # drop trailing null-character
+ $value =~ s/(\w{2})/chr(hex($1))/eg;
+
+ return $value;
+@@ -571,8 +572,9 @@ of line removed.
+
+ =head2 getAllLines(%params)
+
+-Returns all the lines of given command output or given file content, with end
+-of line removed.
++Returns all the lines of given command output or given file content, as a list
++of strings with end of line removed in list context, as a single string
++otherwise.
+
+ =over
+
+diff --git a/lib/FusionInventory/Agent/Tools/Generic.pm b/lib/FusionInventory/Agent/Tools/Generic.pm
+index 840e68c..37532af 100644
+--- a/lib/FusionInventory/Agent/Tools/Generic.pm
++++ b/lib/FusionInventory/Agent/Tools/Generic.pm
+@@ -24,8 +24,18 @@ sub getDmidecodeInfos {
+ @_
+ );
+
+- my $handle = getFileHandle(%params);
++ if ($OSNAME eq 'MSWin32') {
++ # don't run dmidecode on Win2003
++ # http://forge.fusioninventory.org/issues/379
++ Win32->require();
++ my @osver = Win32::GetOSVersion();
++ return if
++ $osver[4] == 2 &&
++ $osver[1] == 5 &&
++ $osver[2] == 2;
++ }
+
++ my $handle = getFileHandle(%params);
+ my ($info, $block, $type);
+
+ while (my $line = <$handle>) {
+@@ -59,6 +69,9 @@ sub getDmidecodeInfos {
+ }
+ close $handle;
+
++ # do not return anything if dmidecode output is obviously truncated
++ return if keys %$info < 2;
++
+ return $info;
+ }
+
+diff --git a/lib/FusionInventory/Agent/Tools/Linux.pm b/lib/FusionInventory/Agent/Tools/Linux.pm
+index 228d81a..ed1626e 100644
+--- a/lib/FusionInventory/Agent/Tools/Linux.pm
++++ b/lib/FusionInventory/Agent/Tools/Linux.pm
+@@ -41,7 +41,7 @@ sub getDevicesFromUdev {
+ }
+
+ foreach my $device (@devices) {
+- next if $device->{TYPE} eq 'cd';
++ next if $device->{TYPE} && $device->{TYPE} eq 'cd';
+ $device->{DISKSIZE} = getDeviceCapacity(device => '/dev/' . $device->{NAME})
+ }
+
+@@ -297,28 +297,61 @@ sub getInterfacesFromIfconfig {
+ next;
+ }
+
+- if ($line =~ /^(\S+)/) {
++ if ($line =~ /^([\w\d.]+)/) {
+ # new interface
++
+ $interface = {
+ STATUS => 'Down',
+ DESCRIPTION => $1
+ }
++
++ }
++ if ($line =~ /
++ inet \s ($ip_address_pattern) \s+
++ netmask \s ($ip_address_pattern) \s+
++ broadcast \s $ip_address_pattern
++ /x) {
++ $interface->{IPADDRESS} = $1;
++ $interface->{IPMASK} = $2;
++ }
++
++ if ($line =~ /
++ ether \s ($mac_address_pattern)
++ .+
++ \( ([^)]+) \)
++ /x) {
++ $interface->{MACADDR} = $1;
++ $interface->{TYPE} = $2;
++ }
++
++ if ($line =~ /inet6 \s (\S+)/x) {
++ $interface->{IPADDRESS6} = $1;
+ }
++
+ if ($line =~ /inet addr:($ip_address_pattern)/i) {
+ $interface->{IPADDRESS} = $1;
+ }
++
+ if ($line =~ /Mask:($ip_address_pattern)/) {
+ $interface->{IPMASK} = $1;
+ }
++
+ if ($line =~ /inet6 addr: (\S+)/i) {
+ $interface->{IPADDRESS6} = $1;
+ }
++
+ if ($line =~ /hwadd?r\s+($mac_address_pattern)/i) {
+ $interface->{MACADDR} = $1;
+ }
++
+ if ($line =~ /^\s+UP\s/) {
+ $interface->{STATUS} = 'Up';
+ }
++
++ if ($line =~ /flags=.*[<,]UP[>,]/) {
++ $interface->{STATUS} = 'Up';
++ }
++
+ if ($line =~ /link encap:(\S+)/i) {
+ $interface->{TYPE} = $1;
+ }
+@@ -411,7 +444,8 @@ This module provides some generic functions for Linux.
+
+ =head2 getDevicesFromUdev(%params)
+
+-Returns a list of devices, by parsing udev database.
++Returns a list of devices, by parsing /dev/.udev directory.
++This directory is not exported anymore with recent udev.
+
+ Availables parameters:
+
+diff --git a/lib/FusionInventory/Agent/Tools/Screen.pm b/lib/FusionInventory/Agent/Tools/Screen.pm
+index 25111b8..16bb9a7 100644
+--- a/lib/FusionInventory/Agent/Tools/Screen.pm
++++ b/lib/FusionInventory/Agent/Tools/Screen.pm
+@@ -450,7 +450,7 @@ sub parseEdid {
+ while (length($v) >= 18) {
+ (my $pixel_clock, my $vv, $v) = unpack("v a16 a*", $v);
+ last if !$pixel_clock;
+- my $h = build_detailed_timing($pixel_clock, $vv);
++ my $h = _build_detailed_timing($pixel_clock, $vv);
+ push @{$edid{detailed_timings}}, $h
+ if $h->{horizontal_active} > 1 && $h->{vertical_active} > 1;
+ }
+
only in patch2:
unchanged:
--- fusioninventory-agent-2.2.3.orig/debian/patches/ssl_cert_backport.diff
+++ fusioninventory-agent-2.2.3/debian/patches/ssl_cert_backport.diff
@@ -0,0 +1,266 @@
+diff --git a/t/ssl/cnf/ca.cnf b/t/ssl/cnf/ca.cnf
+index efd29d7..d9cd935 100644
+--- a/t/ssl/cnf/ca.cnf
++++ b/t/ssl/cnf/ca.cnf
+@@ -21,7 +21,7 @@ authorityKeyIdentifier = keyid:always,issuer:always
+ default_ca = default_ca
+
+ [ default_ca ]
+-dir = t/ssl
++dir = .
+ certificate = $dir/crt/ca.pem
+ private_key = $dir/key/ca.pem
+ certs = $dir/crt # Where the issued certs are kept
+@@ -31,7 +31,7 @@ database = $dir/index.txt # database index file.
+ new_certs_dir = $dir/new # default place for new certs.
+ crl_dir = $dir/crl # Where the issued crl are kept
+
+-default_days = 730 # how long to certify for
++default_days = 3650 # how long to certify for
+ default_crl_days= 30 # how long before next CRL
+ default_md = md5 # which md to use.
+ preserve = no # keep passed DN ordering
+diff --git a/t/ssl/crt/good.pem b/t/ssl/crt/good.pem
+index 90fe0bc..3e5a323 100644
+--- a/t/ssl/crt/good.pem
++++ b/t/ssl/crt/good.pem
+@@ -2,69 +2,69 @@ Certificate:
+ Data:
+ Version: 1 (0x0)
+ Serial Number: 1 (0x1)
+- Signature Algorithm: md5WithRSAEncryption
++ Signature Algorithm: md5WithRSAEncryption
+ Issuer: O=fusioninventory.org, OU=test certification authority, CN=test_ca/emailAddress=test@fusioninventory.org
+ Validity
+- Not Before: Jul 29 20:21:23 2010 GMT
+- Not After : Jul 28 20:21:23 2012 GMT
++ Not Before: Aug 1 15:43:22 2012 GMT
++ Not After : Jul 30 15:43:22 2022 GMT
+ Subject: O=fusioninventory.org, OU=trusted test certificate, CN=localhost/emailAddress=test@fusioninventory.org
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+- 00:b6:21:74:de:3d:8c:65:2a:8e:32:54:ca:6a:ab:
+- f7:8c:2b:01:4d:b0:9a:39:1c:85:bd:26:5b:67:c4:
+- b8:b0:26:73:59:e2:f0:4a:a1:0d:99:32:d0:54:18:
+- ae:ae:f2:8e:42:ef:71:1a:3f:f9:1e:df:7f:81:4e:
+- 7c:a3:53:e8:6d:b2:82:b0:76:d0:ea:f7:83:42:6a:
+- 66:85:a3:98:69:b0:07:ea:38:b5:5d:62:9d:6f:b3:
+- a1:64:39:c4:a3:94:c3:cb:fd:a7:d1:4a:01:ce:99:
+- b6:dd:83:ed:29:48:96:63:09:9b:96:86:d6:6c:fa:
+- 35:82:19:65:42:be:16:c0:65:ef:50:22:25:ad:2a:
+- 9a:a3:21:e4:76:42:28:bb:7a:9b:4f:7d:11:78:5a:
+- a6:04:fc:33:03:30:e9:6a:ae:f0:8c:d5:67:43:17:
+- 07:06:43:d6:bc:f9:61:b3:68:a5:1c:04:c6:a7:93:
+- 23:7b:fe:15:35:97:3c:60:0b:78:22:54:a6:3d:4c:
+- 9d:52:3b:33:23:ad:c1:a7:08:24:0b:e5:5d:9c:cb:
+- 39:18:68:b3:80:61:76:e3:6f:81:c8:0e:fa:b9:33:
+- 36:56:a7:e8:43:10:a8:03:91:55:57:f2:73:ff:b2:
+- ac:85:bc:0d:af:9e:fd:a4:fe:40:00:e8:9b:7f:d0:
+- c4:53
++ 00:c7:15:c2:3f:2d:59:57:04:a8:0f:e9:2d:49:59:
++ 3a:c6:5b:0e:36:c9:b5:8c:e7:7d:5e:2c:9f:7f:d9:
++ 66:41:71:4f:38:69:de:fb:62:ae:7f:3c:41:82:99:
++ 78:6c:fe:5c:ed:82:0d:a0:27:43:bd:6f:32:36:be:
++ 54:87:ae:a2:1a:21:d5:b3:58:cc:ff:63:65:ba:f2:
++ 10:5b:03:c8:51:77:37:20:a9:21:6d:d0:43:fc:89:
++ 9b:29:49:14:aa:46:9f:cf:0b:74:7a:c0:ea:af:b4:
++ eb:25:e7:b5:d4:35:57:65:ee:f5:db:a2:c3:94:5f:
++ cd:01:db:5a:14:4c:9c:a4:22:51:94:14:8c:8c:54:
++ fc:a5:a9:ca:93:09:5f:eb:e4:37:23:fb:1e:87:b4:
++ a5:8c:85:df:3e:16:78:a4:84:29:e0:3f:b8:db:c8:
++ b9:fd:2e:d2:b5:83:c4:dc:f6:8f:e4:80:2e:36:57:
++ f2:15:8c:bc:d1:96:ae:c6:04:37:03:6d:cc:a6:5c:
++ 00:8f:d8:48:4e:49:0e:62:cf:55:68:6c:30:37:8f:
++ 9e:30:ae:5c:5c:d9:77:45:35:49:68:08:65:f0:61:
++ 6a:77:3c:9e:e1:e0:73:74:a8:5d:69:44:18:cf:d3:
++ 63:17:76:80:e9:5f:63:33:dc:0e:cc:cf:a7:c6:be:
++ 29:81
+ Exponent: 65537 (0x10001)
+ Signature Algorithm: md5WithRSAEncryption
+- d0:91:39:7a:e6:d8:71:4c:ef:fc:a5:f9:bd:3d:e8:e7:3b:59:
+- 83:ec:26:0a:67:ee:4a:7b:ca:0c:41:ed:a6:98:14:4a:06:09:
+- f7:1c:76:e7:68:72:7e:10:e0:4e:f9:98:07:f1:10:86:2b:6c:
+- 8d:53:c5:82:f0:f5:02:0b:a8:8d:44:b9:8d:0b:f7:7e:4e:11:
+- dd:e6:2e:a0:37:e1:b9:16:1c:25:f5:29:52:31:8b:38:e2:89:
+- db:49:89:2c:f0:35:a9:06:d7:b7:e5:70:9f:fa:27:a7:b2:ec:
+- 3c:b8:bc:33:d8:f6:f3:7e:e9:80:73:e2:5c:99:a0:a5:ce:2e:
+- 08:9c:2d:96:d8:2d:c9:38:4b:ed:76:7a:fa:fc:2f:ac:32:62:
+- ba:16:e5:36:3a:ea:8b:22:1d:8c:fd:18:2c:c9:b2:83:91:5b:
+- 61:9e:8e:11:a2:ab:ad:09:99:1e:00:56:37:d6:d3:e9:f3:97:
+- d2:2a:65:41:a4:44:db:1b:e2:ae:51:69:f0:38:f9:29:4f:b0:
+- 57:9b:60:3a:b1:aa:8d:8c:31:11:d9:64:12:8a:c0:ab:c4:5a:
+- 02:08:3c:ef:2d:f2:14:67:ef:97:9a:d7:85:df:18:a1:47:15:
+- cb:9c:f8:2b:1a:d9:c0:f5:b2:d1:58:66:a0:ef:df:44:6c:d7:
+- ce:a6:59:bf
++ 45:a9:47:c1:9c:80:66:7c:47:92:e5:87:d5:69:d1:be:91:19:
++ ca:cd:1f:16:c9:7b:d8:45:7b:6b:f8:06:fb:d4:83:93:54:65:
++ 15:6f:0e:fb:d9:2e:1d:08:c5:37:d2:83:56:ab:6a:4e:24:27:
++ a5:e6:79:84:30:62:3f:16:b5:c1:13:83:6b:8e:04:d3:ac:f9:
++ 13:ec:bf:a5:e3:d7:89:c9:a6:17:bd:32:d1:0d:fc:c7:e0:c1:
++ 56:88:4c:f9:7f:ad:f9:10:21:1e:96:a9:43:77:00:68:61:8c:
++ ae:84:c8:20:30:83:52:c4:8a:b2:0c:9c:e6:6b:1e:5c:6a:5a:
++ 3c:33:43:cd:c8:48:a2:58:9f:ad:19:92:e9:8d:85:37:fe:c7:
++ e7:23:d9:4d:47:18:15:80:a4:5f:f5:f6:03:ae:f2:89:a0:61:
++ a5:cf:6c:24:a8:8c:1b:01:55:87:7e:a1:06:ce:5b:5e:3a:07:
++ c2:32:cf:af:10:71:46:ab:40:80:4e:e3:44:3f:ef:9b:5a:f7:
++ f7:fd:39:9e:5d:40:98:44:8b:d0:1d:ac:d3:c0:b7:8b:48:04:
++ db:4e:85:15:6d:f9:9a:6e:1e:3e:f6:fc:5c:a8:b1:99:3c:4c:
++ 5d:0b:97:87:45:ff:98:fd:9a:f8:47:bf:51:49:96:2b:0b:7b:
++ e8:9c:df:40
+ -----BEGIN CERTIFICATE-----
+ MIIDczCCAlsCAQEwDQYJKoZIhvcNAQEEBQAwgYAxHDAaBgNVBAoTE2Z1c2lvbmlu
+ dmVudG9yeS5vcmcxJTAjBgNVBAsTHHRlc3QgY2VydGlmaWNhdGlvbiBhdXRob3Jp
+ dHkxEDAOBgNVBAMUB3Rlc3RfY2ExJzAlBgkqhkiG9w0BCQEWGHRlc3RAZnVzaW9u
+-aW52ZW50b3J5Lm9yZzAeFw0xMDA3MjkyMDIxMjNaFw0xMjA3MjgyMDIxMjNaMH4x
++aW52ZW50b3J5Lm9yZzAeFw0xMjA4MDExNTQzMjJaFw0yMjA3MzAxNTQzMjJaMH4x
+ HDAaBgNVBAoTE2Z1c2lvbmludmVudG9yeS5vcmcxITAfBgNVBAsTGHRydXN0ZWQg
+ dGVzdCBjZXJ0aWZpY2F0ZTESMBAGA1UEAxMJbG9jYWxob3N0MScwJQYJKoZIhvcN
+ AQkBFhh0ZXN0QGZ1c2lvbmludmVudG9yeS5vcmcwggEiMA0GCSqGSIb3DQEBAQUA
+-A4IBDwAwggEKAoIBAQC2IXTePYxlKo4yVMpqq/eMKwFNsJo5HIW9JltnxLiwJnNZ
+-4vBKoQ2ZMtBUGK6u8o5C73EaP/ke33+BTnyjU+htsoKwdtDq94NCamaFo5hpsAfq
+-OLVdYp1vs6FkOcSjlMPL/afRSgHOmbbdg+0pSJZjCZuWhtZs+jWCGWVCvhbAZe9Q
+-IiWtKpqjIeR2Qii7eptPfRF4WqYE/DMDMOlqrvCM1WdDFwcGQ9a8+WGzaKUcBMan
+-kyN7/hU1lzxgC3giVKY9TJ1SOzMjrcGnCCQL5V2cyzkYaLOAYXbjb4HIDvq5MzZW
+-p+hDEKgDkVVX8nP/sqyFvA2vnv2k/kAA6Jt/0MRTAgMBAAEwDQYJKoZIhvcNAQEE
+-BQADggEBANCROXrm2HFM7/yl+b096Oc7WYPsJgpn7kp7ygxB7aaYFEoGCfccdudo
+-cn4Q4E75mAfxEIYrbI1TxYLw9QILqI1EuY0L935OEd3mLqA34bkWHCX1KVIxizji
+-idtJiSzwNakG17flcJ/6J6ey7Dy4vDPY9vN+6YBz4lyZoKXOLgicLZbYLck4S+12
+-evr8L6wyYroW5TY66osiHYz9GCzJsoORW2GejhGiq60JmR4AVjfW0+nzl9IqZUGk
+-RNsb4q5RafA4+SlPsFebYDqxqo2MMRHZZBKKwKvEWgIIPO8t8hRn75ea14XfGKFH
+-Fcuc+Csa2cD1stFYZqDv30Rs186mWb8=
++A4IBDwAwggEKAoIBAQDHFcI/LVlXBKgP6S1JWTrGWw42ybWM531eLJ9/2WZBcU84
++ad77Yq5/PEGCmXhs/lztgg2gJ0O9bzI2vlSHrqIaIdWzWMz/Y2W68hBbA8hRdzcg
++qSFt0EP8iZspSRSqRp/PC3R6wOqvtOsl57XUNVdl7vXbosOUX80B21oUTJykIlGU
++FIyMVPylqcqTCV/r5Dcj+x6HtKWMhd8+FnikhCngP7jbyLn9LtK1g8Tc9o/kgC42
++V/IVjLzRlq7GBDcDbcymXACP2EhOSQ5iz1VobDA3j54wrlxc2XdFNUloCGXwYWp3
++PJ7h4HN0qF1pRBjP02MXdoDpX2Mz3A7Mz6fGvimBAgMBAAEwDQYJKoZIhvcNAQEE
++BQADggEBAEWpR8GcgGZ8R5Llh9Vp0b6RGcrNHxbJe9hFe2v4BvvUg5NUZRVvDvvZ
++Lh0IxTfSg1arak4kJ6XmeYQwYj8WtcETg2uOBNOs+RPsv6Xj14nJphe9MtEN/Mfg
++wVaITPl/rfkQIR6WqUN3AGhhjK6EyCAwg1LEirIMnOZrHlxqWjwzQ83ISKJYn60Z
++kumNhTf+x+cj2U1HGBWApF/19gOu8omgYaXPbCSojBsBVYd+oQbOW146B8Iyz68Q
++cUarQIBO40Q/75ta9/f9OZ5dQJhEi9AdrNPAt4tIBNtOhRVt+ZpuHj72/FyosZk8
++TF0Ll4dF/5j9mvhHv1FJlisLe+ic30A=
+ -----END CERTIFICATE-----
+diff --git a/t/ssl/key/ca.pem b/t/ssl/key/ca.pem
+index f131645..3caf2e4 100644
+--- a/t/ssl/key/ca.pem
++++ b/t/ssl/key/ca.pem
+@@ -1,30 +1,27 @@
+------BEGIN ENCRYPTED PRIVATE KEY-----
+-MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIk1RxLj1MgGkCAggA
+-MBQGCCqGSIb3DQMHBAibQ2NS4+8FHQSCBMiP9wNXU4tO44RNix6C3dUa3/P+fQ2N
+-MvmGVJDmJDp3iq+RDKG8O29Qnv/h7/9L6cud8meQ56E4rrI9vw7Lmu325QSAfkqz
+-xFnBpcJ1YufDfKcd8Asm+v/vpRYQw9pnkir0NLOhPAz1nwKbxV0sArDUBdwKpVbi
+-0OXGg3XARIRrvdstIuaGIB5PApKAfNI++v60/8gA45Y6Nc6KwcezXcuvsLKH1tHz
+-zy7ALZUXVQGhFXjL4ytHc21cHS3j/SpmYONSQei/w5xLG2w9G8KZ7/tL+7wPvrUZ
+-mNAYh7PCf32n0IdxFA8lakktvZAgfGXp+6jIKJORAVnUWPPy0r8O5U2CdWY8yi45
+-lxVSIPLa/4QP9MTbdge9rvKi6T1cyr92c4nxkxwGWWAAnz42KTqn4TQ3pTnz7/pl
+-qSAhAvK+7pPfXTx+s09rakcPZR91E7/bfJ+y+tfGbB/dCO+5Bck9FP4G7e6VoItE
+-SnpQCQ7/fmwbmKvZ68HBhi1n8sfjj2rAU1ZOOBMDW8Y55ZHL2oTz5ctdnYsYqMRL
+-59lmDeyVpqgFOaZaQdpIL5PisTS+ZZNg1/JzkMFJypNFVUGaGkmjOdU7hew3Slym
+-QudXURUv6Nc8S9HfEyZxe9IA9Qkbir5xbeWk3IyD395DMr1Z1KeNvLZR2TKTqraE
+-gQxRriZYWo5szgwsV9OXG+cKOWy1nupoHwFkZkrDUaD/zOlbAk5fFOY9nMFxm8j7
+-UJ3jcnmaoCADH3/YrOa0aaHmiIHD5yIdPL8/LOfOw9cSZmy79B6lm3/A14n4vege
+-8Bgg+IrSqnqSV18QtBIsT/qNXjRzltZKkzUzRvibba1Sq0ma0IBv+ZtyIXRMJzTx
+-vogvfAaH6SfweRvEJe5cKR7XDNfggUwsS6GnRxoee/Wp6tj5qrR8bh7atdqD7Oqu
+-nepqs92sNIhB0sn3+1tQwLxKn7xXMWn/w+6Axr66Ed5UhBCVeP18Fv2XBSJmKWdM
+-xsVlgGAaYdCBkCTfHen3Oejlzmq2Ilke74mmE2c7vhhhPcMLmFuykKzB2uhCU+U4
+-Sz0BrRP8e+wSwCgIOEURa7Je22wUSo5+G9QpZh+UhCpYqoOLbzUP6pdwZn7IN0c4
+-GtSuwK7w/22dYZY1mhIkGSE/u1i2CBVJ/oMFuEk5BczjsKOdxidnX+LYcmhAlvgu
+-7sEzhHkDtzTDtRNQDMmYZb43avfubjgjt7wPEYVq+0ZLVGFT1IHY6NcQ0fvcDxLi
+-TLok84gbIv6Txdtyqbty4KVoECVp5TlywgAkbGQYuMNJptJEPb96ph2yoCcfj1A/
+-L+sTglZUJmJpiAHug4kOttj1TflXA85PGZkg+FX2KLmJDWoPpjp4vJMoD/oIwJI6
+-o8Oj/Gn/GJHIylmojZm7QtLDxGVgKTKskPPgZkrgyLzUnX9X+1GDj5r9ITrkKPng
+-5mQB2YBf52iKCXZOwOT2LAY2Mkm/tI7uGi0zn1YDWnc6KxUpHcrIACsPw/TsTMiE
+-uOEPREioDiq3+9dhR9k+w3JBz/Qh7fpWVRNlgCSkGZdY0t8EJLxWA5cXtkLEXBev
+-mfTsxk2pJyPXbmF7LQN7LXWEiAerxQW3pbZ3VBjP7ZElZ5mE3OIQRs+oYVC7akNO
+-XSk=
+------END ENCRYPTED PRIVATE KEY-----
++-----BEGIN RSA PRIVATE KEY-----
++MIIEpAIBAAKCAQEA5iT5gIoUDfhM5iV79GyAAhWvoGaBB0w2zuS9rTFJniybx5EV
++lmYxBzmUBo6gFoUp5nQe98HKnK6vFV+wpCGi5HTqaptTXo4a+e7MWxmTfhY0MJQA
++FLUuNob2n2EW9GUB2kroEGE57beuW07l+jNjbggMhujhU+fDPq2CJH2vDKijPF61
++346i/V+qlo5eMTNeD7FUTN0aCjELPSO/9FVrTlU6boLr67rK39s4/xVXwJtijE7x
++NK8OdGg9KPei2mwRs/aHzuM5dewyi89XQ9QlIH7EDm1MMi76vIcKJPD7NJ7XRUGj
++DywWK2C16FJVTrTO3MGQykrGi6tNSPHDfTsZfwIDAQABAoIBAQDN9osfwPK/qdZQ
++JX2wOiW5N+UsHHAestNeBxHE3JYwq2VijXIPXjdEawARejTE0rmz13obamBEJoTk
++EPYJfVzFLejYLVfICE8WG+LhKJt5vK9KRjloTtkjzVcLPZ2IbJji3iSe/BQWrUqp
++xotEhhbW0vc7CVEWgRSXlDojJCOzo8mzBhxLRdf2Pyjzj/YAp1DlkUOk0oSwBV1u
++Cz00E8MdojJQF8Z9qX3bkafqaNZr7ZMgC+pIFRVuJsQWW+6iTyeS6TVR6SRLqi5X
++2B+skleB0XeCgD9tb0tI8X6TaRaUsBcSqVLpiGDm3pion9sSvCzPijy+B6HE77wO
++VUYOaGlZAoGBAPRsicYQNVdfYb+G3BF2F0pHseeL2wQdHPKNOO2r2lGSYguJr+5F
++t8+qA2DdxRAISrsSMFS2is5F2vHTMIZny0i79XH2ly88BzDWkGwRdlli6bOXRG2r
++eohO89kR0sA0QjOqzkraGBP+J0yykMb1yAyTqn/ZcVm41Z7TimLBVpfTAoGBAPEL
++TrIlj9CqJtQhPk16nS1OnuIZ7D3ws3iJVFo+zeMKnqi1uAbh6ytFWVrDlbzstuq7
++RvQnyoesAjIbILqxTrtMRId8gw/OIl31PY8cBvrHgglmJHB0vHdiqfcILm2kkBMv
++qxbczZozndRlPQ83Lw/vw6P2sTD0FoHu1wPD2zglAoGBAMbkv2PFcrJrci4Y/mDT
++GHagSpshShJZ4mFZG5cDPb8c/91lqBya7Mz2CpO7Qo0eQjlhvqRgeikJ3PTlJlpo
++gZnpIPwgbbvI/Az4vELEHurzuzohgFRBso7SuEjN4RH4NFq4xe9Q80Dpkm8t6vOL
++ssLRMm+gsEUTS/lXKAfeTalzAoGAT2lRQOGdErqr1iEpnG7zz1RihczShsmA5wof
++Tyf3vn/mK2DKwwG072mGeZ+L+lTmIkkWpCNj1vS1OHq1eqwlaxFCVnyP1SotKlU8
++NaSfLAmEbsJG6QGcgZxwsGDyos6fZKLEs+CEn/O3YJ0F07hzecWc56zDTYRs0du0
++3Jmu5D0CgYBTYh8wZkswTlayiblLCEs515sFWCYeegtve5ttfl2HGng2IEThqOuc
++kU64C00R2GsEE6bU3OfOeLjSat2p/jYD9+Zpc8w48kM84D57Fxoa3IBvjmaYElX4
++1Ci2EVvHiwokvqZaQFA+zDCHnCPawOPnohh/GxXjlYcmeRHLy1oGVw==
++-----END RSA PRIVATE KEY-----
+diff --git a/t/ssl/key/good.pem b/t/ssl/key/good.pem
+index e8eeccf..7fcd48e 100644
+--- a/t/ssl/key/good.pem
++++ b/t/ssl/key/good.pem
+@@ -1,28 +1,28 @@
+ -----BEGIN PRIVATE KEY-----
+-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2IXTePYxlKo4y
+-VMpqq/eMKwFNsJo5HIW9JltnxLiwJnNZ4vBKoQ2ZMtBUGK6u8o5C73EaP/ke33+B
+-TnyjU+htsoKwdtDq94NCamaFo5hpsAfqOLVdYp1vs6FkOcSjlMPL/afRSgHOmbbd
+-g+0pSJZjCZuWhtZs+jWCGWVCvhbAZe9QIiWtKpqjIeR2Qii7eptPfRF4WqYE/DMD
+-MOlqrvCM1WdDFwcGQ9a8+WGzaKUcBMankyN7/hU1lzxgC3giVKY9TJ1SOzMjrcGn
+-CCQL5V2cyzkYaLOAYXbjb4HIDvq5MzZWp+hDEKgDkVVX8nP/sqyFvA2vnv2k/kAA
+-6Jt/0MRTAgMBAAECggEACTcgJq6Oj//bOgi4RTV2TQ1P/5JT+1fKHIv4TAPUJHWN
+-mJq29c+4VGwRxm+JRyjWseRToLRj8n/0f6JtBAaW2BYULsGUSI9FgPLJRTHF4HMb
+-s2ozIwp+VMyN+fhCTtSUI5ouB5TrCn0Ul5i5Q0F8+n3d9XvVFaaDVpXaXcoodIud
+-6Od2q/8l8aPJJIpHRgzYaGiEJgxpUyuFMoBFM5au1Z2CnThrDzs5tPngiJIcy4pd
+-3ccO6fUrYAwAv9/krqX0ZrNrV3cwqtS98bNIMYnsW0Z/dCQzqRZMmvI58gJVA0mL
+-22VFq3f8/tzoL6JNm6pHSfUVlNNj2UWxIl7qO6NKQQKBgQDppuCzLwkmG0Kniw9P
+-Y2IZ6CxeqEwGxP0J6kXKnUiSVamuSQ9fsYaoKdYtg1CfmYJt6QFP9M20odBPXNDq
+-KZ8BajANtPHIgJ2kxm8XMuamHgzhTc5Yk4DPXl6UteP2SNEHxkUZxT6SegsvlTbp
+-kEre617YFh8spVFIfnbMlkkNewKBgQDHjQxdiRtwJYnK8bpt2rYdkAGZ6QbzRwi0
+-hYE5D81SdTbSZZGrEFEHCDT/gHzlRDHy085MgGOJPudJ+P0PKjlEvEYXkzWkiVLB
+-SEMOVAuKUSDzOcy0sDNInsmF6WJefDq4hwjco6z92QyNKzm/Fsl3bY72dK0opgDG
+-tqECSSRxCQKBgBgi5v9bkoRfOIl6MgCvcYjflQXKOOBSJRmLG96MVNzZAIhCf9YQ
+-zqo8eCWHdSKnhvO3qC0MStuoA47PNb2awxQwVfp0gK2Hq8FDxmINHgp2/DmiAfjg
+-c+P4CakvCPd+GinFb4nz+DzFYrZtoZiLEVDp24hS8LF5+mWUuszzkWRVAoGBAI/I
+-BJHcuYVrtsYguFhxD2lrmovASL6/fvk7fKmVxjZUuKSOhJACWK+9bRpwBQ3Yvjid
+-/nZGx/Fa/qHhIs1regoZslNIQY2FWLhljdNkIVCPNjOqgOHsV3dK2h9/0t4Lmu/c
+-dDkuQfZCDvYkoB4cmBtSOIFB/oZcXhDQBGE2PGipAoGAcnneXhR9Hi/dtvLsFUE4
+-qfo220IwT9m3Ou8xmhu584iw39Jm6h58j8MTQZxnIYVw0JMM/5nvdkctcYAQAtAP
+-l3tjX/sVmPlbQaZLuM3KR+jGGtuw4Uix2KnRqQmG+F2rJSNv0+8UTFnr/a2gi+8r
+-Z0/7KSfELvycMYHZS5vC4cE=
++MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDHFcI/LVlXBKgP
++6S1JWTrGWw42ybWM531eLJ9/2WZBcU84ad77Yq5/PEGCmXhs/lztgg2gJ0O9bzI2
++vlSHrqIaIdWzWMz/Y2W68hBbA8hRdzcgqSFt0EP8iZspSRSqRp/PC3R6wOqvtOsl
++57XUNVdl7vXbosOUX80B21oUTJykIlGUFIyMVPylqcqTCV/r5Dcj+x6HtKWMhd8+
++FnikhCngP7jbyLn9LtK1g8Tc9o/kgC42V/IVjLzRlq7GBDcDbcymXACP2EhOSQ5i
++z1VobDA3j54wrlxc2XdFNUloCGXwYWp3PJ7h4HN0qF1pRBjP02MXdoDpX2Mz3A7M
++z6fGvimBAgMBAAECggEBAKa2MdN1xjp4S8QHH0Us02sHFQAMKVu0/ea+t1H4Wwiy
++OgSjo3YfTMB/VNxoZ8/dsTOylHZoavFXDFWLTH3SXyxC6REma4PxWF8UFV4h7L1L
++d36CItwyarwu/x+zcvqj6W8XyJKCugQpHEDBqCHsCSPy1y71PZIiJypG5UfaX9GQ
++7rNkO4sk6GcwSukDKWlkUdBmK63xKId//xJCRPQ1bWN4TSlU9oOPiZE+Pj6Wsu+B
++qlrsNQXrkhGUSChhWreB3EkkghiJVukpTfcSoWPEpmoYyAj/Txrn1uCy65zbr4VX
++HmeWw4XyEiWfzWPFOHiavElJhFg+eRaDjNMphf1G2YECgYEA/mU0v6FzgkIABq79
++uc3VIENaZpYyWbrYfvwSb/Lg/IP7Oi5g7JE6DXFBLx+qUfIEF2ADOYIvGsF7R+0O
++OWnMJI22e/Ojo9TvVBIRk0nSGgNiz0JXTg1uS+F9QV2Eo/3TH7u3dY9ZXgM9czYg
++0R6sXUjAl+5mVjGxMQnx8Pg2Gu8CgYEAyFc9BnblHmHBtqMMAsGYlydrcnBBQiaS
++oDXE7uoWjmt3d82jXMHCQXTi1HK2vWVT0Ivjf8SfWYfK+UxNmSyHvYo8+c1DMvEQ
++oFcoOUheoRtAIQWXk+9Ui+2Zhc2T+G05yXg/2QekYLbk7hBri3ijathi2guHX+fD
++G3QYjxGkwo8CgYEA2FjLtlkg+dsVWJnDkBu7r/d3zxzW7zaW3c+UAn7k1fuMUVuV
++9DpBy6LQk7nzSENxNUvjEipj0vZO2MmCulL+WOvoEJwQQ8lYTAAd0EwMkTDl/Gto
++Aior7f5zXn6gyjKYNTmYeTMTBn/s56lV2WKjpaW0nMETaSRTk+foSU1d/iMCgYEA
++vvTAOyAqpXniTXY95YaoLjMprCupWCcyDTkTG/LOSzPN7Mh6VNhukzuZVYx9+CrT
++5+zejJNam9jeNB9xu3WBcL2J/0SSL8Us5tgMhAUiBYfW6WLOJvixaqqvcaUQzHM3
++6HwQx4oMOQ87SFsoVwlHInlcR59Dirt68fkHy56yn6sCgYBavwk3GC50aPNHfoOc
++g/czYvS6t+3MB2R9mN/ED3iDiLwzZPsn4wtmvXREYvz3n7YVehYQmpXLAJklgaQv
++DXwf8lgETXpM82gOZT5n7Rhozd53tYL1qGcRgNWOjxGhi0bmOAC5ZnwsJyOr75EY
++0ZkVwULxMKpoN7ZgRRK1lqXXrA==
+ -----END PRIVATE KEY-----
Reply to: