#!/usr/local/bin/perl -w # @(#) SEPclientPGP.pl Программа-клиент печати с повышенной безопасностью. (См: RFC 3156) # Обрабатывает данные со стандартного входа и генерирует # сообщение с PGP-подписью, которое далее передаётся # через конвейер (pipe) программе, разбивающей его на части # и отправляющей на сервер по электронной почте. # Требуется 'pgp'-программа. # Graham Jenkins, IBM GSA, Дек. 2001. Пересмотрено: 30 декабря. 2001. use strict; use File::Basename; use MIME::Lite; use IO::File; use Env qw(PGPPASS); die "Usage: ".basename($0)." kb-per-part destination [passphrase]\n". " e.g.: ".basename($0)." 16 lp3\@pserv.acme.com \"A secret\" < report.ps\n". " Part-size must be >= 1\n" if ( ($#ARGV < 1) or ($#ARGV > 2) or ($ARGV[0] < 1) ); my $fh = new IO::File "| /usr/local/bin/SplitSend.pl $ARGV[0]"; if( defined($ARGV[2]) ) {$PGPPASS=$ARGV[2]} if( ! defined ($PGPPASS)) {$PGPPASS=""} # Размещаем кодовую фразу в переменной среды my $msg = MIME::Lite->new( # и создаём подписанное сообщение. To => $ARGV[1], Subject => 'Secure Email Print Job # '.time, Type => 'multipart/encrypted'); $msg->attr ( "content-type.protocol" => "pgp-encrypted"); $msg->attach( Type => 'application/pgp-encrypted', Encoding=> 'binary', Data => "Version: 1\n"); $msg->attach( Type => 'application/octet-stream', Encoding=> 'binary', Path => "/usr/local/bin/pgp -fas - |"); $msg->print($fh); # Передаём через конвейер подписанное сообщение в программу, __END__ # разбивающую его на части и передающую на сервер