$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 }