#!/usr/bin/perl
#
#
# PIX Logging Architecture
# [Kristof Philipsen]
#
# This file is part of PIX Logging Architecture
#
# PIX Logging Architecture is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PIX Logging Architecture is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with PIX Logging Architecture; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

use DBI;
use CGI;

#
# include configuration 
#
require "conf.pl";	# General Configuration
require "subs.pl";	# Subroutines

# 
# Make Database Connection
#
db_connect();

#
# Get CGI Parameters 
#
$query = new CGI;
$type = clean_input($query->param("type"));

if ($type eq "") {
    $type="traffic";
}
$date=`date +%Y"-"%m"-"%d`;
$date=~s/\n//g;
#
# HTML SECTION
#
printtitle();
selecttimesearch();
print <<EOF;


<SCRIPT LANGUAGE="JavaScript" SRC="images/CalendarPopup.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript">document.write(getCalendarStyles());</SCRIPT>

<span class="titlehead"><b>PIX Logs > Search</b></span>
<br><br>
<span class="main">
Search: <a href="pix_search_logs?type=traffic" class="bodylink">traffic logs</a> | <a href="pix_search_logs?type=ids" class="bodylink">ids logs</span></a> | <a href="pix_search_logs?type=info" class="bodylink">info logs</span></a> 
<br><br>
<table width="500" cellpadding="0" cellspacing="0" border="0">
<td bgcolor="#000000" align="left" valign="top" height="3"></td>
<tr>
<td align="middle" valign="top" bgcolor="#a7a7a7">
EOF

# 
# TRAFFIC LOGS
#

if ($type eq "traffic") {
print <<EOF;
    	<span class="titlehead"><b>PIX Traffic Logs Search Criteria</b></span>
    	<form action="./pix_search_result_traffic" method="post" name="traffic">
    	</td>
    	<tr>
    	<td bgcolor="#000000" align="left" valign="top" height="3"></td>
    	</table>
EOF
}

#
# IDS LOGS
#

if ($type eq "ids") {
print <<EOF;
	<span class="titlehead"><b>PIX IDS Logs Search Criteria</b></span>
	<form action="./pix_search_result_ids" method="post" name="ids">
	</td>
	<tr>
	<td bgcolor="#000000" align="left" valign="top" height="3"></td>
	</table>
EOF
}

if ($type eq "info") {
print <<EOF;
        <span class="titlehead"><b>PIX Informational Logs Search Criteria</b></span>
        <form action="./pix_search_result_info" method="post" name="info">
        </td>
        <tr>
        <td bgcolor="#000000" align="left" valign="top" height="3"></td>
        </table>
EOF
}


print <<EOF;
    <table width="500" cellpadding="0" cellspacing="0" border="0">
    <td bgcolor="#5479d8"><span class="button"> >> General Criteria</span</td>
    </table>
    <table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
    <td align="left" valign="top"><br>
    Logging Resource:
    <select name="resource">
    <option selected value="">All Firewalls
    <option>
EOF
    $getAllResources="SELECT log_resource from traffic_log group by log_resource";
    $AllResources = $db_handle->prepare($getAllResources) or die "Couldn't prepare query '$getAllResources': $DBI::errstr\n";
    $AllResources->execute();
    while ($log_resource = $AllResources->fetchrow) {
    print <<EOF;
    <option value="$log_resource">$log_resource
EOF
    }
print <<EOF;
    </select><br><br>
EOF
if ($type eq "traffic") {
print <<EOF;
    Traffic Action:
    <select name="action">
    <option selected value="">Any
    <option>
    <option value="ACCEPT">ACCEPT
    <option value="DROP">DROP
    </select>
    &nbsp;&nbsp;
    Log Message:
    <select name="log_message">
    <option selected value="">Any
    <option>
EOF
    $getAllTrafficMessages="SELECT log_message from traffic_log group by log_message";
    $AllTrafficMessages = $db_handle->prepare($getAllTrafficMessages) or die "Couldn't prepare query '$getAllTrafficMessages': $DBI::errstr\n";
    $AllTrafficMessages->execute();
    while ($log_message = $AllTrafficMessages->fetchrow) {
print <<EOF;
    <option value="$log_message">$log_message
EOF
    }

} 

