1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
use strict;
use warnings;
use RT::Test::Crypt SMIME=>1, tests => undef, actual_server => 1, config => 'Set( @MailPlugins, "Authz::RequireEncrypted" );';
my $test = 'RT::Test::Crypt';
use IPC::Run3 'run3';
use String::ShellQuote 'shell_quote';
use RT::Tickets;
my ($url, $m) = RT::Test->started_ok;
ok $m->login, "logged in";
# configure key for General queue
$test->smime_import_key('sender@example.com');
my $queue = RT::Test->load_or_create_queue(
Name => 'General',
CorrespondAddress => 'sender@example.com',
CommentAddress => 'sender@example.com',
);
ok $queue && $queue->id, 'loaded or created queue';
my $user = RT::Test->load_or_create_user(
Name => 'root@example.com',
EmailAddress => 'root@example.com',
);
$test->smime_import_key('root@example.com.crt', $user);
RT::Test->add_rights( Principal => $user, Right => 'SuperUser', Object => RT->System );
my $mail = RT::Test->open_mailgate_ok($url);
print $mail <<EOF;
From: root\@localhost
To: rt\@$RT::rtname
Subject: This is a test of new ticket creation as root
Blah!
Foob!
EOF
RT::Test->close_mailgate_ok($mail);
{
ok(!RT::Test->last_ticket, 'A ticket was not created');
my ($mail) = RT::Test->fetch_caught_mails;
like(
$mail,
qr/^Subject: RT requires that all incoming mail be encrypted/m,
'rejected mail that is not encrypted'
);
my ($warning) = $m->get_warnings;
like($warning, qr/rejected because the message is unencrypted/);
}
{
# test for encrypted mail
my $buf = '';
run3(
shell_quote(
qw(openssl smime -encrypt -des3),
-from => 'root@example.com',
-to => 'sender@example.com',
-subject => "Encrypted message for queue",
$test->smime_key_path('sender@example.com.crt' ),
),
\"Subject: test\n\norzzzzzz",
\$buf,
\*STDERR
);
my ($status, $tid) = RT::Test->send_via_mailgate( $buf );
is ($status >> 8, 0, "The mail gateway exited normally");
my $tick = RT::Ticket->new( $RT::SystemUser );
$tick->Load( $tid );
is( $tick->Subject, 'Encrypted message for queue',
"Created the ticket"
);
my $txn = $tick->Transactions->First;
my ($msg, $attach, $orig) = @{$txn->Attachments->ItemsArrayRef};
is( $msg->GetHeader('X-RT-Incoming-Encryption'),
'Success',
'recorded incoming mail that is encrypted'
);
is( $msg->GetHeader('X-RT-Privacy'),
'SMIME',
'recorded incoming mail that is encrypted'
);
like( $attach->Content, qr'orz');
is( $orig->GetHeader('Content-Type'), 'application/x-rt-original-message');
}
{
my $buf = '';
run3(
join(
' ',
shell_quote(
RT->Config->Get('SMIME')->{'OpenSSL'},
qw( smime -sign -nodetach -passin pass:123456),
-signer => $test->smime_key_path('root@example.com.crt' ),
-inkey => $test->smime_key_path('root@example.com.key' ),
),
'|',
shell_quote(
qw(openssl smime -encrypt -des3),
-from => 'root@example.com',
-to => 'sender@example.com',
-subject => "Encrypted and signed message for queue",
$test->smime_key_path('sender@example.com.crt' ),
)),
\"Subject: test\n\norzzzzzz",
\$buf,
\*STDERR
);
my ($status, $tid) = RT::Test->send_via_mailgate( $buf );
my $tick = RT::Ticket->new( $RT::SystemUser );
$tick->Load( $tid );
ok( $tick->Id, "found ticket " . $tick->Id );
is( $tick->Subject, 'Encrypted and signed message for queue',
"Created the ticket"
);
my $txn = $tick->Transactions->First;
my ($msg, $attach, $orig) = @{$txn->Attachments->ItemsArrayRef};
is( $msg->GetHeader('X-RT-Incoming-Encryption'),
'Success',
'recorded incoming mail that is encrypted'
);
like( $attach->Content, qr'orzzzz');
}
done_testing;
|