
ruz at bestpractical
Apr 30, 2012, 12:07 PM
Post #1 of 1
(94 views)
Permalink
|
|
rt branch, 4.2/smime-v2, updated. rt-4.0.4-513-g81521f5
|
|
The branch, 4.2/smime-v2 has been updated via 81521f5eae00c0beb518a19f6591459f59360e8a (commit) via 9e56f97e18a5f6eb78d5bf84c07fa41c4c82b774 (commit) via 94b972a6ba43339a64d007f94a7d0700ada7d0e8 (commit) via 9ded926e928ea595fbe8dc08abcf55be4c828974 (commit) via fb5ae1d2754565576c8fa3c42f4105e98d73bbcd (commit) via 59a702f666b6a9942aed5eabf229e59e36124186 (commit) via e7c0d0d1a65f2861f996122720b2d04756ebb4d1 (commit) via 78ff1d33f74bf8c2430237145b7e27a2b79b237c (commit) via 386cd724b7ff7139ce291726673893974f6f8726 (commit) from b48dafb0098d98a0d3ef789d4e65093cb4837a3e (commit) Summary of changes: lib/RT/Config.pm | 9 ++++ lib/RT/Crypt.pm | 3 - lib/RT/Crypt/SMIME.pm | 48 ++++++++++++++----- share/html/Ticket/Elements/ShowCryptStatus | 2 +- .../Ticket/Elements/ShowTransactionAttachments | 2 +- 5 files changed, 46 insertions(+), 18 deletions(-) - Log ----------------------------------------------------------------- commit 59a702f666b6a9942aed5eabf229e59e36124186 Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Fri Apr 20 23:29:02 2012 +0400 don't load crypt implementations right away loading GnuPG module fails if you don't have required modules diff --git a/lib/RT/Crypt.pm b/lib/RT/Crypt.pm index c19bdee..8f348d1 100644 --- a/lib/RT/Crypt.pm +++ b/lib/RT/Crypt.pm @@ -4,9 +4,6 @@ use warnings; package RT::Crypt; -require RT::Crypt::GnuPG; -require RT::Crypt::SMIME; - =head1 NAME RT::Crypt - encrypt/decrypt and sign/verify subsystem for RT commit fb5ae1d2754565576c8fa3c42f4105e98d73bbcd Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Fri Apr 20 23:29:52 2012 +0400 more protection, make sure crypt modules are laoded diff --git a/lib/RT/Config.pm b/lib/RT/Config.pm index d4d4be7..ba11a12 100644 --- a/lib/RT/Config.pm +++ b/lib/RT/Config.pm @@ -619,6 +619,15 @@ our %META = ( require RT::Crypt; my @enabled = RT::Crypt->EnabledProtocols; + foreach my $proto (splice @enabled) { + local $@; + eval "require RT::Crypt::$proto; 1" or do { + $RT::Logger->error("You enabled $proto cryptography, but we couldn't load module RT::Crypt::$proto: $@"); + next; + }; + push @enabled, $proto; + } + my $opt = $self->Get('Crypt'); $opt->{'Enable'} = scalar @enabled;; unless ( $opt->{'Incoming'} && @{ $opt->{'Incoming'} } ) { commit 9ded926e928ea595fbe8dc08abcf55be4c828974 Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Mon Apr 30 22:28:38 2012 +0400 drop shift() call, shouldn't be there it was a typo, sometimes harmless, sometimes can shift defined value from @ARGV. Depends on web server environment. diff --git a/lib/RT/Crypt/SMIME.pm b/lib/RT/Crypt/SMIME.pm index 2a26166..45c4eef 100644 --- a/lib/RT/Crypt/SMIME.pm +++ b/lib/RT/Crypt/SMIME.pm @@ -92,7 +92,7 @@ and passphrase pairs for keys in the keyring. =cut -{ my $cache = shift; +{ my $cache = ''; sub OpenSSLPath { return $cache ||= RT->Config->Get('SMIME')->{'OpenSSL'}; } } commit 94b972a6ba43339a64d007f94a7d0700ada7d0e8 Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Mon Apr 30 22:31:48 2012 +0400 be double sure openssl path is set to something we do it in a few places, it's ok do it here as well diff --git a/lib/RT/Crypt/SMIME.pm b/lib/RT/Crypt/SMIME.pm index 45c4eef..b875b8f 100644 --- a/lib/RT/Crypt/SMIME.pm +++ b/lib/RT/Crypt/SMIME.pm @@ -94,7 +94,7 @@ and passphrase pairs for keys in the keyring. { my $cache = ''; sub OpenSSLPath { - return $cache ||= RT->Config->Get('SMIME')->{'OpenSSL'}; + return $cache ||= RT->Config->Get('SMIME')->{'OpenSSL'} || 'openssl'; } } sub SignEncrypt { commit 9e56f97e18a5f6eb78d5bf84c07fa41c4c82b774 Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Mon Apr 30 22:34:19 2012 +0400 special case of how openssl prints SMIME certs It's possible to have the following structure: <key><separator> <value with separator> Fix is sort of workaround diff --git a/lib/RT/Crypt/SMIME.pm b/lib/RT/Crypt/SMIME.pm index b875b8f..e4d1291 100644 --- a/lib/RT/Crypt/SMIME.pm +++ b/lib/RT/Crypt/SMIME.pm @@ -830,7 +830,9 @@ sub ParseCertificateInfo { # Validity # no trailing ':' # Not After : XXXXXX # space before ':' # countryName=RU # '=' as separator - my ($prefix, $key, $value) = ($line =~ /^(\s*)(.*?)\s*(?:[:=]\s*(.*?)|)\s*$/); + # Serial Number: + # he:xv:al:ue + my ($prefix, $key, $value) = ($line =~ /^(\s*)(.*?)\s*(?:(?:=\s*|:\s+)(\S.*?)|:|)\s*$/); if ( $first_line ) { $prefix{$prefix} = \%res; $first_line = 0; @@ -854,6 +856,26 @@ sub ParseCertificateInfo { ($prev_prefix, $prev_key) = ($prefix, $key); } + my ($filter_out, $wfilter_out); + $filter_out = $wfilter_out = sub { + my $h = shift; + foreach my $e ( keys %$h ) { + next unless ref $h->{$e}; + if ( 1 == keys %{$h->{$e}} ) { + my $sube = (keys %{$h->{$e}})[0]; + if ( ref $h->{$e}{$sube} && !keys %{ $h->{$e}{$sube} } ) { + $h->{$e} = $sube; + next; + } + } + + $filter_out->( $h->{$e} ); + } + }; + Scalar::Util::weaken($wfilter_out); + + $filter_out->(\%res); + return %res; } commit 81521f5eae00c0beb518a19f6591459f59360e8a Author: Ruslan Zakirov <ruz [at] bestpractical> Date: Mon Apr 30 22:37:43 2012 +0400 special case of how openssl prints SMIME certs openssl 0.9.8 and openssl 1.0.1 print the same cert very differently. 1.0.1 prints the following thing: <key>: ... nested structure ... <otherkey>: <value> ... nested structure continues ... Example: Data: ... Serial Number: 9974010075738841110 (0x8a6acd51be94a016) Signature Algorithm: sha1WithRSAEncryption Issuer: ... ... So it's hard to say where Issuer belongs. Now "<key>: <value>" strings don't delete pointers to existing placeholders for nested structures. Hope output wouldn't get more messier. diff --git a/lib/RT/Crypt/SMIME.pm b/lib/RT/Crypt/SMIME.pm index e4d1291..7375594 100644 --- a/lib/RT/Crypt/SMIME.pm +++ b/lib/RT/Crypt/SMIME.pm @@ -848,12 +848,12 @@ sub ParseCertificateInfo { } else { $put_into->{$key} = {}; - } - delete $prefix{$_} foreach - grep length($_) > length($prefix), - keys %prefix; + delete $prefix{$_} foreach + grep length($_) > length($prefix), + keys %prefix; - ($prev_prefix, $prev_key) = ($prefix, $key); + ($prev_prefix, $prev_key) = ($prefix, $key); + } } my ($filter_out, $wfilter_out); ----------------------------------------------------------------------- _______________________________________________ Rt-commit mailing list Rt-commit [at] lists http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
|