All pastes #728966 Raw Edit

2fedd

public text v1 · immutable
·published 2007-10-07 15:19 UTC
rendered paste body
$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                                                                                                                                                                                               
}