if ($type eq "info") {
print <<EOF;
    Log Message:
    <select name="log_message">
    <option selected value="">Any
    <option>
EOF
    $getAllInfoMessages="SELECT log_message from info_log group by log_message";
    $AllInfoMessages = $db_handle->prepare($getAllInfoMessages) or die "Couldn't prepare query '$getAllInfoMessages': $DBI::errstr\n";
    $AllInfoMessages->execute();
    while ($log_message = $AllInfoMessages->fetchrow) {
print <<EOF;
    <option value="$log_message">$log_message
EOF
    }

}


if ($type eq "ids") {
print <<EOF;
    Log Signature:
    <select name="log_signature">
    <option selected value="">Any
    <option>
EOF
    $getAllIDSMessages="SELECT log_signature from ids_log group by log_signature";
    $AllIDSMessages = $db_handle->prepare($getAllIDSMessages) or die "Couldn't prepare query '$getAllIDSMessages': $DBI::errstr\n";
    $AllIDSMessages->execute();
    while ($log_signature = $AllIDSMessages->fetchrow) {
print <<EOF;
    <option value="$log_signature">$log_signature
EOF
    }
}

if ($type eq "traffic") {
print <<EOF;
    </select> <a href="javascript:window.location.href='pix_message_info?message=' + document.traffic.log_message.options [document.traffic.log_message.selectedIndex].value;"><img src="images/pix_message_info.gif" border="0" align="top"></a>
EOF
}

if ($type eq "info") {
print <<EOF;
    </select> <a href="javascript:window.location.href='pix_message_info?message=' + document.info.log_message.options [document.info.log_message.selectedIndex].value;"><img src="images/pix_message_info.gif" border="0" align="top"></a>
EOF
}


if ($type eq "ids" || $type eq "traffic") {
print <<EOF;
     <br><br>
     </td></table>
    <table width="500" cellpadding="0" cellspacing="0" border="0">
    <td bgcolor="#5479d8"><span class="button"> >> TCP/IP Criteria</span</td>
    </table>
    <table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
    <td><br>
    Src IP: <input type="text" name="src_ip" border="0"></input> 
EOF
    if ($type eq "traffic") {
print <<EOF;
    Src Port: <input type="text" name="src_pt" size="5"></input> 
EOF
    }
print <<EOF;
    <br>
    Dst IP: <input type="text" name="dst_ip" border="0"></input>
EOF
    if ($type eq "traffic") {
print <<EOF;
    Dst Port: <input type="text" name="dst_pt" size="5"></input>
EOF
    }
print <<EOF;
    <br><br>Log Protocol: 
    <select name="protocol">
    <option selected value="">Any
    <option>
    <option value="TCP">TCP
    <option value="UDP">UDP
    <option value="ICMP">ICMP
EOF
    if ($type eq "ids") {
print <<EOF;
    <option value="IP">IP
EOF
    }
}

if ($type eq "info") {

print <<EOF;
    </td></table>
    <table width="500" cellpadding="0" cellspacing="0" border="0">
    <td bgcolor="#5479d8"><span class="button"> >> Info Selection Criteria</span</td>
    </table>
    <table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
    <td>
    <br>
    Informational Log: 
    <select name="info_match">
    <option value="equals">equals
    <option value="doesnotequal">does not equal
    <option value="contains" selected>contains
    <option value="doesnotcontain">does not contain
    <option value="startswith">starts with
    <option value="doesnotstartwith">does not start with
    <option value="endswith">ends with
    <option value="doesnotendwith">does not end with
    </select>
    <input type="text" name="info_criteria" border="0"></input>
EOF
}


print <<EOF;
    </select>
    <br><br>
    </td></table>
    <table width="500" cellpadding="0" cellspacing="0" border="0">
    <td bgcolor="#5479d8"><span class="button"> >> Time Criteria</span</td>
    </table>
    <table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
    <td>
<input type="radio" name="date_type" value="today" onClick="switchDiv('today');" checked>Today
<input type="radio" name="date_type" value="userdef" onClick="switchDiv('userdef');">Time Range
<input type="radio" name="date_type" value="all" onClick="switchDiv('all');">All Dates
<br>
<div id="today" style="position:absolute;">
<br>
Searching Logs for Today: <b>$date</b>
<br><br>
</div>
<div id="all" style="position:absolute;visibility:hidden;">
</div>
<div id="userdef" style="position:absolute;visibility:hidden;">
<br>

