[Rt-commit] rt branch, 3.8-trunk, updated. rt-3.8.6-155-g019e19a
Ruslan Zakirov
ruz at bestpractical.com
Wed Dec 9 16:15:13 EST 2009
The branch, 3.8-trunk has been updated
via 019e19a791d0b4f8d42a262cf7cf7b27d8cfb39a (commit)
from 8232b1d4b253f3c5f0c772cfca442f9a6dfd2071 (commit)
Summary of changes:
lib/RT/Crypt/GnuPG.pm | 44 +++++++++++++++++++++++----------
lib/RT/Interface/Email/Auth/GnuPG.pm | 13 +++++++---
2 files changed, 39 insertions(+), 18 deletions(-)
- Log -----------------------------------------------------------------
commit 019e19a791d0b4f8d42a262cf7cf7b27d8cfb39a
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Thu Dec 10 00:12:38 2009 +0300
* don't overwrite gpg status, importat for nested inline signatures
diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index b8e2cb2..f9f6337 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -1026,46 +1026,62 @@ sub FindProtectedParts {
=cut
sub VerifyDecrypt {
- my %args = ( Entity => undef, Detach => 1, SetStatus => 1, @_ );
+ my %args = (
+ Entity => undef,
+ Detach => 1,
+ SetStatus => 1,
+ AddStatus => 0,
+ @_
+ );
my @protected = FindProtectedParts( Entity => $args{'Entity'} );
my @res;
# XXX: detaching may brake nested signatures
foreach my $item( grep $_->{'Type'} eq 'signed', @protected ) {
+ my $status_on;
if ( $item->{'Format'} eq 'RFC3156' ) {
push @res, { VerifyRFC3156( %$item, SetStatus => $args{'SetStatus'} ) };
if ( $args{'Detach'} ) {
$item->{'Top'}->parts( [ $item->{'Data'} ] );
$item->{'Top'}->make_singlepart;
}
- $item->{'Top'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Top'};
} elsif ( $item->{'Format'} eq 'Inline' ) {
push @res, { VerifyInline( %$item ) };
- $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Data'};
} elsif ( $item->{'Format'} eq 'Attachment' ) {
push @res, { VerifyAttachment( %$item ) };
if ( $args{'Detach'} ) {
- $item->{'Top'}->parts( [ grep "$_" ne $item->{'Signature'}, $item->{'Top'}->parts ] );
+ $item->{'Top'}->parts( [
+ grep "$_" ne $item->{'Signature'}, $item->{'Top'}->parts
+ ] );
$item->{'Top'}->make_singlepart;
}
- $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Data'};
+ }
+ if ( $args{'SetStatus'} || $args{'AddStatus'} ) {
+ my $method = $args{'AddStatus'} ? 'add' : 'set';
+ $status_on->head->$method(
+ 'X-RT-GnuPG-Status' => $res[-1]->{'status'}
+ );
}
}
foreach my $item( grep $_->{'Type'} eq 'encrypted', @protected ) {
+ my $status_on;
if ( $item->{'Format'} eq 'RFC3156' ) {
push @res, { DecryptRFC3156( %$item ) };
- $item->{'Top'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Top'};
} elsif ( $item->{'Format'} eq 'Inline' ) {
push @res, { DecryptInline( %$item ) };
- $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Data'};
} elsif ( $item->{'Format'} eq 'Attachment' ) {
push @res, { DecryptAttachment( %$item ) };
- $item->{'Data'}->head->set( 'X-RT-GnuPG-Status' => $res[-1]->{'status'} )
- if $args{'SetStatus'};
+ $status_on = $item->{'Data'};
+ }
+ if ( $args{'SetStatus'} || $args{'AddStatus'} ) {
+ my $method = $args{'AddStatus'} ? 'add' : 'set';
+ $status_on->head->$method(
+ 'X-RT-GnuPG-Status' => $res[-1]->{'status'}
+ );
}
}
return @res;
diff --git a/lib/RT/Interface/Email/Auth/GnuPG.pm b/lib/RT/Interface/Email/Auth/GnuPG.pm
index df987d8..f0fe2c9 100644
--- a/lib/RT/Interface/Email/Auth/GnuPG.pm
+++ b/lib/RT/Interface/Email/Auth/GnuPG.pm
@@ -75,13 +75,18 @@ sub GetCurrentUser {
@_
);
- $args{'Message'}->head->delete($_)
- for qw(X-RT-GnuPG-Status X-RT-Incoming-Encrypton
- X-RT-Incoming-Signature X-RT-Privacy);
+ foreach my $p ( $args{'Message'}->parts_DFS ) {
+ $p->head->delete($_) for qw(
+ X-RT-GnuPG-Status X-RT-Incoming-Encrypton
+ X-RT-Incoming-Signature X-RT-Privacy
+ );
+ }
my $msg = $args{'Message'}->dup;
- my ($status, @res) = VerifyDecrypt( Entity => $args{'Message'} );
+ my ($status, @res) = VerifyDecrypt(
+ Entity => $args{'Message'}, AddStatus => 1,
+ );
if ( $status && !@res ) {
$args{'Message'}->head->add(
'X-RT-Incoming-Encryption' => 'Not encrypted'
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list