.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgment:
* "This product includes software developed by the pfSense Project
* for use in the pfSense® software distribution. (http://www.pfsense.org/).
*
* 4. The names "pfSense" and "pfSense Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* coreteam@pfsense.org.
*
* 5. Products derived from this software may not be called "pfSense"
* nor may "pfSense" appear in their names without prior written
* permission of the Electric Sheep Fencing, LLC.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
*
* "This product includes software developed by the pfSense Project
* for use in the pfSense software distribution (http://www.pfsense.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
##|+PRIV
##|*IDENT=page-diagnostics-logs-pptpvpn
##|*NAME=Status: Logs: VPN
##|*DESCR=Allow access to the 'Status: Logs: VPN' page.
##|*MATCH=status_logs_vpn.php*
##|-PRIV
require_once("status_logs_common.inc");
require_once("vpn.inc");
/*
Build a list of allowed log files so we can reject others to prevent the page
from acting on unauthorized files.
*/
$allowed_logs = array(
"vpn" => array("name" => gettext("VPN Logins"),
"shortcut" => "poes"),
"poes" => array("name" => gettext("PPPoE Service"),
"shortcut" => "pppoes"),
"l2tps" => array("name" => gettext("L2TP Service"),
"shortcut" => "l2tps"),
);
// The logs to display are specified in a GET argument. Default to 'system' logs
if (!$_GET['logfile']) {
$logfile = 'vpn';
$vpntype = "poes";
} else {
$logfile = $_GET['logfile'];
$vpntype = $_GET['vpntype'];
if (!array_key_exists($logfile, $allowed_logs)) {
/* Do not let someone attempt to load an unauthorized log. */
$logfile = 'vpn';
$vpntype = "poes";
}
}
if ($vpntype == 'poes') { $allowed_logs['vpn']['name'] = gettext("PPPoE Logins"); }
if ($vpntype == 'l2tp') { $allowed_logs['vpn']['name'] = gettext("L2TP Logins"); }
// Log Filter Submit - VPN
log_filter_form_vpn_submit();
// Manage Log Section - Code
manage_log_code();
// Status Logs Common - Code
status_logs_common_code();
if ($filtertext) {
$filtertextmeta="?filtertext=$filtertext";
}
$pgtitle = array(gettext("Status"), gettext("System Logs"), gettext("VPN"), gettext($allowed_logs[$logfile]["name"]));
include("head.inc");
if (!$input_errors && $savemsg) {
print_info_box($savemsg, 'success');
$manage_log_active = false;
}
// Tab Array
tab_array_logs_common();
// Manage Log - Section/Form
if ($system_logs_manage_log_form_hidden) {
manage_log_section();
}
// Filter Section/Form - VPN
filter_form_vpn();
// Now the forms are complete we can draw the log table and its controls
if (!$rawfilter) {
system_log_filter();
// Remove those not of the selected vpn type (poes / l2tp).
if ($logfile == "vpn") {
foreach ($filterlog as $key => $filterent) {
if (!preg_match('/' . $vpntype . '/', $filterent['type'])) {
unset($filterlog[$key]);
}
}
}
?>
=gettext("Time")?> |
=gettext("Action")?> |
=gettext("User")?> |
=gettext("IP Address")?> |
=htmlspecialchars($filterent['time'])?>
|
=htmlspecialchars($filterent['action'])?>
|
=htmlspecialchars($filterent['user'])?>
|
=htmlspecialchars($filterent['ip_address'])?>
|
=gettext("Time")?> |
=gettext("Type")?> |
=gettext("PID")?> |
=gettext("Log Message")?> |
=htmlspecialchars($filterent['time'])?>
|
=htmlspecialchars($filterent['type'])?>
|
=htmlspecialchars($filterent['pid'])?>
|
=htmlspecialchars($filterent['message'])?>
|
\n";
echo "" . htmlspecialchars(join(" ", array_slice($logent, 0, 3))) . " | \n";
if ($llent[0] == "login") {
echo " | \n";
} else {
echo " | \n";
}
echo "" . htmlspecialchars($llent[3]) . " | \n";
echo "" . htmlspecialchars($llent[2]) . " | \n";
echo "\n";
}
return($rows);
}
// Log Filter Submit - VPN
function log_filter_form_vpn_submit() {
global $filtersubmit, $interfacefilter, $filtertext;
global $filterlogentries_submit, $filterfieldsarray, $actpass, $actblock;
global $filter_active, $filterlogentries_qty;
$filtersubmit = getGETPOSTsettingvalue('filtersubmit', null);
if ($filtersubmit) {
$filter_active = true;
$filtertext = getGETPOSTsettingvalue('filtertext', "");
$filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
}
$filterlogentries_submit = getGETPOSTsettingvalue('filterlogentries_submit', null);
if ($filterlogentries_submit) {
$filter_active = true;
$filterfieldsarray = array();
$filterfieldsarray['time'] = getGETPOSTsettingvalue('filterlogentries_time', null);
$filterfieldsarray['type'] = getGETPOSTsettingvalue('filterlogentries_type', null);
$filterfieldsarray['pid'] = getGETPOSTsettingvalue('filterlogentries_pid', null);
$filterfieldsarray['message'] = getGETPOSTsettingvalue('filterlogentries_message', null);
$filterfieldsarray['action'] = getGETPOSTsettingvalue('filterlogentries_action', null);
$filterfieldsarray['user'] = getGETPOSTsettingvalue('filterlogentries_user', null);
$filterfieldsarray['ip_address'] = getGETPOSTsettingvalue('filterlogentries_ip_address', null);
$filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
}
}
// Filter Section/Form - VPN
function filter_form_vpn() {
global $filter_active, $rawfilter, $filterfieldsarray, $filtertext, $filterlogentries_qty, $nentries, $Include_Act, $interfacefilter;
global $logfile;
global $system_logs_filter_form_hidden;
if ($filter_active) {
$panel_state = 'in';
$panel_body_state = SEC_OPEN;
} else {
if ($system_logs_filter_form_hidden) {
$panel_state = 'out';
$panel_body_state = SEC_OPEN;
} else {
$panel_state = 'in';
$panel_body_state = SEC_CLOSED;
}
}
if (!$rawfilter) { // Advanced log filter form
$form = new Form(false);
$form->setAttribute('id', 'filter-form')->addClass('collapse ' . $panel_state);
$section = new Form_Section('Advanced Log Filter', 'filter-panel', COLLAPSIBLE|$panel_body_state);
if ($logfile == "vpn") {
$group = new Form_Group('');
$group->add(new Form_Input(
'filterlogentries_time',
null,
'text',
$filterfieldsarray['time']
))->setWidth(3)->setHelp('Time');
$group->add(new Form_Input(
'filterlogentries_action',
null,
'text',
$filterfieldsarray['action']
))->setWidth(3)->setHelp('Action');
$group->add(new Form_Input(
'filterlogentries_qty',
null,
'number',
$filterlogentries_qty,
['placeholder' => $nentries]
))->setWidth(2)->setHelp('Quantity');
$section->add($group);
$group = new Form_Group('');
$group->add(new Form_Input(
'filterlogentries_user',
null,
'text',
$filterfieldsarray['user']
))->setWidth(3)->setHelp('User');
$group->add(new Form_Input(
'filterlogentries_ip_address',
null,
'text',
$filterfieldsarray['ip_address']
))->setWidth(4)->setHelp('IP Address');
} else {
$group = new Form_Group('');
$group->add(new Form_Input(
'filterlogentries_time',
null,
'text',
$filterfieldsarray['time']
))->setWidth(3)->setHelp('Time');
$group->add(new Form_Input(
'filterlogentries_type',
null,
'text',
$filterfieldsarray['type']
))->setWidth(2)->setHelp('Type');
$group->add(new Form_Input(
'filterlogentries_pid',
null,
'text',
$filterfieldsarray['pid']
))->setWidth(2)->setHelp('PID');
$group->add(new Form_Input(
'filterlogentries_qty',
null,
'number',
$filterlogentries_qty,
['placeholder' => $nentries]
))->setWidth(2)->setHelp('Quantity');
$section->add($group);
$group = new Form_Group('');
$group->add(new Form_Input(
'filterlogentries_message',
null,
'text',
$filterfieldsarray['message']
))->setWidth(7)->setHelp('Log Message');
}
$btnsubmit = new Form_Button(
'filterlogentries_submit',
gettext('Apply Filter'),
null,
'fa-filter'
);
} else { // Simple log filter form
$form = new Form(false);
$form->setAttribute('id', 'filter-form')->addClass('collapse ' . $panel_state);
$section = new Form_Section('Log Filter', 'filter-panel', COLLAPSIBLE|$panel_body_state);
$group = new Form_Group('');
$group->add(new Form_Input(
'filtertext',
null,
'text',
$filtertext
))->setWidth(6)->setHelp('Filter Expression');
$group->add(new Form_Input(
'filterlogentries_qty',
null,
'number',
$filterlogentries_qty,
['placeholder' => $nentries]
))->setWidth(2)->setHelp('Quantity');
$btnsubmit = new Form_Button(
'filtersubmit',
gettext('Apply Filter'),
null,
'fa-filter'
);
}
$btnsubmit->removeClass('btn-primary')->addClass('btn-success')->addClass('btn-sm');
$group->add(new Form_StaticText(
'',
$btnsubmit
));
$group->setHelp('' . gettext('Regular expression reference') . ' ' . gettext('Precede with exclamation (!) to exclude match.'));
$section->add($group);
$form->add($section);
print $form;
}
?>