$rcert) { if (($rcert['refid'] == $cert['refid']) || ($rcert['descr'] == $cert['descr'])) { unset($crl['cert'][$id]); if (count($crl['cert']) == 0) { // Protect against accidentally switching the type to imported, for older CRLs if (!isset($crl['method'])) { $crl['method'] = "internal"; } crl_update($crl); } else { crl_update($crl); } return true; } } return false; } // openssl_crl_status messages from certs.inc global $openssl_crl_status; // prepare config types if (!isset($config['ca']) || !is_array($config['ca'])) { $config['ca'] = array(); } if (!isset($config['cert']) || !is_array($config['cert'])) { $config['cert'] = array(); } if (!isset($config['crl']) || !is_array($config['crl'])) { $config['crl'] = array(); } $a_crl =& $config['crl']; $thiscrl = false; $act=null; if ($_SERVER['REQUEST_METHOD'] === 'GET') { // locate cert by refid, returns false when not found if (isset($_GET['id'])) { $thiscrl =& lookup_crl($_GET['id']); if ($thiscrl !== false) { $id = $_GET['id']; } } if (isset($_GET['act'])) { $act = $_GET['act']; } if ($act == "exp") { crl_update($thiscrl); $exp_name = urlencode("{$thiscrl['descr']}.crl"); $exp_data = base64_decode($thiscrl['text']); $exp_size = strlen($exp_data); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename={$exp_name}"); header("Content-Length: $exp_size"); echo $exp_data; exit; } elseif ($act == "new") { $pconfig = array(); $pconfig['descr'] = null; $pconfig['crltext'] = null; $pconfig['crlmethod'] = !empty($_GET['method']) ? $_GET['method'] : null; $pconfig['caref'] = !empty($_GET['caref']) ? $_GET['caref'] : null; $pconfig['lifetime'] = "9999"; $pconfig['serial'] = "0"; } } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { $pconfig = $_POST; // locate cert by refid, returns false when not found if (isset($_POST['id'])) { $thiscrl =& lookup_crl($_POST['id']); if ($thiscrl !== false) { $id = $_POST['id']; } } if (isset($_POST['act'])) { $act = $_POST['act']; } if ($act == "del" && isset($id)) { $name = $thiscrl['descr']; if (is_openvpn_server_crl($id)) { $savemsg = sprintf(gettext("Certificate Revocation List %s is in use and cannot be deleted"), $name) . "
"; } else { foreach ($a_crl as $cid => $acrl) { if ($acrl['refid'] == $thiscrl['refid']) { unset($a_crl[$cid]); } } write_config("Deleted CRL {$name}."); header("Location: system_crlmanager.php"); exit; } } elseif ($act == "delcert" && isset($id)) { if (!isset($thiscrl['cert']) || !is_array($thiscrl['cert'])) { header("Location: system_crlmanager.php"); exit; } $found = false; foreach ($thiscrl['cert'] as $acert) { if ($acert['refid'] == $pconfig['certref']) { $found = true; $thiscert = $acert; } } if (!$found) { header("Location: system_crlmanager.php"); exit; } $name = $thiscert['descr']; if (cert_unrevoke($thiscert, $thiscrl)) { openvpn_refresh_crls(); write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr'])); header("Location: system_crlmanager.php"); exit; } else { $savemsg = sprintf(gettext("Failed to delete Certificate %s from CRL %s"), $name, $thiscrl['descr']) . "
"; } $act="edit"; } elseif ($act == "addcert") { $input_errors = array(); if (!isset($id)) { header("Location: system_crlmanager.php"); exit; } // certref, crlref $crl =& lookup_crl($id); $cert = lookup_cert($pconfig['certref']); if (empty($crl['caref']) || empty($cert['caref'])) { $input_errors[] = gettext("Both the Certificate and CRL must be specified."); } if ($crl['caref'] != $cert['caref']) { $input_errors[] = gettext("CA mismatch between the Certificate and CRL. Unable to Revoke."); } if (!is_crl_internal($crl)) { $input_errors[] = gettext("Cannot revoke certificates for an imported/external CRL."); } if (!count($input_errors)) { $reason = (empty($pconfig['crlreason'])) ? OCSP_REVOKED_STATUS_UNSPECIFIED : $pconfig['crlreason']; cert_revoke($cert, $crl, $reason); openvpn_refresh_crls(); write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}."); header("Location: system_crlmanager.php"); exit; } } else { $input_errors = array(); $pconfig = $_POST; /* input validation */ if (($pconfig['crlmethod'] == "existing") || ($act == "editimported")) { $reqdfields = explode(" ", "descr crltext"); $reqdfieldsn = array( gettext("Descriptive name"), gettext("Certificate Revocation List data")); } elseif ($pconfig['crlmethod'] == "internal") { $reqdfields = explode( " ", "descr caref" ); $reqdfieldsn = array( gettext("Descriptive name"), gettext("Certificate Authority")); } do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors); /* save modifications */ if (count($input_errors) == 0) { if (isset($id)) { $crl =& $thiscrl; } else { $crl = array(); $crl['refid'] = uniqid(); } foreach (array("descr", "caref", "crlmethod") as $fieldname) { if (isset($pconfig[$fieldname])) { $crl[$fieldname] = $pconfig[$fieldname]; } } if (($pconfig['crlmethod'] == "existing") || ($act == "editimported")) { $crl['text'] = base64_encode($pconfig['crltext']); } if ($pconfig['crlmethod'] == "internal") { $crl['serial'] = empty($pconfig['serial']) ? 9999 : $pconfig['serial']; $crl['lifetime'] = empty($pconfig['lifetime']) ? 9999 : $pconfig['lifetime']; $crl['cert'] = array(); } if (!isset($id)) { $a_crl[] = $crl; } write_config("Saved CRL {$crl['descr']}"); openvpn_refresh_crls(); header("Location: system_crlmanager.php"); exit; } } } legacy_html_escape_form_data($pconfig); legacy_html_escape_form_data($thiscrl); include("head.inc"); ?>
0) { print_input_errors($input_errors); } if (isset($savemsg)) { print_info_box($savemsg); } ?>