Blame | Last modification | View Log | Download | RSS feed
<?
///////////////////////////////////////
// Libreria di funzioni generiche
///////////////////////////////////////
// ************************************************
// INCLUDE CLASSE PEAR Mail/mimeDecode.php
// ************************************************
require_once('Mail/mimeDecode.php');
function show($var, $end = 0) {
echo"<br>show<pre>";
print_r($var);
echo'</pre><br>';
if ($end == 0)
die ('end');
}
// ************************************************
// FUNZIONE CHE SCRIVE SU UN FILE DI LOG
// ************************************************
function wlog($keyerrore, $dblog = 0, $descr = '', $up_TI04 = 0, $livello = 0, $filename = '') {
global $ocierr, $progiscrizione, $periodo_da, $periodo_a, $keydett, $progiscrizioneass;
global $flag_ass, $idfile, $protocollo, $protocollo_ass;
global $gl_id_richiesta, $gl_id_richiesta_ori, $gl_id_traccia;
$str1 = '';
$str2 = '';
if (trim($filename) == '')
$filename = APP_PATH.'logs/'.LOG_FILE;
if ($ocierr != false) {
$str1 = ' ~~~ MESSAGE: '.$ocierr['message'].' ~~~ SQLTEXT: '.$ocierr['sqltext'];
$str1 = text_adjust($str1);
}
$progiscrizione_log = (isset($progiscrizione)) ? "PROGISCRIZIONE: $progiscrizione ," : '';
$keydett_log = (isset($keydett)) ? "KEYDETT: $keydett ," : '';
$flag_ass_log = (isset($flag_ass)) ? "FLAG_ASS: $flag_ass " : '';
$periodo_da_log = (isset($periodo_da)) ? "PERIODO_DA: $periodo_da ," : '';
$periodo_a_log = (isset($periodo_a)) ? "PERIODO_A: $periodo_a ," : '';
$progiscrizioneass_log = (isset($progiscrizioneass)) ? "PROGISCRIZIONEASS: $progiscrizioneass " : '';
$idfile_log = (isset($idfile)) ? "N_FILE: $idfile ," : '';
$gl_id_richiesta_log = (isset($gl_id_richiesta)) ? "ID_RICHIESTA: $gl_id_richiesta ," : '';
$gl_id_richiesta_ori_log = (isset($gl_id_richiesta_ori)) ? "ID_RICHIESTA_ORI: $gl_id_richiesta_ori " : '';
$gl_id_traccia_log = (isset($gl_id_traccia)) ? "ID_TRACCIA: $gl_id_traccia " : '';
if ((isset($flag_ass) && $flag_ass == 0) || defined('NATIVE'))
$protocollo_log = (isset($protocollo)) ? "PROTOCOLLO: $protocollo ," : '';
elseif (isset($flag_ass) && $flag_ass == 1)
$protocollo_log = (isset($protocollo_ass)) ? "PROTOCOLLO: $protocollo_ass ," : '';
else
$protocollo_log = '';
$str2 = " ~~~ $progiscrizione_log $periodo_da_log $periodo_a_log $keydett_log ";
$str2 .= "$flag_ass_log $progiscrizioneass_log $idfile_log $protocollo_log $gl_id_richiesta_log $gl_id_richiesta_ori_log $gl_id_traccia_log ~~~";
$descr = text_adjust($descr);
$errdett = '('.$keyerrore.') '.$descr.$str1;
if (LOGFILE_LEVEL > $livello) {
error_log (date("d/m/Y H:i:s").' - '.$errdett.$str2."\n\n", 3, $filename);
}
if ($dblog > 0)
wdblog($keyerrore, $errdett);
$ocierr = false;
if ($up_TI04 > 0)
update_servizidettaglio('LOG', $keyerrore);
$ocierr = false;
}
function wfile($fname, &$buf) {
$fn = fopen($fname, 'wt');
if (!$fn)
return false;
flock($fn, LOCK_EX);
$b = fwrite($fn, $buf);
flock($fn, LOCK_UN);
if ($b == -1 || $b == 0)
return false;
fclose($fn);
return true;
}
function wdblog($keyerrore, $errdett) {
global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $progiscrizioneass, $idfile, $protocollo, $protocollo_ass;
global $gl_id_richiesta, $gl_id_richiesta_ori, $gl_id_traccia;
$progiscrizione_log = (isset($progiscrizione)) ? $progiscrizione : '';
$keydett_log = (isset($keydett)) ? $keydett : 'NULL';
$flag_ass_log = (isset($flag_ass)) ? $flag_ass : 'NULL';
$periodo_da_log = (isset($periodo_da)) ? "to_date('$periodo_da', 'dd/mm/yyyy')" : 'NULL';
$periodo_a_log = (isset($periodo_a)) ? "to_date('$periodo_a', 'dd/mm/yyyy')" : 'NULL';
$progiscrizioneass_log = (isset($progiscrizioneass)) ? $progiscrizioneass : '';
$idfile_log = (isset($idfile)) ? $idfile : 'NULL';
$gl_id_richiesta_log = (isset($gl_id_richiesta)) ? $gl_id_richiesta : 'NULL';
$gl_id_richiesta_ori_log = (isset($gl_id_richiesta_ori) && !empty($gl_id_richiesta_ori)) ? $gl_id_richiesta_ori : 'NULL';
$gl_id_traccia_log = (isset($gl_id_traccia)) ? $gl_id_traccia : 'NULL';
if ((isset($flag_ass) && $flag_ass == 0) || defined('NATIVE'))
$protocollo_log = (isset($protocollo)) ? $protocollo : '';
elseif (isset($flag_ass) && $flag_ass == 1)
$protocollo_log = (isset($protocollo_ass)) ? $protocollo_ass : '';
else
$protocollo_log = '';
$errdett = sql_adjust($errdett);
$errdett = substr($errdett, 0, 4000);
$sql = "insert into S3_TI05_ERRLOG (TI05_ID, TI05_KEYERRORE, TI05_ERROREDETT, ";
$sql .= "TI05_DATETIME, TI05_PROGISCRIZIONE, TI05_KEYDETT, TI05_FLAG_ASS, TI05_PERIODO_DA, ";
$sql .= "TI05_PERIODO_A, TI05_PROTOCOLLO, TI05_PROGISCRIZIONEASS, TI05_N_FILE, TI05_ID_RICHIESTA, TI05_ID_RICHIESTA_ORI, TI05_ID_TRACCIA) ";
$sql .= "values (TI05_SEQ.NEXTVAL, $keyerrore, '$errdett', sysdate, '$progiscrizione_log', $keydett_log, $flag_ass_log, ";
$sql .= "$periodo_da_log, $periodo_a_log, '$protocollo_log', '$progiscrizioneass_log', $idfile_log, $gl_id_richiesta_log, $gl_id_richiesta_ori_log, $gl_id_traccia_log)";
/////////////////////////////////////////////////
// UPDATE S3_TI05_ERRLOG
/////////////////////////////////////////////////
$insert = exec_sql($conn, $sql, 1);
if (!$insert) {
wlog(1, 0, 'INSERT ERRLOG');
}
}
function sql_adjust($str) {
$str = str_replace("'","`", $str);
return $str;
}
function text_adjust($str) {
$str = trim(str_replace("\n", ' ', $str));
return $str;
}
function out($str, $level = 0) {
if (OUTPUT > $level)
echo $str.' <br> <br> ';
}
function xml_validation($xsd, $xml) {
exec('sh LSTU_jval9.sh '.$xsd.' '.$xml.' '.ORA_XDK.' '.JRE_HOME.' '.PARENT_DIR.' 2>&1', $arr_ret);
$ret = implode('', $arr_ret);
if ($ret == 'XML Document is valid')
return ('OK');
else
return ($ret);
}
// ************************************************
// FUNZIONE di REDIREZIONAMENTO
// ************************************************
function js_redirect($url, $msg = '', $target = 'top') {
//header("Location:$url");
echo "<script>";
if ($msg != '') {
$msg = js_adjust($msg);
echo "alert('$msg');";
}
echo "$target.location = '$url';";
echo "</script>";
}
function js_adjust($in) {
$out = addslashes(str_replace("\n", "", str_replace("\r", "", $in)));
return $out;
}
function decode_pkcs7($pkcs7) {
$params['include_bodies'] = TRUE;
$params['decode_bodies'] = TRUE;
$params['decode_headers'] = TRUE;
$params['crlf'] = "\r\n";
$decode = new Mail_mimeDecode($pkcs7);
$structure = $decode->decode($params);
return $structure;
}
function update_codstato($codstato, $autocommit = 1) {
global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $periodicita;
if ($codstato == 1) {
$extra_set = ', TI04_DATATIME_INIZIO = sysdate ';
}
elseif ($codstato == 4) {
if (isset($periodicita) && $periodicita == 0) { // UNA TANTUM
$sql = "update S3_TI03_SERVIZIRICHIESTI set TI03_DATAFINEISCRIZIONE = sysdate ";
$sql .= "where TI03_PROGISCRIZIONE = '$progiscrizione'";
if (!exec_sql($conn, $sql, 0)) {
OCIRollback($conn);
return false;
}
}
$extra_set = ', TI04_DATATIME_FINE = sysdate , TI04_PROTOCOLLO = TI07_SEQ.NEXTVAL';
}
else {
$extra_set = '';
}
$sql = "update S3_TI04_SERVIZIDETTAGLIO set TI04_CODSTATO = $codstato $extra_set ";
$sql .= "where TI04_PROGISCRIZIONE = '$progiscrizione' and ";
$sql .= "to_char(TI04_PERIODO_DA, 'dd/mm/yyyy') = '$periodo_da' and ";
$sql .= "to_char(TI04_PERIODO_A, 'dd/mm/yyyy') = '$periodo_a' and ";
$sql .= "TI04_KEYDETT = $keydett and TI04_FLAG_ASS = $flag_ass";
if (!exec_sql($conn, $sql, $autocommit)) {
OCIRollback($conn);
return false;
}
return true;
}
function update_codstato_ass($codstato, $autocommit = 1,$keydett_ass) {
global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $periodicita;
$sql = "update S3_TI04_SERVIZIDETTAGLIO set TI04_CODSTATO = $codstato ";
$sql .= "where TI04_PROGISCRIZIONE = '$progiscrizione' and ";
$sql .= "to_char(TI04_PERIODO_DA, 'dd/mm/yyyy') = '$periodo_da' and ";
$sql .= "to_char(TI04_PERIODO_A, 'dd/mm/yyyy') = '$periodo_a' and ";
$sql .= "TI04_KEYDETT = $keydett_ass and TI04_FLAG_ASS = 1";
if (!exec_sql($conn, $sql, $autocommit)) {
OCIRollback($conn);
return false;
}
return true;
}
function check_lockfile($name) {
global $fd_lockfile;
$lock = APP_PATH.'tmp/'.$name.'.lock';
$fd_lockfile = fopen($lock, 'a'); // NB: $fd_lockfile deve essere global!
if(flock($fd_lockfile, LOCK_EX+LOCK_NB)) {
set_file_buffer($fd_lockfile, 0);
ftruncate($fd_lockfile, 0);
fwrite($fd_lockfile, getmypid().' '.date('d/m/Y H:i:s')."\n");
// NON chiamo fclose per mantenere flock!
}
else {
fclose($fd_lockfile);
//Lock file già in uso - uscita
exit();
}
}
function read_xml_single_tag($xml, $path) {
global $gl_PP_xml_path;
$gl_PP_xml_path = $path;
// ************************************************
// INCLUDE CLASSE PATH_PARSER
// ************************************************
require_once(APP_PATH.'include/LSTM_class_path_parser.php');
$parser = new Path_parser();
$parser->set_handler($path, "single_tag");
if (!$parser->parse($xml,0))
return ("Error: ".$parser->get_error());
else
return '';
}
//MM Funzione per i dati assenti
function read_xml_if_exist_single_tag($xml, $path) {
global $gl_PP_xml_path;
$gl_PP_xml_path = $path;
// ************************************************
// INCLUDE CLASSE PATH_PARSER
// ************************************************
require_once(APP_PATH.'include/LSTM_class_path_parser.php');
$parser = new Path_parser();
$parser->set_handler($path, "single_tag");
return $parser->parse($xml,0);
}
function single_tag($name, $attribs, $content) {
global $gl_PP_xml_path;
global $gl_PP_arr_xml;
static $arr_xml_app;
$content = strip_tags($content);
$arr_xml_app[$gl_PP_xml_path] = $content;
$gl_PP_arr_xml = $arr_xml_app;
}
function elimina_iscrizione($p_iscr) {
global $conn, $ocierr;
$sql = "select count(*) from S3_TI04_SERVIZIDETTAGLIO where TI04_CODSTATO <> 0 ";
$sql .= "and TI04_PROGISCRIZIONE = '$p_iscr'";
$r_select = exec_select_format($conn, $sql);
if (!$r_select)
return 'Operazione in errore: '.$ocierr['message'];
if ($r_select[0][0] > 0)
return 'Operazione non eseguita: iscrizione non eliminabile.';
$sql = "delete S3_TI04_SERVIZIDETTAGLIO where TI04_PROGISCRIZIONE = '$p_iscr'";
if (!exec_sql($conn, $sql, 0))
return 'Operazione in errore: '.$ocierr['message'];
$sql = "delete S3_TI03_SERVIZIRICHIESTI where TI03_PROGISCRIZIONE = '$p_iscr'";
// AUTOCOMMIT
if (!exec_sql($conn, $sql, 1)) {
OCIRollback($conn);
return 'Operazione in errore: '.$ocierr['message'];
}
return 'Operazione correttamente eseguita.';
}
function lastChar($str, $sep) {
if (strrpos($str, $sep) == strlen($str)-strlen($sep))
$str = substr($str, 0, strlen($str)-strlen($sep));
return $str;
}
function get_segnatura_client() {
$arr_Identificatore = array('CodiceAmministrazione' => '',
'CodiceAOO' => '',
'NumeroRegistrazione' => '',
'DataRegistrazione' => '');
// ------------------
$arr_Ruolo = array('Denominazione' => 'Text',
'Identificativo' => '');
$arr_Amministrazione = array('Denominazione' => '',
'CodiceAmministrazione' => '',
'Ruolo' => $arr_Ruolo);
$arr_Mittente = array('Amministrazione' => $arr_Amministrazione,
'AOO' => '');
$arr_Origine = array('IndirizzoTelematico' => '',
'Mittente' => $arr_Mittente);
// ------------------
$arr_Destinazione = array('IndirizzoTelematico' => '');
// ------------------
$arr_Intestazione = array('Identificatore' => $arr_Identificatore,
'Origine' => $arr_Origine,
'Destinazione' => $arr_Destinazione,
'Oggetto' => '');
// ------------------
$arr_Segnatura = array('Intestazione' => $arr_Intestazione);
return $arr_Segnatura;
}
function get_segnatura_server() {
$arr_Identificatore = array('ns4:CodiceAmministrazione' => '',
'ns4:CodiceAOO' => '',
'ns4:NumeroRegistrazione' => '',
'ns4:DataRegistrazione' => '');
// ------------------
$arr_Amministrazione = array('ns4:Denominazione' => '',
'ns4:CodiceAmministrazione' => '');
$arr_Mittente = array('ns4:Amministrazione' => $arr_Amministrazione,
'ns4:AOO' => 'Text');
$arr_Origine = array('ns4:IndirizzoTelematico' => '',
'ns4:Mittente' => $arr_Mittente);
// ------------------
$arr_Destinazione = array('ns4:IndirizzoTelematico' => '');
// ------------------
$arr_Intestazione = array('ns4:Identificatore' => $arr_Identificatore,
'ns4:Origine' => $arr_Origine,
'ns4:Destinazione' => $arr_Destinazione,
'ns4:Oggetto' => '');
// ------------------
$arr_Segnatura = array('ns4:Intestazione' => $arr_Intestazione);
return $arr_Segnatura;
}
function verify($pkcs7, $cert_filename) {
$prefix = 'PP7M_'.substr(md5(microtime().posix_getpid()), 0, 8);
// salvo l'allegato su file per poterne verificare la firma
$to_verify_filename = APP_PATH.'tmp/'.$prefix;
echo "CREO IL FILE INIZIO".$to_verify_filename."\n";
wlog(1,0, "CREO IL FILE INIZIO".$to_verify_filename."\n");
$pkcs7 = rtrim($pkcs7, "\x00..\x1F");
$pkcs7 = trim($pkcs7);
$pkcs7 .="\n";
if(!wfile($to_verify_filename, $pkcs7)) {
@unlink($to_verify_filename);
echo 'Errore scrittura file: '.$to_verify_filename;
return false;
}
wlog(1,0, "CREO IL FILE FINE".$to_verify_filename."\n");
echo "CREO IL FILE FINE".$to_verify_filename."\n";
$cainfo = FILE_CA;
echo "INIZIO VERIFICA openssl_pkcs7_verify"."\n";
wlog(1,0,"INIZIO VERIFICA openssl_pkcs7_verify"."\n");
// verifica della firma
// $ret = openssl_pkcs7_verify($to_verify_filename,PKCS7_TEXT|PKCS7_NOVERIFY, $cert_filename, $cainfo);
$cmd = "openssl smime -verify -binary -in $to_verify_filename -CAfile $cainfo -signer $cert_filename 2>/dev/null";
$ret = exec($cmd, $content, $rc);
if ($rc === 0)
$ret = true;
else
$ret = false;
echo "FINE VERIFICA openssl_pkcs7_verify valore di ritorno: ".$ret."\n";
wlog(1,0, "FINE VERIFICA openssl_pkcs7_verify valore di ritorno: ".$ret."\n");
@unlink($to_verify_filename);
return $ret;
}
function app_tag($tag_name, $tag_value, &$xml, $option = '', $arr_att = false) {
switch ($option) {
case 'OPTIONAL':
if ($tag_value == '') {
return;
}
break;
case 'OPTIONAL-ZERO':
if ($tag_value == '' || $tag_value == '0') {
return;
}
break;
case 'OPTIONAL-ALLZERO':
if (trim($tag_value, '0') == '') {
return;
}
break;
}
$xml .= '<'.$tag_name;
if (is_array ($arr_att)) {
while (list ($att_name, $att_value) = each($arr_att)) {
$xml .= ' '.$att_name."=\"".$att_value."\"";
}
}
$xml .= '>'.inspect_xml_entities($tag_value).'</'.$tag_name.'>';
//$xml .= '>'.$tag_value.'</'.$tag_name.'>';
}
function ini_tag($tag_name, &$xml, $arr_att = false) {
$xml .= '<'.$tag_name;
if (is_array ($arr_att)) {
while (list ($att_name, $att_value) = each($arr_att)) {
$xml .= ' '.$att_name."=\"".$att_value."\"";
}
}
$xml .= '>';
}
function end_tag($tag_name, &$xml) {
$xml .= '</'.$tag_name.'>';
}
function inspect_xml_entities($string) {
$string = strtr($string,array(
'&' => '&',
'>' => '>',
'<' => '<',
'"' => '"',
'\'' => ''' ));
/*
$string = str_replace(array('ü', 'Ü', 'ö',
'Ö', 'ä', 'Ä',
'ß', '<', '>',
'"', '\''
),
array('ü', 'Ü', 'ö',
'Ö', 'ä', 'Ä',
'ß', '<', '>',
'"', '''
),
$xml
);
$string = preg_replace(array("/\&([a-z\d\#]+)\;/i",
"/\&/",
"/\#\|\|([a-z\d\#]+)\|\|\#/i",
"/([^a-zA-Z\d\s\<\>\&\;\.\:\=\"\-\/\%\?\!\'\(\)\[\]\{\}\$\#\+\,\@_])/e"
),
array("#||\\1||#",
"&",
"&\\1;",
"'&#'.ord('\\1').';'"
),
$xml
);
*/
return $string;
}
function read_cert($cert_filename) {
//$pemdata = implode('', file($cert_filename));
//CORREZIONE MM
$fp = fopen($cert_filename, "r");
$pemdata = fread($fp,filesize($cert_filename));
fclose($fp);
// Get a certificate resource from the PEM string.
$cert_handler = openssl_x509_read($pemdata);
// Parse the resource
$arr_cert_data = openssl_x509_parse($cert_handler);
// Free the resource
openssl_x509_free($cert_handler);
return $arr_cert_data;
}
function check_certificato($arr_cert, $class = false) {
$arr_crl = '';
// CONTROLLO EMITTENTE
//
$trusted_issuer['C'] = CA_C;
$trusted_issuer['O'] = CA_O;
$trusted_issuer['OU'] = CA_OU;
$trusted_issuer['CN'] = CA_CN;
if ($trusted_issuer['C'] != $arr_cert['issuer']['C'] ||
$trusted_issuer['O'] != $arr_cert['issuer']['O'] ||
$trusted_issuer['OU'] != $arr_cert['issuer']['OU'] ||
$trusted_issuer['CN'] != $arr_cert['issuer']['CN']) {
if ($class) {
$class->gestione_fault($class->method_namespace, 'Certification Authority non riconosciuta');
return false;
}
else {
return array(20026, 'CA emittente: '.$arr_cert['issuer']['C'].' - '.$arr_cert['issuer']['O'].' - '.$arr_cert['issuer']['OU'].' - '.$arr_cert['issuer']['CN']);
}
}
// CONTROLLO SUBJECT
//
$trusted_subject['C'] = SC_C;
$trusted_subject['O'] = SC_O;
$trusted_subject['OU'] = SC_OU;
$trusted_subject['CN'] = SC_CN;
if ($trusted_subject['C'] != $arr_cert['subject']['C'] ||
$trusted_subject['O'] != $arr_cert['subject']['O'] ||
$trusted_subject['OU'] != $arr_cert['subject']['OU'] ||
$trusted_subject['CN'] != $arr_cert['subject']['CN']) {
if ($class) {
$class->gestione_fault($class->method_namespace, 'Soggetto del certificato non riconosciuto');
return false;
}
else {
return array(20037, 'Subject: '.$arr_cert['subject']['C'].' - '.$arr_cert['subject']['O'].' - '.$arr_cert['subject']['OU'].' - '.$arr_cert['subject']['CN']);
}
}
// CONTROLLO PERIODO DI VALIDITA'
//
/////////////////////////////////////////////////
// RECUPERO DATA DI SISTEMA DA ORACLE
/////////////////////////////////////////////////
$sysdate = oracle_date('yymmddhh24miss');
if (!$sysdate) {
if ($class) {
$class->error_code = 60013;
$class->gestione_fault($class->method_namespace);
return false;
}
else {
return array(20027, '');
}
}
$sysdate = (float) $sysdate;
$valid_from = (float) substr($arr_cert['validFrom'], 0, 12);
$valid_to = (float) substr($arr_cert['validTo'], 0, 12);
if ($valid_from > $sysdate) {
if ($class) {
$class->gestione_fault($class->method_namespace, 'Certificato non valido - Errore: Data inizio validità.');
return false;
}
else {
return array(20028, "Data inizio validità: $valid_from");
}
}
if ($valid_to < $sysdate) {
if ($class) {
$class->gestione_fault($class->method_namespace, 'Certificato non valido - Errore: Data fine validità.');
return false;
}
else {
return array(20029, "Data fine validità: $valid_to");
}
}
if (CRL_CHECK == 'SI') {
// RECUPERO CRL
list($err, $ret) = get_crl($class);
if ($err) {
if ($class) {
$class->error_code = $err;
$class->gestione_fault($class->method_namespace, $ret);
return false;
}
else {
return array($err, $ret);
}
}
// CONTROLLO CERTIFICATI REVOCATI
$arr_crl = $ret;
$needle = ' Serial Number: ';
$serial_number = trim(strtoupper(dechex($arr_cert['serialNumber'])));
foreach($arr_crl as $k=>$v) {
$pos = strpos($v, $needle);
if ($pos === false) {
if(strpos($v, 'BEGIN X509 CRL'))
break;
}
else {
$sn_revoked = trim(substr($v, strlen($needle)));
if ($sn_revoked == $serial_number) {
if ($class) {
$class->gestione_fault($class->method_namespace, 'Certificato revocato');
return false;
}
else {
return array(20031, "SERIAL NUMBER: $serial_number");
}
}
}
}
}
if ($class)
return true;
else
return array(0, '');
}
function get_crl(&$class) {
include_once(APP_PATH.'include/LSTU_fastcache.inc');
$fname_cache = APP_PATH.'tmp/CRL_cache_date';
$fname_in = APP_PATH.'tmp/CRL_binary';
$fname_out = APP_PATH.'tmp/CRL_text';
// LETTURA FILE CACHE
$ret = fcache_read($fname_cache, $crl);
if ($ret !== 0) {
include_once(APP_PATH.'include/LSTU_http_requests.inc');
// ***************************************************
// CONNESSIONE
// ***************************************************
$headers[] = new HTTP_Header('User-Agent', 'PHP_soap_client');
//$headers[] = new HTTP_Header('Connection', 'close');
$headers[] = new HTTP_Header('Host', CRL_SERVER);
$script = '/var/crl_territorio.php';
$req = new HTTP_Req('GET', $script, 'HTTP/1.0', $headers);
$con = new HTTP_Connection(CRL_SERVER);
$rc = $con->Connect();
if ($rc) {
if ($class)
return array(60014, 'CONNESSIONE FALLITA A: '.CRL_SERVER.$script);
else
return array(20032, 'CONNESSIONE FALLITA A: '.CRL_SERVER.$script);
}
else {
$con->Request($req); // send request
$con->Response($res); // creates a response obj read from server
$con->Close(); // close connection to server
$crl = $res->GetEntityBody();// echo entity body from response (file contents)
if (substr($crl, 0, 5) != 'CRLOK') {
if ($class)
return array(60015, 'RESPONSE: '.$crl);
else
return array(20033, 'RESPONSE: '.$crl);
}
// SCRITTURA FILE CRL BINARIO
$ret = wfile($fname_in, substr($crl, 5));
if (!$ret) {
if ($class)
return array(60016, 'Errore scrittura file: '.$fname);
else
return array(20034, 'Errore scrittura file: '.$fname);
}
$arr = array();
$ret = '';
// CONTROLLO FIRMA CRL E
// SCRITTURA FILE CRL TESTO
exec ('openssl crl -inform DER -text -in '.$fname_in.' -out '.$fname_out.' -CAfile '.FILE_CA.' 2>&1', $arr, $ret);
if ($ret !== 0) {
if ($class)
return array(60017, 'ERRORE nel comando OPENSSL CRL. Codice di ritorno: '.$ret.'. Message: '.implode(' - ', $arr));
else
return array(20035, 'ERRORE nel comando OPENSSL CRL. Codice di ritorno: '.$ret.'. Message: '.implode(' - ', $arr));
}
// SCRITTURA FILE CACHE
$data_crl = "\n".'Web Server Date: '.date("d/m/Y H:i:s");
$ret = fcache_write($fname_cache, $data_crl, 3600);
if ($ret !== 0) {
if ($class)
return array(60018, 'ERRORE nella scrittura del file: '.$fname_cache.'. Codice fcache: '.$ret);
else
return array(20036, 'ERRORE nella scrittura del file: '.$fname_cache.'. Codice fcache: '.$ret);
}
}
}
if (is_file($fname_out)) {
// RITORNO FILE CRL TESTO IN ARRAY
$arr_crl = file($fname_out);
}
if (!is_array($arr_crl)) {
if ($class)
return array(60019, 'Il file '.$fname_out.' è vuoto o non è stato possibile leggerlo.');
else
return array(20030, 'Il file '.$fname_out.' è vuoto o non è stato possibile leggerlo.');
}
return array(0, $arr_crl);
}
function get_arrpk() {
$arr_pk = array(PK_ENTE, PK_PWD);
return $arr_pk;
}
function firma_allegato($filename_unsigned, $filename_pkcs7) {
$arr_privkey = get_arrpk();
$arr_header = array();
if (!openssl_pkcs7_sign($filename_unsigned, $filename_pkcs7, CERT_ENTE, $arr_privkey, $arr_header, PKCS7_TEXT + PKCS7_DETACHED)) {
// log errori openssl
$msg_tot = 'OPENSSL ERROR: ';
while($msg = openssl_error_string())
$msg_tot .= ' - '.$msg;
return $msg_tot;
}
return 'OK';
}
?>