Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6 | Andrea | 1 | <? |
2 | /////////////////////////////////////// |
||
3 | // Libreria di funzioni generiche |
||
4 | /////////////////////////////////////// |
||
5 | |||
6 | // ************************************************ |
||
7 | // INCLUDE CLASSE PEAR Mail/mimeDecode.php |
||
8 | // ************************************************ |
||
9 | require_once('Mail/mimeDecode.php'); |
||
10 | |||
11 | function show($var, $end = 0) { |
||
12 | |||
13 | echo"<br>show<pre>"; |
||
14 | print_r($var); |
||
15 | echo'</pre><br>'; |
||
16 | |||
17 | if ($end == 0) |
||
18 | die ('end'); |
||
19 | } |
||
20 | |||
21 | // ************************************************ |
||
22 | // FUNZIONE CHE SCRIVE SU UN FILE DI LOG |
||
23 | // ************************************************ |
||
24 | function wlog($keyerrore, $dblog = 0, $descr = '', $up_TI04 = 0, $livello = 0, $filename = '') { |
||
25 | |||
26 | global $ocierr, $progiscrizione, $periodo_da, $periodo_a, $keydett, $progiscrizioneass; |
||
27 | global $flag_ass, $idfile, $protocollo, $protocollo_ass; |
||
28 | global $gl_id_richiesta, $gl_id_richiesta_ori, $gl_id_traccia; |
||
29 | |||
30 | $str1 = ''; |
||
31 | $str2 = ''; |
||
32 | |||
33 | if (trim($filename) == '') |
||
34 | $filename = APP_PATH.'logs/'.LOG_FILE; |
||
35 | |||
36 | if ($ocierr != false) { |
||
37 | |||
38 | $str1 = ' ~~~ MESSAGE: '.$ocierr['message'].' ~~~ SQLTEXT: '.$ocierr['sqltext']; |
||
39 | $str1 = text_adjust($str1); |
||
40 | } |
||
41 | |||
42 | $progiscrizione_log = (isset($progiscrizione)) ? "PROGISCRIZIONE: $progiscrizione ," : ''; |
||
43 | $keydett_log = (isset($keydett)) ? "KEYDETT: $keydett ," : ''; |
||
44 | $flag_ass_log = (isset($flag_ass)) ? "FLAG_ASS: $flag_ass " : ''; |
||
45 | $periodo_da_log = (isset($periodo_da)) ? "PERIODO_DA: $periodo_da ," : ''; |
||
46 | $periodo_a_log = (isset($periodo_a)) ? "PERIODO_A: $periodo_a ," : ''; |
||
47 | $progiscrizioneass_log = (isset($progiscrizioneass)) ? "PROGISCRIZIONEASS: $progiscrizioneass " : ''; |
||
48 | $idfile_log = (isset($idfile)) ? "N_FILE: $idfile ," : ''; |
||
49 | $gl_id_richiesta_log = (isset($gl_id_richiesta)) ? "ID_RICHIESTA: $gl_id_richiesta ," : ''; |
||
50 | $gl_id_richiesta_ori_log = (isset($gl_id_richiesta_ori)) ? "ID_RICHIESTA_ORI: $gl_id_richiesta_ori " : ''; |
||
51 | $gl_id_traccia_log = (isset($gl_id_traccia)) ? "ID_TRACCIA: $gl_id_traccia " : ''; |
||
52 | |||
53 | if ((isset($flag_ass) && $flag_ass == 0) || defined('NATIVE')) |
||
54 | $protocollo_log = (isset($protocollo)) ? "PROTOCOLLO: $protocollo ," : ''; |
||
55 | elseif (isset($flag_ass) && $flag_ass == 1) |
||
56 | $protocollo_log = (isset($protocollo_ass)) ? "PROTOCOLLO: $protocollo_ass ," : ''; |
||
57 | else |
||
58 | $protocollo_log = ''; |
||
59 | |||
60 | $str2 = " ~~~ $progiscrizione_log $periodo_da_log $periodo_a_log $keydett_log "; |
||
61 | $str2 .= "$flag_ass_log $progiscrizioneass_log $idfile_log $protocollo_log $gl_id_richiesta_log $gl_id_richiesta_ori_log $gl_id_traccia_log ~~~"; |
||
62 | |||
63 | $descr = text_adjust($descr); |
||
64 | |||
65 | $errdett = '('.$keyerrore.') '.$descr.$str1; |
||
66 | |||
67 | if (LOGFILE_LEVEL > $livello) { |
||
68 | error_log (date("d/m/Y H:i:s").' - '.$errdett.$str2."\n\n", 3, $filename); |
||
69 | } |
||
70 | |||
71 | if ($dblog > 0) |
||
72 | wdblog($keyerrore, $errdett); |
||
73 | |||
74 | $ocierr = false; |
||
75 | |||
76 | if ($up_TI04 > 0) |
||
77 | update_servizidettaglio('LOG', $keyerrore); |
||
78 | |||
79 | $ocierr = false; |
||
80 | |||
81 | } |
||
82 | |||
83 | function wfile($fname, &$buf) { |
||
84 | |||
85 | $fn = fopen($fname, 'wt'); |
||
86 | if (!$fn) |
||
87 | return false; |
||
88 | flock($fn, LOCK_EX); |
||
89 | $b = fwrite($fn, $buf); |
||
90 | flock($fn, LOCK_UN); |
||
91 | if ($b == -1 || $b == 0) |
||
92 | return false; |
||
93 | |||
94 | fclose($fn); |
||
95 | |||
96 | return true; |
||
97 | } |
||
98 | |||
99 | function wdblog($keyerrore, $errdett) { |
||
100 | |||
101 | global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $progiscrizioneass, $idfile, $protocollo, $protocollo_ass; |
||
102 | global $gl_id_richiesta, $gl_id_richiesta_ori, $gl_id_traccia; |
||
103 | |||
104 | $progiscrizione_log = (isset($progiscrizione)) ? $progiscrizione : ''; |
||
105 | $keydett_log = (isset($keydett)) ? $keydett : 'NULL'; |
||
106 | $flag_ass_log = (isset($flag_ass)) ? $flag_ass : 'NULL'; |
||
107 | $periodo_da_log = (isset($periodo_da)) ? "to_date('$periodo_da', 'dd/mm/yyyy')" : 'NULL'; |
||
108 | $periodo_a_log = (isset($periodo_a)) ? "to_date('$periodo_a', 'dd/mm/yyyy')" : 'NULL'; |
||
109 | $progiscrizioneass_log = (isset($progiscrizioneass)) ? $progiscrizioneass : ''; |
||
110 | $idfile_log = (isset($idfile)) ? $idfile : 'NULL'; |
||
111 | $gl_id_richiesta_log = (isset($gl_id_richiesta)) ? $gl_id_richiesta : 'NULL'; |
||
112 | $gl_id_richiesta_ori_log = (isset($gl_id_richiesta_ori) && !empty($gl_id_richiesta_ori)) ? $gl_id_richiesta_ori : 'NULL'; |
||
113 | $gl_id_traccia_log = (isset($gl_id_traccia)) ? $gl_id_traccia : 'NULL'; |
||
114 | |||
115 | if ((isset($flag_ass) && $flag_ass == 0) || defined('NATIVE')) |
||
116 | $protocollo_log = (isset($protocollo)) ? $protocollo : ''; |
||
117 | elseif (isset($flag_ass) && $flag_ass == 1) |
||
118 | $protocollo_log = (isset($protocollo_ass)) ? $protocollo_ass : ''; |
||
119 | else |
||
120 | $protocollo_log = ''; |
||
121 | |||
122 | $errdett = sql_adjust($errdett); |
||
123 | $errdett = substr($errdett, 0, 4000); |
||
124 | |||
125 | $sql = "insert into S3_TI05_ERRLOG (TI05_ID, TI05_KEYERRORE, TI05_ERROREDETT, "; |
||
126 | $sql .= "TI05_DATETIME, TI05_PROGISCRIZIONE, TI05_KEYDETT, TI05_FLAG_ASS, TI05_PERIODO_DA, "; |
||
127 | $sql .= "TI05_PERIODO_A, TI05_PROTOCOLLO, TI05_PROGISCRIZIONEASS, TI05_N_FILE, TI05_ID_RICHIESTA, TI05_ID_RICHIESTA_ORI, TI05_ID_TRACCIA) "; |
||
128 | $sql .= "values (TI05_SEQ.NEXTVAL, $keyerrore, '$errdett', sysdate, '$progiscrizione_log', $keydett_log, $flag_ass_log, "; |
||
129 | $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)"; |
||
130 | |||
131 | ///////////////////////////////////////////////// |
||
132 | // UPDATE S3_TI05_ERRLOG |
||
133 | ///////////////////////////////////////////////// |
||
134 | $insert = exec_sql($conn, $sql, 1); |
||
135 | if (!$insert) { |
||
136 | wlog(1, 0, 'INSERT ERRLOG'); |
||
137 | } |
||
138 | |||
139 | } |
||
140 | |||
141 | function sql_adjust($str) { |
||
142 | |||
143 | $str = str_replace("'","`", $str); |
||
144 | |||
145 | return $str; |
||
146 | } |
||
147 | |||
148 | function text_adjust($str) { |
||
149 | |||
150 | $str = trim(str_replace("\n", ' ', $str)); |
||
151 | |||
152 | return $str; |
||
153 | } |
||
154 | |||
155 | function out($str, $level = 0) { |
||
156 | |||
157 | if (OUTPUT > $level) |
||
158 | echo $str.' <br> <br> '; |
||
159 | } |
||
160 | |||
161 | function xml_validation($xsd, $xml) { |
||
162 | |||
163 | exec('sh LSTU_jval9.sh '.$xsd.' '.$xml.' '.ORA_XDK.' '.JRE_HOME.' '.PARENT_DIR.' 2>&1', $arr_ret); |
||
164 | |||
165 | $ret = implode('', $arr_ret); |
||
166 | |||
167 | if ($ret == 'XML Document is valid') |
||
168 | return ('OK'); |
||
169 | else |
||
170 | return ($ret); |
||
171 | } |
||
172 | |||
173 | // ************************************************ |
||
174 | // FUNZIONE di REDIREZIONAMENTO |
||
175 | // ************************************************ |
||
176 | function js_redirect($url, $msg = '', $target = 'top') { |
||
177 | //header("Location:$url"); |
||
178 | |||
179 | echo "<script>"; |
||
180 | if ($msg != '') { |
||
181 | $msg = js_adjust($msg); |
||
182 | echo "alert('$msg');"; |
||
183 | } |
||
184 | echo "$target.location = '$url';"; |
||
185 | echo "</script>"; |
||
186 | |||
187 | } |
||
188 | |||
189 | function js_adjust($in) { |
||
190 | |||
191 | $out = addslashes(str_replace("\n", "", str_replace("\r", "", $in))); |
||
192 | |||
193 | return $out; |
||
194 | } |
||
195 | |||
196 | function decode_pkcs7($pkcs7) { |
||
197 | |||
198 | $params['include_bodies'] = TRUE; |
||
199 | $params['decode_bodies'] = TRUE; |
||
200 | $params['decode_headers'] = TRUE; |
||
201 | $params['crlf'] = "\r\n"; |
||
202 | |||
203 | $decode = new Mail_mimeDecode($pkcs7); |
||
204 | |||
205 | $structure = $decode->decode($params); |
||
206 | |||
207 | return $structure; |
||
208 | } |
||
209 | |||
210 | function update_codstato($codstato, $autocommit = 1) { |
||
211 | |||
212 | global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $periodicita; |
||
213 | |||
214 | if ($codstato == 1) { |
||
215 | |||
216 | $extra_set = ', TI04_DATATIME_INIZIO = sysdate '; |
||
217 | } |
||
218 | elseif ($codstato == 4) { |
||
219 | |||
220 | if (isset($periodicita) && $periodicita == 0) { // UNA TANTUM |
||
221 | |||
222 | $sql = "update S3_TI03_SERVIZIRICHIESTI set TI03_DATAFINEISCRIZIONE = sysdate "; |
||
223 | $sql .= "where TI03_PROGISCRIZIONE = '$progiscrizione'"; |
||
224 | |||
225 | if (!exec_sql($conn, $sql, 0)) { |
||
226 | |||
227 | OCIRollback($conn); |
||
228 | return false; |
||
229 | } |
||
230 | } |
||
231 | |||
232 | $extra_set = ', TI04_DATATIME_FINE = sysdate , TI04_PROTOCOLLO = TI07_SEQ.NEXTVAL'; |
||
233 | } |
||
234 | else { |
||
235 | |||
236 | $extra_set = ''; |
||
237 | } |
||
238 | |||
239 | $sql = "update S3_TI04_SERVIZIDETTAGLIO set TI04_CODSTATO = $codstato $extra_set "; |
||
240 | $sql .= "where TI04_PROGISCRIZIONE = '$progiscrizione' and "; |
||
241 | $sql .= "to_char(TI04_PERIODO_DA, 'dd/mm/yyyy') = '$periodo_da' and "; |
||
242 | $sql .= "to_char(TI04_PERIODO_A, 'dd/mm/yyyy') = '$periodo_a' and "; |
||
243 | $sql .= "TI04_KEYDETT = $keydett and TI04_FLAG_ASS = $flag_ass"; |
||
244 | |||
245 | if (!exec_sql($conn, $sql, $autocommit)) { |
||
246 | |||
247 | OCIRollback($conn); |
||
248 | return false; |
||
249 | } |
||
250 | |||
251 | return true; |
||
252 | } |
||
253 | |||
254 | |||
255 | function update_codstato_ass($codstato, $autocommit = 1,$keydett_ass) { |
||
256 | |||
257 | global $conn, $progiscrizione, $periodo_da, $periodo_a, $keydett, $flag_ass, $periodicita; |
||
258 | |||
259 | $sql = "update S3_TI04_SERVIZIDETTAGLIO set TI04_CODSTATO = $codstato "; |
||
260 | $sql .= "where TI04_PROGISCRIZIONE = '$progiscrizione' and "; |
||
261 | $sql .= "to_char(TI04_PERIODO_DA, 'dd/mm/yyyy') = '$periodo_da' and "; |
||
262 | $sql .= "to_char(TI04_PERIODO_A, 'dd/mm/yyyy') = '$periodo_a' and "; |
||
263 | $sql .= "TI04_KEYDETT = $keydett_ass and TI04_FLAG_ASS = 1"; |
||
264 | |||
265 | if (!exec_sql($conn, $sql, $autocommit)) { |
||
266 | |||
267 | OCIRollback($conn); |
||
268 | return false; |
||
269 | } |
||
270 | |||
271 | return true; |
||
272 | } |
||
273 | |||
274 | |||
275 | |||
276 | function check_lockfile($name) { |
||
277 | |||
278 | global $fd_lockfile; |
||
279 | |||
280 | $lock = APP_PATH.'tmp/'.$name.'.lock'; |
||
281 | |||
282 | $fd_lockfile = fopen($lock, 'a'); // NB: $fd_lockfile deve essere global! |
||
283 | |||
284 | if(flock($fd_lockfile, LOCK_EX+LOCK_NB)) { |
||
285 | |||
286 | set_file_buffer($fd_lockfile, 0); |
||
287 | ftruncate($fd_lockfile, 0); |
||
288 | fwrite($fd_lockfile, getmypid().' '.date('d/m/Y H:i:s')."\n"); |
||
289 | // NON chiamo fclose per mantenere flock! |
||
290 | } |
||
291 | else { |
||
292 | |||
293 | fclose($fd_lockfile); |
||
294 | |||
295 | //Lock file già in uso - uscita |
||
296 | exit(); |
||
297 | } |
||
298 | } |
||
299 | |||
300 | function read_xml_single_tag($xml, $path) { |
||
301 | |||
302 | global $gl_PP_xml_path; |
||
303 | |||
304 | $gl_PP_xml_path = $path; |
||
305 | |||
306 | // ************************************************ |
||
307 | // INCLUDE CLASSE PATH_PARSER |
||
308 | // ************************************************ |
||
309 | require_once(APP_PATH.'include/LSTM_class_path_parser.php'); |
||
310 | |||
311 | $parser = new Path_parser(); |
||
312 | $parser->set_handler($path, "single_tag"); |
||
313 | |||
314 | if (!$parser->parse($xml,0)) |
||
315 | return ("Error: ".$parser->get_error()); |
||
316 | else |
||
317 | return ''; |
||
318 | } |
||
319 | |||
320 | //MM Funzione per i dati assenti |
||
321 | function read_xml_if_exist_single_tag($xml, $path) { |
||
322 | |||
323 | global $gl_PP_xml_path; |
||
324 | |||
325 | $gl_PP_xml_path = $path; |
||
326 | |||
327 | // ************************************************ |
||
328 | // INCLUDE CLASSE PATH_PARSER |
||
329 | // ************************************************ |
||
330 | require_once(APP_PATH.'include/LSTM_class_path_parser.php'); |
||
331 | |||
332 | $parser = new Path_parser(); |
||
333 | $parser->set_handler($path, "single_tag"); |
||
334 | |||
335 | return $parser->parse($xml,0); |
||
336 | } |
||
337 | |||
338 | function single_tag($name, $attribs, $content) { |
||
339 | |||
340 | global $gl_PP_xml_path; |
||
341 | global $gl_PP_arr_xml; |
||
342 | static $arr_xml_app; |
||
343 | |||
344 | $content = strip_tags($content); |
||
345 | |||
346 | $arr_xml_app[$gl_PP_xml_path] = $content; |
||
347 | |||
348 | $gl_PP_arr_xml = $arr_xml_app; |
||
349 | } |
||
350 | |||
351 | function elimina_iscrizione($p_iscr) { |
||
352 | |||
353 | global $conn, $ocierr; |
||
354 | |||
355 | $sql = "select count(*) from S3_TI04_SERVIZIDETTAGLIO where TI04_CODSTATO <> 0 "; |
||
356 | $sql .= "and TI04_PROGISCRIZIONE = '$p_iscr'"; |
||
357 | |||
358 | $r_select = exec_select_format($conn, $sql); |
||
359 | |||
360 | if (!$r_select) |
||
361 | return 'Operazione in errore: '.$ocierr['message']; |
||
362 | |||
363 | if ($r_select[0][0] > 0) |
||
364 | return 'Operazione non eseguita: iscrizione non eliminabile.'; |
||
365 | |||
366 | $sql = "delete S3_TI04_SERVIZIDETTAGLIO where TI04_PROGISCRIZIONE = '$p_iscr'"; |
||
367 | |||
368 | if (!exec_sql($conn, $sql, 0)) |
||
369 | return 'Operazione in errore: '.$ocierr['message']; |
||
370 | |||
371 | $sql = "delete S3_TI03_SERVIZIRICHIESTI where TI03_PROGISCRIZIONE = '$p_iscr'"; |
||
372 | |||
373 | // AUTOCOMMIT |
||
374 | if (!exec_sql($conn, $sql, 1)) { |
||
375 | |||
376 | OCIRollback($conn); |
||
377 | return 'Operazione in errore: '.$ocierr['message']; |
||
378 | } |
||
379 | |||
380 | return 'Operazione correttamente eseguita.'; |
||
381 | } |
||
382 | |||
383 | function lastChar($str, $sep) { |
||
384 | |||
385 | if (strrpos($str, $sep) == strlen($str)-strlen($sep)) |
||
386 | $str = substr($str, 0, strlen($str)-strlen($sep)); |
||
387 | |||
388 | return $str; |
||
389 | } |
||
390 | |||
391 | function get_segnatura_client() { |
||
392 | |||
393 | $arr_Identificatore = array('CodiceAmministrazione' => '', |
||
394 | 'CodiceAOO' => '', |
||
395 | 'NumeroRegistrazione' => '', |
||
396 | 'DataRegistrazione' => ''); |
||
397 | |||
398 | // ------------------ |
||
399 | $arr_Ruolo = array('Denominazione' => 'Text', |
||
400 | 'Identificativo' => ''); |
||
401 | |||
402 | $arr_Amministrazione = array('Denominazione' => '', |
||
403 | 'CodiceAmministrazione' => '', |
||
404 | 'Ruolo' => $arr_Ruolo); |
||
405 | |||
406 | $arr_Mittente = array('Amministrazione' => $arr_Amministrazione, |
||
407 | 'AOO' => ''); |
||
408 | |||
409 | $arr_Origine = array('IndirizzoTelematico' => '', |
||
410 | 'Mittente' => $arr_Mittente); |
||
411 | // ------------------ |
||
412 | |||
413 | $arr_Destinazione = array('IndirizzoTelematico' => ''); |
||
414 | |||
415 | // ------------------ |
||
416 | |||
417 | |||
418 | $arr_Intestazione = array('Identificatore' => $arr_Identificatore, |
||
419 | 'Origine' => $arr_Origine, |
||
420 | 'Destinazione' => $arr_Destinazione, |
||
421 | 'Oggetto' => ''); |
||
422 | // ------------------ |
||
423 | $arr_Segnatura = array('Intestazione' => $arr_Intestazione); |
||
424 | |||
425 | return $arr_Segnatura; |
||
426 | } |
||
427 | |||
428 | function get_segnatura_server() { |
||
429 | |||
430 | $arr_Identificatore = array('ns4:CodiceAmministrazione' => '', |
||
431 | 'ns4:CodiceAOO' => '', |
||
432 | 'ns4:NumeroRegistrazione' => '', |
||
433 | 'ns4:DataRegistrazione' => ''); |
||
434 | |||
435 | // ------------------ |
||
436 | $arr_Amministrazione = array('ns4:Denominazione' => '', |
||
437 | 'ns4:CodiceAmministrazione' => ''); |
||
438 | |||
439 | $arr_Mittente = array('ns4:Amministrazione' => $arr_Amministrazione, |
||
440 | 'ns4:AOO' => 'Text'); |
||
441 | |||
442 | $arr_Origine = array('ns4:IndirizzoTelematico' => '', |
||
443 | 'ns4:Mittente' => $arr_Mittente); |
||
444 | // ------------------ |
||
445 | |||
446 | $arr_Destinazione = array('ns4:IndirizzoTelematico' => ''); |
||
447 | |||
448 | // ------------------ |
||
449 | |||
450 | |||
451 | $arr_Intestazione = array('ns4:Identificatore' => $arr_Identificatore, |
||
452 | 'ns4:Origine' => $arr_Origine, |
||
453 | 'ns4:Destinazione' => $arr_Destinazione, |
||
454 | 'ns4:Oggetto' => ''); |
||
455 | // ------------------ |
||
456 | $arr_Segnatura = array('ns4:Intestazione' => $arr_Intestazione); |
||
457 | |||
458 | return $arr_Segnatura; |
||
459 | } |
||
460 | |||
461 | function verify($pkcs7, $cert_filename) { |
||
462 | |||
463 | $prefix = 'PP7M_'.substr(md5(microtime().posix_getpid()), 0, 8); |
||
464 | |||
465 | // salvo l'allegato su file per poterne verificare la firma |
||
466 | $to_verify_filename = APP_PATH.'tmp/'.$prefix; |
||
467 | |||
468 | echo "CREO IL FILE INIZIO".$to_verify_filename."\n"; |
||
469 | wlog(1,0, "CREO IL FILE INIZIO".$to_verify_filename."\n"); |
||
470 | |||
471 | $pkcs7 = rtrim($pkcs7, "\x00..\x1F"); |
||
472 | $pkcs7 = trim($pkcs7); |
||
473 | $pkcs7 .="\n"; |
||
474 | |||
475 | if(!wfile($to_verify_filename, $pkcs7)) { |
||
476 | @unlink($to_verify_filename); |
||
477 | echo 'Errore scrittura file: '.$to_verify_filename; |
||
478 | return false; |
||
479 | } |
||
480 | wlog(1,0, "CREO IL FILE FINE".$to_verify_filename."\n"); |
||
481 | echo "CREO IL FILE FINE".$to_verify_filename."\n"; |
||
482 | |||
483 | $cainfo = FILE_CA; |
||
484 | |||
485 | echo "INIZIO VERIFICA openssl_pkcs7_verify"."\n"; |
||
486 | wlog(1,0,"INIZIO VERIFICA openssl_pkcs7_verify"."\n"); |
||
487 | |||
488 | // verifica della firma |
||
489 | // $ret = openssl_pkcs7_verify($to_verify_filename,PKCS7_TEXT|PKCS7_NOVERIFY, $cert_filename, $cainfo); |
||
490 | $cmd = "openssl smime -verify -binary -in $to_verify_filename -CAfile $cainfo -signer $cert_filename 2>/dev/null"; |
||
491 | $ret = exec($cmd, $content, $rc); |
||
492 | if ($rc === 0) |
||
493 | $ret = true; |
||
494 | else |
||
495 | $ret = false; |
||
496 | |||
497 | echo "FINE VERIFICA openssl_pkcs7_verify valore di ritorno: ".$ret."\n"; |
||
498 | wlog(1,0, "FINE VERIFICA openssl_pkcs7_verify valore di ritorno: ".$ret."\n"); |
||
499 | |||
500 | @unlink($to_verify_filename); |
||
501 | |||
502 | return $ret; |
||
503 | } |
||
504 | |||
505 | function app_tag($tag_name, $tag_value, &$xml, $option = '', $arr_att = false) { |
||
506 | |||
507 | |||
508 | switch ($option) { |
||
509 | |||
510 | case 'OPTIONAL': |
||
511 | |||
512 | if ($tag_value == '') { |
||
513 | return; |
||
514 | } |
||
515 | |||
516 | break; |
||
517 | |||
518 | case 'OPTIONAL-ZERO': |
||
519 | |||
520 | if ($tag_value == '' || $tag_value == '0') { |
||
521 | return; |
||
522 | } |
||
523 | |||
524 | break; |
||
525 | |||
526 | case 'OPTIONAL-ALLZERO': |
||
527 | |||
528 | if (trim($tag_value, '0') == '') { |
||
529 | return; |
||
530 | } |
||
531 | |||
532 | break; |
||
533 | } |
||
534 | |||
535 | $xml .= '<'.$tag_name; |
||
536 | |||
537 | if (is_array ($arr_att)) { |
||
538 | |||
539 | while (list ($att_name, $att_value) = each($arr_att)) { |
||
540 | |||
541 | $xml .= ' '.$att_name."=\"".$att_value."\""; |
||
542 | } |
||
543 | |||
544 | } |
||
545 | |||
546 | $xml .= '>'.inspect_xml_entities($tag_value).'</'.$tag_name.'>'; |
||
547 | //$xml .= '>'.$tag_value.'</'.$tag_name.'>'; |
||
548 | |||
549 | } |
||
550 | |||
551 | function ini_tag($tag_name, &$xml, $arr_att = false) { |
||
552 | |||
553 | $xml .= '<'.$tag_name; |
||
554 | |||
555 | |||
556 | if (is_array ($arr_att)) { |
||
557 | |||
558 | while (list ($att_name, $att_value) = each($arr_att)) { |
||
559 | $xml .= ' '.$att_name."=\"".$att_value."\""; |
||
560 | } |
||
561 | } |
||
562 | |||
563 | $xml .= '>'; |
||
564 | } |
||
565 | |||
566 | function end_tag($tag_name, &$xml) { |
||
567 | |||
568 | $xml .= '</'.$tag_name.'>'; |
||
569 | } |
||
570 | |||
571 | function inspect_xml_entities($string) { |
||
572 | |||
573 | $string = strtr($string,array( |
||
574 | '&' => '&', |
||
575 | '>' => '>', |
||
576 | '<' => '<', |
||
577 | '"' => '"', |
||
578 | '\'' => ''' )); |
||
579 | |||
580 | /* |
||
581 | $string = str_replace(array('ü', 'Ü', 'ö', |
||
582 | 'Ö', 'ä', 'Ä', |
||
583 | 'ß', '<', '>', |
||
584 | '"', '\'' |
||
585 | ), |
||
586 | array('ü', 'Ü', 'ö', |
||
587 | 'Ö', 'ä', 'Ä', |
||
588 | 'ß', '<', '>', |
||
589 | '"', ''' |
||
590 | ), |
||
591 | $xml |
||
592 | ); |
||
593 | |||
594 | $string = preg_replace(array("/\&([a-z\d\#]+)\;/i", |
||
595 | "/\&/", |
||
596 | "/\#\|\|([a-z\d\#]+)\|\|\#/i", |
||
597 | "/([^a-zA-Z\d\s\<\>\&\;\.\:\=\"\-\/\%\?\!\'\(\)\[\]\{\}\$\#\+\,\@_])/e" |
||
598 | ), |
||
599 | array("#||\\1||#", |
||
600 | "&", |
||
601 | "&\\1;", |
||
602 | "'&#'.ord('\\1').';'" |
||
603 | ), |
||
604 | $xml |
||
605 | ); |
||
606 | */ |
||
607 | |||
608 | return $string; |
||
609 | } |
||
610 | |||
611 | function read_cert($cert_filename) { |
||
612 | |||
613 | //$pemdata = implode('', file($cert_filename)); |
||
614 | |||
615 | //CORREZIONE MM |
||
616 | $fp = fopen($cert_filename, "r"); |
||
617 | $pemdata = fread($fp,filesize($cert_filename)); |
||
618 | fclose($fp); |
||
619 | |||
620 | // Get a certificate resource from the PEM string. |
||
621 | $cert_handler = openssl_x509_read($pemdata); |
||
622 | |||
623 | // Parse the resource |
||
624 | $arr_cert_data = openssl_x509_parse($cert_handler); |
||
625 | |||
626 | // Free the resource |
||
627 | openssl_x509_free($cert_handler); |
||
628 | |||
629 | return $arr_cert_data; |
||
630 | } |
||
631 | |||
632 | function check_certificato($arr_cert, $class = false) { |
||
633 | |||
634 | $arr_crl = ''; |
||
635 | |||
636 | // CONTROLLO EMITTENTE |
||
637 | // |
||
638 | $trusted_issuer['C'] = CA_C; |
||
639 | $trusted_issuer['O'] = CA_O; |
||
640 | $trusted_issuer['OU'] = CA_OU; |
||
641 | $trusted_issuer['CN'] = CA_CN; |
||
642 | |||
643 | if ($trusted_issuer['C'] != $arr_cert['issuer']['C'] || |
||
644 | $trusted_issuer['O'] != $arr_cert['issuer']['O'] || |
||
645 | $trusted_issuer['OU'] != $arr_cert['issuer']['OU'] || |
||
646 | $trusted_issuer['CN'] != $arr_cert['issuer']['CN']) { |
||
647 | |||
648 | if ($class) { |
||
649 | |||
650 | $class->gestione_fault($class->method_namespace, 'Certification Authority non riconosciuta'); |
||
651 | return false; |
||
652 | } |
||
653 | else { |
||
654 | |||
655 | return array(20026, 'CA emittente: '.$arr_cert['issuer']['C'].' - '.$arr_cert['issuer']['O'].' - '.$arr_cert['issuer']['OU'].' - '.$arr_cert['issuer']['CN']); |
||
656 | } |
||
657 | } |
||
658 | |||
659 | // CONTROLLO SUBJECT |
||
660 | // |
||
661 | $trusted_subject['C'] = SC_C; |
||
662 | $trusted_subject['O'] = SC_O; |
||
663 | $trusted_subject['OU'] = SC_OU; |
||
664 | $trusted_subject['CN'] = SC_CN; |
||
665 | |||
666 | if ($trusted_subject['C'] != $arr_cert['subject']['C'] || |
||
667 | $trusted_subject['O'] != $arr_cert['subject']['O'] || |
||
668 | $trusted_subject['OU'] != $arr_cert['subject']['OU'] || |
||
669 | $trusted_subject['CN'] != $arr_cert['subject']['CN']) { |
||
670 | |||
671 | if ($class) { |
||
672 | |||
673 | $class->gestione_fault($class->method_namespace, 'Soggetto del certificato non riconosciuto'); |
||
674 | return false; |
||
675 | } |
||
676 | else { |
||
677 | |||
678 | return array(20037, 'Subject: '.$arr_cert['subject']['C'].' - '.$arr_cert['subject']['O'].' - '.$arr_cert['subject']['OU'].' - '.$arr_cert['subject']['CN']); |
||
679 | } |
||
680 | } |
||
681 | |||
682 | // CONTROLLO PERIODO DI VALIDITA' |
||
683 | // |
||
684 | ///////////////////////////////////////////////// |
||
685 | // RECUPERO DATA DI SISTEMA DA ORACLE |
||
686 | ///////////////////////////////////////////////// |
||
687 | $sysdate = oracle_date('yymmddhh24miss'); |
||
688 | |||
689 | if (!$sysdate) { |
||
690 | |||
691 | if ($class) { |
||
692 | |||
693 | $class->error_code = 60013; |
||
694 | $class->gestione_fault($class->method_namespace); |
||
695 | return false; |
||
696 | } |
||
697 | else { |
||
698 | |||
699 | return array(20027, ''); |
||
700 | } |
||
701 | } |
||
702 | |||
703 | $sysdate = (float) $sysdate; |
||
704 | $valid_from = (float) substr($arr_cert['validFrom'], 0, 12); |
||
705 | $valid_to = (float) substr($arr_cert['validTo'], 0, 12); |
||
706 | |||
707 | if ($valid_from > $sysdate) { |
||
708 | |||
709 | if ($class) { |
||
710 | |||
711 | $class->gestione_fault($class->method_namespace, 'Certificato non valido - Errore: Data inizio validità.'); |
||
712 | return false; |
||
713 | } |
||
714 | else { |
||
715 | |||
716 | return array(20028, "Data inizio validità: $valid_from"); |
||
717 | } |
||
718 | } |
||
719 | |||
720 | if ($valid_to < $sysdate) { |
||
721 | |||
722 | if ($class) { |
||
723 | |||
724 | $class->gestione_fault($class->method_namespace, 'Certificato non valido - Errore: Data fine validità.'); |
||
725 | return false; |
||
726 | } |
||
727 | else { |
||
728 | |||
729 | return array(20029, "Data fine validità: $valid_to"); |
||
730 | } |
||
731 | } |
||
732 | |||
733 | if (CRL_CHECK == 'SI') { |
||
734 | |||
735 | // RECUPERO CRL |
||
736 | list($err, $ret) = get_crl($class); |
||
737 | |||
738 | if ($err) { |
||
739 | |||
740 | if ($class) { |
||
741 | |||
742 | $class->error_code = $err; |
||
743 | $class->gestione_fault($class->method_namespace, $ret); |
||
744 | return false; |
||
745 | } |
||
746 | else { |
||
747 | |||
748 | return array($err, $ret); |
||
749 | } |
||
750 | } |
||
751 | |||
752 | // CONTROLLO CERTIFICATI REVOCATI |
||
753 | $arr_crl = $ret; |
||
754 | $needle = ' Serial Number: '; |
||
755 | |||
756 | $serial_number = trim(strtoupper(dechex($arr_cert['serialNumber']))); |
||
757 | |||
758 | foreach($arr_crl as $k=>$v) { |
||
759 | |||
760 | $pos = strpos($v, $needle); |
||
761 | |||
762 | if ($pos === false) { |
||
763 | |||
764 | if(strpos($v, 'BEGIN X509 CRL')) |
||
765 | break; |
||
766 | } |
||
767 | else { |
||
768 | |||
769 | $sn_revoked = trim(substr($v, strlen($needle))); |
||
770 | |||
771 | if ($sn_revoked == $serial_number) { |
||
772 | |||
773 | if ($class) { |
||
774 | |||
775 | $class->gestione_fault($class->method_namespace, 'Certificato revocato'); |
||
776 | return false; |
||
777 | } |
||
778 | else { |
||
779 | |||
780 | return array(20031, "SERIAL NUMBER: $serial_number"); |
||
781 | } |
||
782 | } |
||
783 | } |
||
784 | } |
||
785 | } |
||
786 | |||
787 | if ($class) |
||
788 | return true; |
||
789 | else |
||
790 | return array(0, ''); |
||
791 | } |
||
792 | |||
793 | function get_crl(&$class) { |
||
794 | |||
795 | include_once(APP_PATH.'include/LSTU_fastcache.inc'); |
||
796 | |||
797 | $fname_cache = APP_PATH.'tmp/CRL_cache_date'; |
||
798 | $fname_in = APP_PATH.'tmp/CRL_binary'; |
||
799 | $fname_out = APP_PATH.'tmp/CRL_text'; |
||
800 | |||
801 | // LETTURA FILE CACHE |
||
802 | $ret = fcache_read($fname_cache, $crl); |
||
803 | |||
804 | if ($ret !== 0) { |
||
805 | |||
806 | include_once(APP_PATH.'include/LSTU_http_requests.inc'); |
||
807 | |||
808 | // *************************************************** |
||
809 | // CONNESSIONE |
||
810 | // *************************************************** |
||
811 | $headers[] = new HTTP_Header('User-Agent', 'PHP_soap_client'); |
||
812 | //$headers[] = new HTTP_Header('Connection', 'close'); |
||
813 | $headers[] = new HTTP_Header('Host', CRL_SERVER); |
||
814 | $script = '/var/crl_territorio.php'; |
||
815 | |||
816 | $req = new HTTP_Req('GET', $script, 'HTTP/1.0', $headers); |
||
817 | |||
818 | $con = new HTTP_Connection(CRL_SERVER); |
||
819 | $rc = $con->Connect(); |
||
820 | |||
821 | if ($rc) { |
||
822 | |||
823 | if ($class) |
||
824 | return array(60014, 'CONNESSIONE FALLITA A: '.CRL_SERVER.$script); |
||
825 | else |
||
826 | return array(20032, 'CONNESSIONE FALLITA A: '.CRL_SERVER.$script); |
||
827 | } |
||
828 | else { |
||
829 | |||
830 | $con->Request($req); // send request |
||
831 | $con->Response($res); // creates a response obj read from server |
||
832 | $con->Close(); // close connection to server |
||
833 | |||
834 | $crl = $res->GetEntityBody();// echo entity body from response (file contents) |
||
835 | |||
836 | if (substr($crl, 0, 5) != 'CRLOK') { |
||
837 | |||
838 | if ($class) |
||
839 | return array(60015, 'RESPONSE: '.$crl); |
||
840 | else |
||
841 | return array(20033, 'RESPONSE: '.$crl); |
||
842 | } |
||
843 | |||
844 | // SCRITTURA FILE CRL BINARIO |
||
845 | $ret = wfile($fname_in, substr($crl, 5)); |
||
846 | if (!$ret) { |
||
847 | |||
848 | if ($class) |
||
849 | return array(60016, 'Errore scrittura file: '.$fname); |
||
850 | else |
||
851 | return array(20034, 'Errore scrittura file: '.$fname); |
||
852 | } |
||
853 | |||
854 | $arr = array(); |
||
855 | $ret = ''; |
||
856 | |||
857 | // CONTROLLO FIRMA CRL E |
||
858 | // SCRITTURA FILE CRL TESTO |
||
859 | exec ('openssl crl -inform DER -text -in '.$fname_in.' -out '.$fname_out.' -CAfile '.FILE_CA.' 2>&1', $arr, $ret); |
||
860 | |||
861 | if ($ret !== 0) { |
||
862 | |||
863 | if ($class) |
||
864 | return array(60017, 'ERRORE nel comando OPENSSL CRL. Codice di ritorno: '.$ret.'. Message: '.implode(' - ', $arr)); |
||
865 | else |
||
866 | return array(20035, 'ERRORE nel comando OPENSSL CRL. Codice di ritorno: '.$ret.'. Message: '.implode(' - ', $arr)); |
||
867 | } |
||
868 | |||
869 | // SCRITTURA FILE CACHE |
||
870 | $data_crl = "\n".'Web Server Date: '.date("d/m/Y H:i:s"); |
||
871 | $ret = fcache_write($fname_cache, $data_crl, 3600); |
||
872 | if ($ret !== 0) { |
||
873 | |||
874 | if ($class) |
||
875 | return array(60018, 'ERRORE nella scrittura del file: '.$fname_cache.'. Codice fcache: '.$ret); |
||
876 | else |
||
877 | return array(20036, 'ERRORE nella scrittura del file: '.$fname_cache.'. Codice fcache: '.$ret); |
||
878 | } |
||
879 | } |
||
880 | } |
||
881 | |||
882 | if (is_file($fname_out)) { |
||
883 | |||
884 | // RITORNO FILE CRL TESTO IN ARRAY |
||
885 | $arr_crl = file($fname_out); |
||
886 | } |
||
887 | |||
888 | if (!is_array($arr_crl)) { |
||
889 | |||
890 | if ($class) |
||
891 | return array(60019, 'Il file '.$fname_out.' è vuoto o non è stato possibile leggerlo.'); |
||
892 | else |
||
893 | return array(20030, 'Il file '.$fname_out.' è vuoto o non è stato possibile leggerlo.'); |
||
894 | } |
||
895 | |||
896 | return array(0, $arr_crl); |
||
897 | } |
||
898 | |||
899 | function get_arrpk() { |
||
900 | |||
901 | $arr_pk = array(PK_ENTE, PK_PWD); |
||
902 | return $arr_pk; |
||
903 | } |
||
904 | |||
905 | function firma_allegato($filename_unsigned, $filename_pkcs7) { |
||
906 | |||
907 | $arr_privkey = get_arrpk(); |
||
908 | $arr_header = array(); |
||
909 | |||
910 | if (!openssl_pkcs7_sign($filename_unsigned, $filename_pkcs7, CERT_ENTE, $arr_privkey, $arr_header, PKCS7_TEXT + PKCS7_DETACHED)) { |
||
911 | |||
912 | // log errori openssl |
||
913 | $msg_tot = 'OPENSSL ERROR: '; |
||
914 | while($msg = openssl_error_string()) |
||
915 | $msg_tot .= ' - '.$msg; |
||
916 | |||
917 | return $msg_tot; |
||
918 | } |
||
919 | |||
920 | return 'OK'; |
||
921 | } |
||
922 | ?> |