diff --git a/lib/validatorClass.php b/lib/validatorClass.php index c863f857043f8b74ebd502e3611716e64c6b72fb..842973a41ddb2f151aceac261700026612cca834 100644 --- a/lib/validatorClass.php +++ b/lib/validatorClass.php @@ -65,7 +65,7 @@ class Validator { $fed_id = strtoupper(isset($_REQUEST['edugain'])?$_REQUEST['edugain']:$_REQUEST['fed_id']); $fed_id = $this->edugain->getCode($fed_id); $this->edugain->load_federations(0,$fed_id); - $this->edugain->load_federation_basic_details('data'); + $this->edugain->load_federation_basic_details('all'); if (empty($this->edugain->FEDS[$fed_id])) { $this->params['federror'] = 'No such federation in the eduGAIN database: '.$fed_id; } else { @@ -75,19 +75,27 @@ class Validator { } else { $this->params['fedname'] = $this->edugain->FEDS[$fed_id]['name']; $this->params['regauth'] = $this->edugain->FEDS[$fed_id]['reg_auth']; - $certificate = $this->edugain->FEDS[$fed_id]['certificate'][0]; - $certificate = trim($certificate, "\n"); - $certfilename = $this->params['filename']."-fromdb.crt"; - if (strlen($certificate)) { - $ff = fopen($certfilename, 'w'); - fputs($ff, "-----BEGIN CERTIFICATE-----\n"); - for ($i=0; ; $i=$i+64) { + for ($n=0; $n<count($this->edugain->FEDS[$fed_id]['certificate']); $n++) { + $certificate = $this->edugain->FEDS[$fed_id]['certificate'][$n]['data']; + $certificate = trim($certificate, "\n"); + $fnamesuffix = ''; + if ($n > 0) { + $fnamesuffix = "_$n"; + } + $certfilename = $this->params['filename'].$fnamesuffix."-fromdb.crt"; + if (strlen($certificate)) { + $ff = fopen($certfilename, 'w'); + fputs($ff, "-----BEGIN CERTIFICATE-----\n"); + for ($i=0; ; $i=$i+64) { if (substr($certificate, $i, 64) == '') break; fputs($ff, substr($certificate, $i, 64)."\n"); - } - fputs($ff, "-----END CERTIFICATE-----\n"); - fclose($ff); + } + fputs($ff, "-----END CERTIFICATE-----\n"); + fclose($ff); + } } + $ff = fopen($this->params['filename'].'-certinfo.json', 'w'); + fputs($ff, json_encode($this->edugain->FEDS[$fed_id]['certificate'])); } } $this->params['auto'] = $this->params['validate'] = $this->params['edugain'] = 1; @@ -318,11 +326,30 @@ class Validator { else $fromdb = 0; system($this->validatordir."/aggregator.py ".$params['filename']." $schres $fromdb >".$params['filename']."-aggregator.log 2>&1",$aggres); system($this->validatordir."/mda.sh --verbose ".$params['filename'].".xml main > ".$params['filename']."-mda.log 2>&1", $res); + $certidx = 0; + $searchfor = "Unable to validate signature"; + $matches = array(); + $handle = @fopen($params['filename']."-mda.log", "r"); + if ($handle) { + while (!feof($handle)) { + $buffer = fgets($handle); + if (strpos($buffer, $searchfor) !== FALSE) { + $matches[] = $buffer; + break; + } + } + fclose($handle); + } + if (count($matches)) { + system($this->validatordir."/aggregator.py ".$params['filename']." $schres $fromdb 1 >".$params['filename']."-aggregator2.log 2>&1",$aggres); + system($this->validatordir."/mda.sh --verbose ".$params['filename']."_1.xml main > ".$params['filename']."-mda.log 2>&1", $res); + $certidx = 1; + } system($this->validatordir."/pyff.sh ".$params['filename'].'>'.$params['filename']."-pyff.log 2>&1", $pyffres); } else $res = $schres; } $args = $params['filename']." \"".$params['langsetting']."\" ".$params['validate']." ".$params['onlyone']." ".$params['xmlout']." ".$params['gobetween']." ".$params['edugain']; - $printres = shell_exec($this->validatordir."/printresults.py $args $res $schres $aggres $pyffres"); + $printres = shell_exec($this->validatordir."/printresults.py $args $res $schres $aggres $pyffres $certidx"); } else $printres = "<span class='noticeerr'>URL fetching failed ".$ret[1]."</span>"; if (!$params['gobetween']) {