| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- <?php
- // -------------------------------------------------------------------------------
- // | net2ftp: a web based FTP client |
- // | Copyright (c) 2003-2013 by David Gartner |
- // | |
- // | This program 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. |
- // | |
- // -------------------------------------------------------------------------------
- /*
- The consumption of server and network resources is logged per client IP
- address, and per target FTP server. The 2 database tables which contain
- the logs are:
- net2ftp_log_consumption_ipaddress: date, ipaddress, datatransfer, executiontime
- net2ftp_log_consumption_ftpserver: date, ftpserver, datatransfer, executiontime
-
- The database is read at the beginning of the script, and updated at the end
- of the script. There are 6 global variables:
-
- These variables
- $consumption_ipaddress_datatransfer,
- $consumption_ipaddress_executiontime,
- $consumption_ftpserver_datatransfer,
- $consumption_ftpserver_executiontime;
- contain the data transfer volume, script execution time and number of FTP
- servers that were accessed. They are inititialized at the beginning of the
- script and updated each time data is read/written from/to the FTP server.
-
- The variable
- $consumption_datatransfer_changeflag;
- is initialized as 0 and changed to 1 if data was transferred.
- This is to avoid having to run an SQL query if no data was transferred, e.g. when
- logging in, browsing the FTP server, when confirming an action or even for some
- actions like delete or chmod.
-
- The variable
- $consumption_database_updated;
- is initialized as 0 and changed to 1 when the database is updated with the consumption
- in putConsumption(). This is to avoid updating the database twice. The putConsumption()
- function is called from index.php and from shutdown() in filesystem.inc.php. On Windows
- the shutdown() function is called after *every* script execution.
- */
- // **************************************************************************************
- // **************************************************************************************
- // ** **
- // ** **
- function getConsumption() {
- // --------------
- // This function reads the consumption from the database.
- // It is run at the beginning of the script.
- // --------------
- // -------------------------------------------------------------------------
- // Global variables
- // -------------------------------------------------------------------------
- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result;
- // -------------------------------------------------------------------------
- // Initial checks
- // -------------------------------------------------------------------------
- // Verify if a database is used, and if consumption checking is turned on. If not: don't continue.
- if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; }
- // When user is not logged in, the FTP server is not set
- if ($net2ftp_globals["ftpserver"] == "") { return true; }
- // If the REMOTE_ADDR is not filled in, then there is a problem (IP spoofing), so return an error
- if ($net2ftp_globals["REMOTE_ADDR"] == "") {
- setErrorVars(false, __("Unable to determine your IP address."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // Add slashes to variables which are used in a SQL query, and which are
- // potentially unsafe (supplied by the user).
- // $date is calculated in this function
- // $time is calculated in this function
- $REMOTE_ADDR_safe = addslashes($net2ftp_globals["REMOTE_ADDR"]);
- $net2ftp_ftpserver_safe = addslashes($net2ftp_globals["ftpserver"]);
-
- // ----------------------------------------------
- // Do not log accesses, errors and consumption while the logs are being rotated
- // ----------------------------------------------
- $logStatus = getLogStatus();
- if ($net2ftp_result["success"] == false) { return false; }
- if ($logStatus != 0) { return true; }
- // -------------------------------------------------------------------------
- // Set the change flags to the initial value
- // -------------------------------------------------------------------------
- $net2ftp_globals["consumption_datatransfer_changeflag"] = 0;
- $net2ftp_globals["consumption_database_updated"] = 0;
- // -------------------------------------------------------------------------
- // Get date
- // -------------------------------------------------------------------------
- $date = date("Y-m-d");
- // -------------------------------------------------------------------------
- // Connect
- // -------------------------------------------------------------------------
- $mydb = connect2db();
- if ($net2ftp_result["success"] == false) { return false; }
- // -------------------------------------------------------------------------
- // Get consumed data volume and execution time by the current IP address
- // -------------------------------------------------------------------------
- $sqlquery1 = "SELECT datatransfer, executiontime FROM net2ftp_log_consumption_ipaddress WHERE date = '$date' AND ipaddress = '$REMOTE_ADDR_safe';";
- $result1 = mysql_query("$sqlquery1") or die("Unable to execute SQL SELECT query (getConsumption > sqlquery1) <br /> $sqlquery1");
- $nrofrows1 = mysql_num_rows($result1);
- if ($nrofrows1 == 0) {
- $net2ftp_globals["consumption_ipaddress_datatransfer"] = 0;
- $net2ftp_globals["consumption_ipaddress_executiontime"] = 0;
- }
- elseif ($nrofrows1 == 1) {
- $resultRow1 = mysql_fetch_row($result1);
- $net2ftp_globals["consumption_ipaddress_datatransfer"] = $resultRow1[0];
- $net2ftp_globals["consumption_ipaddress_executiontime"] = $resultRow1[1];
- }
- else {
- setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress contains duplicate rows."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // -------------------------------------------------------------------------
- // Get consumed data volume and execution time to the current FTP server
- // -------------------------------------------------------------------------
- $sqlquery2 = "SELECT datatransfer, executiontime FROM net2ftp_log_consumption_ftpserver WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';";
- $result2 = mysql_query("$sqlquery2") or die("Unable to execute SQL SELECT query (getConsumption > sqlquery2) <br /> $sqlquery2");
- $nrofrows2 = mysql_num_rows($result2);
- if ($nrofrows2 == 0) {
- $net2ftp_globals["consumption_ftpserver_datatransfer"] = 0;
- $net2ftp_globals["consumption_ftpserver_executiontime"] = 0;
- }
- elseif ($nrofrows2 == 1) {
- $resultRow2 = mysql_fetch_row($result2);
- $net2ftp_globals["consumption_ftpserver_datatransfer"] = $resultRow2[0];
- $net2ftp_globals["consumption_ftpserver_executiontime"] = $resultRow2[1];
- }
- else {
- setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver contains duplicate rows."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // Return true
- return true;
- } // End getConsumption
- // ** **
- // ** **
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // ** **
- // ** **
- function putConsumption() {
- // --------------
- // This function writes the consumption to the database.
- // It is run at the end of the script.
- // --------------
- // -------------------------------------------------------------------------
- // Global variables
- // -------------------------------------------------------------------------
- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result;
- // -------------------------------------------------------------------------
- // Initial checks
- // -------------------------------------------------------------------------
- // Verify if a database is used, and if consumption checking is turned on. If not: don't continue.
- if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; }
- // When user is not logged in, the FTP server is not set
- if ($net2ftp_globals["ftpserver"] == "") { return true; }
- // If the REMOTE_ADDR is not filled in, then there is a problem (IP spoofing), so return an error
- if ($net2ftp_globals["REMOTE_ADDR"] == "") {
- setErrorVars(false, __("Unable to determine your IP address."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // If the database has already been updated, don't do it a second time.
- // This is to avoid updating the database twice. The putConsumption() function
- // is called from index.php and from shutdown() in filesystem.inc.php. On Windows
- // the shutdown() function is called after *every* script execution.
- if ($net2ftp_globals["consumption_database_updated"] == 1) { return true; }
- // Add slashes to variables which are used in a SQL query, and which are
- // potentially unsafe (supplied by the user).
- // $date is calculated in this function
- // $time is calculated in this function
- $REMOTE_ADDR_safe = addslashes($net2ftp_globals["REMOTE_ADDR"]);
- $net2ftp_ftpserver_safe = addslashes($net2ftp_globals["ftpserver"]);
- // ----------------------------------------------
- // Do not log accesses, errors and consumption while the logs are being rotated
- // ----------------------------------------------
- $logStatus = getLogStatus();
- if ($net2ftp_result["success"] == false) { return false; }
- if ($logStatus != 0) { return true; }
-
- // -------------------------------------------------------------------------
- // Check the input
- // -------------------------------------------------------------------------
- // if (preg_match("/^[0-9]+$/", $net2ftp_globals["consumption_ipaddress_datatransfer) == FALSE) {
- // setErrorVars(false, __("The variable <b>consumption_ipaddress_datatransfer</b> is not numeric."), debug_backtrace(), __FILE__, __LINE__);
- // return false;
- // }
- // -------------------------------------------------------------------------
- // Connect
- // -------------------------------------------------------------------------
- $mydb = connect2db();
- if ($net2ftp_result["success"] == false) { return false; }
- // -------------------------------------------------------------------------
- // Get date
- // -------------------------------------------------------------------------
- $date = date("Y-m-d");
- // -------------------------------------------------------------------------
- // Put consumed data volume and execution time by the current IP address
- // -------------------------------------------------------------------------
- $sqlquery1 = "SELECT * FROM net2ftp_log_consumption_ipaddress WHERE date = '$date' AND ipaddress = '$REMOTE_ADDR_safe';";
- $result1 = mysql_query("$sqlquery1");
- $nrofrows1 = mysql_num_rows($result1);
- if ($nrofrows1 == 1) {
- $sqlquery2 = "UPDATE net2ftp_log_consumption_ipaddress SET datatransfer = '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "' WHERE date = '$date' AND ipaddress = '$REMOTE_ADDR_safe';";
- $result2 = mysql_query("$sqlquery2");
- $nrofrows2 = mysql_affected_rows($mydb);
- // Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same,
- // the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0
- // and the executiontime is the same as in the table.)
- // if ($nrofrows2 != 1) {
- // setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- // return false;
- // }
- }
- elseif ($nrofrows1 == 0) {
- $sqlquery3 = "INSERT INTO net2ftp_log_consumption_ipaddress VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "');";
- $result3 = mysql_query("$sqlquery3");
- $nrofrows3 = mysql_affected_rows($mydb);
- if ($nrofrows3 != 1) {
- setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- }
- else {
- setErrorVars(false, __("Table net2ftp_log_consumption_ipaddress contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // MySQL > 4.1.0
- // $sqlquery1 = "INSERT INTO net2ftp_log_consumption_ipaddress VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "') ON DUPLICATE KEY UPDATE datatransfer = '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "';";
-
- // -------------------------------------------------------------------------
- // Put consumed data volume and execution time to the current FTP server
- // -------------------------------------------------------------------------
- $sqlquery4 = "SELECT * FROM net2ftp_log_consumption_ftpserver WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';";
- $result4 = mysql_query("$sqlquery4");
- $nrofrows4 = mysql_num_rows($result4);
- if ($nrofrows4 == 1) {
- $sqlquery5 = "UPDATE net2ftp_log_consumption_ftpserver SET datatransfer = '" . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_ftpserver_executiontime"]) . "' WHERE date = '$date' AND ftpserver = '$net2ftp_ftpserver_safe';";
- $result5 = mysql_query("$sqlquery5");
- $nrofrows5 = mysql_affected_rows($mydb);
- // Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same,
- // the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0
- // and the executiontime is the same as in the table.)
- // if ($nrofrows5 != 1) {
- // setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- // return false;
- // }
- }
- elseif ($nrofrows4 == 0) {
- $sqlquery6 = "INSERT INTO net2ftp_log_consumption_ftpserver VALUES('$date', '$net2ftp_ftpserver_safe', '" . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ftpserver_executiontime"]) . "');";
- $result6 = mysql_query("$sqlquery6");
- $nrofrows6 = mysql_affected_rows($mydb);
- if ($nrofrows6 != 1) {
- setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- }
- else {
- setErrorVars(false, __("Table net2ftp_log_consumption_ftpserver contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // -------------------------------------------------------------------------
- // Update the net2ftp_log_access record with the consumed data volume and execution time
- // -------------------------------------------------------------------------
- $sqlquery7 = "SELECT * FROM net2ftp_log_access WHERE id = '" . $net2ftp_globals["log_access_id"] . "';";
- $result7 = mysql_query("$sqlquery7");
- $nrofrows7 = mysql_num_rows($result7);
- if ($nrofrows7 == 1) {
- $sqlquery8 = "UPDATE net2ftp_log_access SET datatransfer = '" . $net2ftp_globals["consumption_datatransfer"] . "', executiontime = '" . round($net2ftp_globals["consumption_executiontime"]) . "' WHERE id = '" . $net2ftp_globals["log_access_id"] . "'";
- $result8 = mysql_query("$sqlquery8");
- $nrofrows8 = mysql_affected_rows($mydb);
- // Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same,
- // the $nrofrows2 is set to 0. (This happens on the Browse screen, when the loading is fast: the datatransfer is 0
- // and the executiontime is the same as in the table.)
- // if ($nrofrows8 != 1) {
- // setErrorVars(false, __("Table net2ftp_log_access could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- // return false;
- // }
- }
- elseif ($nrofrows7 == 0) {
- $sqlquery9 = "INSERT INTO net2ftp_log_access VALUES('$date', '$REMOTE_ADDR_safe', '" . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "', '" . round($net2ftp_globals["consumption_ipaddress_executiontime"]) . "');";
- $result9 = mysql_query("$sqlquery9");
- $nrofrows9 = mysql_affected_rows($mydb);
- if ($nrofrows9 != 1) {
- setErrorVars(false, __("Table net2ftp_log_access could not be updated."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- }
- else {
- setErrorVars(false, __("Table net2ftp_log_access contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__);
- return false;
- }
- // -------------------------------------------------------------------------
- // If all 3 tables have been updated, set the flag to 1
- // -------------------------------------------------------------------------
- $net2ftp_globals["consumption_database_updated"] = 1;
- // Return true
- return true;
- } // End putConsumption
- // ** **
- // ** **
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // ** **
- // ** **
- function addConsumption($data, $time) {
- // --------------
- // This function adds the $data and $time given in the argument of the function
- // to the global variables
- // --------------
- // -------------------------------------------------------------------------
- // Global variables
- // -------------------------------------------------------------------------
- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result;
- // -------------------------------------------------------------------------
- // Initial checks
- // -------------------------------------------------------------------------
- // Verify if a database is used, and if consumption checking is turned on. If not: don't continue.
- if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; }
- // Initialize variables if needed
- if (isset($net2ftp_globals["consumption_datatransfer"]) == false) { $net2ftp_globals["consumption_datatransfer"] = 0; }
- if (isset($net2ftp_globals["consumption_executiontime"]) == false) { $net2ftp_globals["consumption_executiontime"] = 0; }
- if (isset($net2ftp_globals["consumption_ipaddress_datatransfer"]) == false) { $net2ftp_globals["consumption_ipaddress_datatransfer"] = 0; }
- if (isset($net2ftp_globals["consumption_ipaddress_executiontime"]) == false) { $net2ftp_globals["consumption_ipaddress_executiontime"] = 0; }
- if (isset($net2ftp_globals["consumption_ftpserver_datatransfer"]) == false) { $net2ftp_globals["consumption_ftpserver_datatransfer"] = 0; }
- if (isset($net2ftp_globals["consumption_ftpserver_executiontime"]) == false) { $net2ftp_globals["consumption_ftpserver_executiontime"] = 0; }
- // -------------------------------------------------------------------------
- // Add the consumption to the global variables
- // -------------------------------------------------------------------------
- if ($data != "" && $data > 0) {
- $net2ftp_globals["consumption_datatransfer_changeflag"] = 1;
- $net2ftp_globals["consumption_datatransfer"] = $net2ftp_globals["consumption_datatransfer"] + $data;
- $net2ftp_globals["consumption_ipaddress_datatransfer"] = $net2ftp_globals["consumption_ipaddress_datatransfer"] + $data;
- $net2ftp_globals["consumption_ftpserver_datatransfer"] = $net2ftp_globals["consumption_ftpserver_datatransfer"] + $data;
- }
- if ($time != "" && $time > 0) {
- $net2ftp_globals["consumption_executiontime"] = $net2ftp_globals["consumption_executiontime"] + $time;
- $net2ftp_globals["consumption_ipaddress_executiontime"] = $net2ftp_globals["consumption_ipaddress_executiontime"] + $time;
- $net2ftp_globals["consumption_ftpserver_executiontime"] = $net2ftp_globals["consumption_ftpserver_executiontime"] + $time;
- }
- // Return true
- return true;
- } // End addConsumption
- // ** **
- // ** **
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // ** **
- // ** **
- function printConsumption() {
- // --------------
- // This function prints the global consumption variables.
- // It is only used for debugging.
- // --------------
- // -------------------------------------------------------------------------
- // Global variables
- // -------------------------------------------------------------------------
- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result;
- // -------------------------------------------------------------------------
- // Print the variables
- // -------------------------------------------------------------------------
- echo "FTP server: " . $net2ftp_globals["ftpserver"] . "<br />\n";
- echo "Remote address: " . $net2ftp_globals["REMOTE_ADDR"] . "<br />\n";
- echo "consumption_datatransfer: " . $net2ftp_globals["consumption_datatransfer"] . "<br />\n";
- echo "consumption_executiontime: " . $net2ftp_globals["consumption_executiontime"] . "<br />\n";
- echo "consumption_ipaddress_datatransfer: " . $net2ftp_globals["consumption_ipaddress_datatransfer"] . "<br />\n";
- echo "consumption_ipaddress_executiontime: " . $net2ftp_globals["consumption_ipaddress_executiontime"] . "<br />\n";
- echo "consumption_ftpserver_datatransfer: " . $net2ftp_globals["consumption_ftpserver_datatransfer"] . "<br />\n";
- echo "consumption_ftpserver_executiontime: " . $net2ftp_globals["consumption_ftpserver_executiontime"] . "<br />\n";
- echo "consumption_datatransfer_changeflag: " . $net2ftp_globals["consumption_datatransfer_changeflag"] . "<br />\n";
- echo "consumption_ipaddress_executiontime: " . $net2ftp_globals["consumption_ipaddress_executiontime"] . "<br />\n";
- } // End printConsumption()
- // ** **
- // ** **
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // **************************************************************************************
- // ** **
- // ** **
- function checkConsumption() {
- // --------------
- // This function checks the consumption and returns an error message if
- // the limit has been reached.
- // It returns true if all is OK, false if the limit has been reached.
- // --------------
- // -------------------------------------------------------------------------
- // Global variables
- // -------------------------------------------------------------------------
- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result;
- // -------------------------------------------------------------------------
- // Initial checks
- // -------------------------------------------------------------------------
- // Verify if a database is used, and if consumption checking is turned on. If not: don't continue.
- if ($net2ftp_settings["use_database"] != "yes" || $net2ftp_settings["check_consumption"] != "yes") { return true; }
- // -------------------------------------------------------------------------
- // Check if the limit has been reached
- // -------------------------------------------------------------------------
- if ($net2ftp_globals["consumption_ipaddress_datatransfer"] > $net2ftp_settings["max_consumption_ipaddress_datatransfer"]) { return false; }
- if ($net2ftp_globals["consumption_ipaddress_executiontime"] > $net2ftp_settings["max_consumption_ipaddress_executiontime"]) { return false; }
- if ($net2ftp_globals["consumption_ftpserver_datatransfer"] > $net2ftp_settings["max_consumption_ftpserver_datatransfer"]) { return false; }
- if ($net2ftp_globals["consumption_ftpserver_executiontime"] > $net2ftp_settings["max_consumption_ftpserver_executiontime"]) { return false; }
- return true;
- } // End checkConsumption()
- // ** **
- // ** **
- // **************************************************************************************
- // **************************************************************************************
- ?>
|