2fedd
public text v1 · immutable$pgpres=`/usr/local/bin/gpg --output $filename --decrypt $cryptedfile 2>&1`;
if ( $? == 0 )
{
syslog('debug', "Расшифровывание завершилось удачно");
`rm -f $cryptedfile`;
if ( $pgpres =~ /Good\ signature\ from\ \"(.*)\"\./m ) {
$keyID=$1;
syslog('debug', "Найден ключ $keyID");
if ( exists $keyIDhomes{$keyID} ) {
$now_string = strftime "%Y-%m-%d %H-%M-%S ", localtime;
chmod 0666, "$filename" or safe_die("!!! Не могу изменить права доступа на файл $filename");
$archfilename = "/usr/local/rshb/fo/archive/" . $now_string . $filename;
syslog('debug', "%s", "Имя файла в архиве - $archfilename");
copy($filename, $archfilename) or safe_die("Не удалось скопировать файл $filename в /usr/local/rshb/fo/archive/$now_string" . '_' . "$filename - ошибка: $!");
move($filename, "$keyIDhomes{$keyID}$filename") or safe_die("Расшифрованный файл не удалось переместить в каталог пользователя ($keyIDhomes{$keyID}) - ошибка $!");
if ($USERADDR =~ /bolsher/)
{
open MP, "| /usr/bin/mail -s 'Квитанция: $filename' oper\@bolsher.rshb.com.ru";
print MP "Транспортной системой успешно принят файл $filename\n";
close MP;
}
}
else {
safe_die("Для ключа $keyID не определён каталог")
}
}
else {
safe_die("Странная ситуация: PGP завершила работу удачно, но KeyID найти не удалось - возможно шифрование сторонним ключом\n$pgpres\n")
}
}
else
{
syslog('debug', "%s %d", "!!! Не расшифровывается $cryptedfile", length($cryptedfile));
syslog('debug', "pgpres = '%s', \$? = %d",$pgpres, $?);
# syslog('debug', $pgpres, );
}
syslog('debug', "Работа закончена");
closelog;
sub parse_addr
{
local($line)=@_;
return $1 if ($line=~/^[^<]*<(\S+@\S+)>/o);
return $1 if ($line=~/^(\S+@\S+)/o);
}
sub parse_header
{
undef $REPLYTO;
undef $USERADDR;
undef $SUBJECT;
while(<>)
{
last if (/^\s*$/o);
next unless (($headline,$value)=/([^:]+):\s*(.*)\s*$/o);
$SUBJECT=$value if ($headline=~/^Subject$/io);
$USERADDR=&parse_addr($value) if ($headline=~/^From$/io);
$REPLYTO=&parse_addr($value) if ($headline=~/^Reply-To$/io);
}
return 0 unless (defined($USERADDR) && defined($SUBJECT));
# ($USERNAME,$USERHOST)=split("@",$USERADDR);
return 1;
}
sub safe_die {
my $reason = shift;
syslog LOG_INFO, "!!! %s", $reason;
closelog;
die $reason
}