<SCRIPT LANGUAGE="JavaScript" ID="startdateset">
var sdateset = new CalendarPopup("testdiv1");
sdateset.setReturnFunction("setMultipleValues2");
function setMultipleValues2(y,m,d) {
     document.forms[0].start_year.value=y;
     document.forms[0].start_month.value=LZ(m);
     document.forms[0].start_day.value=LZ(d);
     }

</SCRIPT>

<SCRIPT LANGUAGE="JavaScript" ID="enddateset">
var edateset = new CalendarPopup("testdiv1");
edateset.setReturnFunction("setMultipleValues3");
function setMultipleValues3(y,m,d) {
     document.forms[0].end_year.value=y;
     document.forms[0].end_month.value=LZ(m);
     document.forms[0].end_day.value=LZ(d);
     }

</SCRIPT>


<table width="600" cellpadding="0" cellspacing="0">
<td align="left" valign="top">
    <a href="#" onClick="sdateset.showCalendar('anchor10'); return false;" class="bodylink">From:</a> 
</td>
<td align="left" valign="top">
    <select name="start_year" onClick="sdateset.showCalendar('anchor10'); return false;">
<option selected value="">-year-
<option>
<option value="2000">2000
<option value="2001">2001
<option value="2002">2002
<option value="2003">2003
<option value="2004">2004
<option value="2005">2005
<option value="2006">2006
<option value="2007">2007
<option value="2008">2008
<option value="2009">2009
<option value="2010">2010
</select>
<select name="start_month" onClick="sdateset.showCalendar('anchor10'); return false;">
<option selected value="">-month-
<option>
<option value="01">Jan
<option value="02">Feb
<option value="03">Mar
<option value="04">Apr
<option value="05">May
<option value="06">Jun
<option value="07">Jul
<option value="08">Aug
<option value="09">Sep
<option value="10">Oct
<option value="11">Nov
<option value="12">Dec
</select>
<select name="start_day" onClick="sdateset.showCalendar('anchor10'); return false;">
<option selected value="">-day-
<option>
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
</select>&nbsp;&nbsp;
<a href="#" id="anchor10" class="bodylink"><font color="#000000">-</a></a>
&nbsp;&nbsp;
<select name="start_hour">
<option selected value="">-hour-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
</select>
<select name="start_min">
<option selected value="">-min-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
<option value="32">32
<option value="33">33
<option value="34">34
<option value="35">35
<option value="36">36
<option value="37">37
<option value="38">38
<option value="39">39
<option value="40">40
<option value="41">41
<option value="42">42
<option value="43">43
<option value="44">44
<option value="45">45
<option value="46">46
<option value="47">47
<option value="48">48
<option value="49">49
<option value="50">50
<option value="51">51
<option value="52">52
<option value="53">53
<option value="54">54
<option value="55">55
<option value="57">56
<option value="58">58
<option value="59">59

</select>
<select name="start_sec">
<option selected value="">-sec-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
<option value="32">32
<option value="33">33
<option value="34">34
<option value="35">35
<option value="36">36
<option value="37">37
<option value="38">38
<option value="39">39
<option value="40">40
<option value="41">41
<option value="42">42
<option value="43">43
<option value="44">44
<option value="45">45
<option value="46">46
<option value="47">47
<option value="48">48
<option value="49">49
<option value="50">50
<option value="51">51
<option value="52">52
<option value="53">53
<option value="54">54
<option value="55">55
<option value="57">56
<option value="58">58
<option value="59">59
</select>
</td>
<tr>
<td align="left" valign="top">
<a href="#" onClick="edateset.showCalendar('anchor11'); return false;" class="bodylink">To:</a>
</td>
<td align="left" valign="top">
    <select name="end_year" onClick="edateset.showCalendar('anchor11'); return false;">
<option selected value="">-year-
<option>
<option value="2000">2000
<option value="2001">2001
<option value="2002">2002
<option value="2003">2003
<option value="2004">2004
<option value="2005">2005
<option value="2006">2006
<option value="2007">2007
<option value="2008">2008
<option value="2009">2009
<option value="2010">2010
</select>
<select name="end_month" onClick="edateset.showCalendar('anchor11'); return false;">
<option selected value="">-month-
<option>
<option value="01">Jan
<option value="02">Feb
<option value="03">Mar
<option value="04">Apr
<option value="05">May
<option value="06">Jun
<option value="07">Jul
<option value="08">Aug
<option value="09">Sep
<option value="10">Oct
<option value="11">Nov
<option value="12">Dec
</select>
<select name="end_day" onClick="edateset.showCalendar('anchor11'); return false;">
<option selected value="">-day-
<option>
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
</select>&nbsp;&nbsp;
<a href="#" id="anchor11" class="bodylink"><font color="#000000">-</a></a>
&nbsp;&nbsp;
<select name="end_hour">
<option selected value="">-hour-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
</select>
<select name="end_min">
<option selected value="">-min-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
<option value="32">32
<option value="33">33
<option value="34">34
<option value="35">35
<option value="36">36
<option value="37">37
<option value="38">38
<option value="39">39
<option value="40">40
<option value="41">41
<option value="42">42
<option value="43">43
<option value="44">44
<option value="45">45
<option value="46">46
<option value="47">47
<option value="48">48
<option value="49">49
<option value="50">50
<option value="51">51
<option value="52">52
<option value="53">53
<option value="54">54
<option value="55">55
<option value="57">56
<option value="58">58
<option value="59">59
                                                                                                                                                                                          
</select>
<select name="end_sec">
<option selected value="0">-sec-
<option>
<option value="00">00
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
<option value="32">32
<option value="33">33
<option value="34">34
<option value="35">35
<option value="36">36
<option value="37">37
<option value="38">38
<option value="39">39
<option value="40">40
<option value="41">41
<option value="42">42
<option value="43">43
<option value="44">44
<option value="45">45
<option value="46">46
<option value="47">47
<option value="48">48
<option value="49">49
<option value="50">50
<option value="51">51
<option value="52">52
<option value="53">53
<option value="54">54
<option value="55">55
<option value="57">56
<option value="58">58
<option value="59">59
</select>
</td>
</table>
</div>
<br><br><br><br><br>
</td>
</table>
EOF

if ($type eq "traffic" || $type eq "ids") {
print <<EOF;
<table width="500" cellpadding="0" cellspacing="0" border="0">
<td bgcolor="#5479d8"><span class="button"> >> Display Criteria</span</td>
</table>
<table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
<td>
Resolve Hostnames:
<input type=radio name="resolve" value="true">Yes
<input type=radio name="resolve" value="false" checked>No
<br><br>
</td>
<tr>
EOF
}
if ($type eq "traffic") {
print <<EOF;
<td bgcolor="#5479d8"><span class="button"> >> Filter Criteria</span</td>
</table>
<table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
<td>
Enable Display Filters:
<input type=radio name="filter" value="1">Yes
<input type=radio name="filter" value="0" checked>No
<br><br>
</td>
<tr>
EOF
}

if ($type eq "info") {
print <<EOF;
<table width="500" cellpadding="0" cellspacing="0" border="0" bgcolor="#d9d9d9">
<td>
</td>
<tr>
EOF
}

print <<EOF;
<td bgcolor="#000000" align="left" valign="top" height="3"></td>
<tr>
<td bgcolor="#a7a7a7" align="left" valign="top">
<input type="image" src="images/pla_search.gif" value="Search" border="0">
EOF

if ($type eq "traffic") {
print <<EOF;
<a href="javascript:window.document.traffic.reset();"><img src="images/pla_reset.gif" border="0"></a>
EOF
} 

if ($type eq "ids") {
print <<EOF;
<a href="javascript:window.document.ids.reset();"><img src="images/pla_reset.gif" border="0"></a>
EOF
}

if ($type eq "info") {
print <<EOF;
<a href="javascript:window.document.info.reset();"><img src="images/pla_reset.gif" border="0"></a>
EOF
}

print <<EOF;
</form>
</td>
<tr>
<td bgcolor="#000000" align="left" valign="top" height="3"></td>
</table>

<DIV ID="testdiv1" STYLE="position:absolute;visibility:hidden;background-color:white;layer-background-color:white;"></DIV>
<DIV ID="testdiv2" STYLE="position:absolute;visibility:hidden;background-color:white;layer-background-color:white;"></DIV>

EOF


#
# Disconnect Database
#
$db_handle->disconnect();

