![]() |
I recieve this error also?
Database error in vBulletin 3.5.2: Invalid SQL: SHOW COLUMNS FROM user_troll WHERE field != 'username'; MySQL Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE field != 'username'' at line 1 Error Number : 1064 Date : Sunday, July 23rd 2006 @ 07:41:17 AM Script : http://www.*****.com/forum/iptracker...ookupdeleted=1 Referrer : http://www.*****.com/forum/iptracker.php?self=1 IP Address : **.***.**.*** Username : **** Classname : vb_database |
Quote:
There should be a troll_iptracker_deleteselected-phrase included to the hack but that was missing and the text I have added there looks like "Delete selected entries from database (immediately)". I can see in your screenie that there is a button, but with no text. That's the text that was missing and another miss by me.. Quote:
|
No error but it still doesnt allow me to delete entries and the button still shows no text, sorry.
|
why do i always get atabase errors when i tried to search for the ip ad adresses and how can i make aoutoblacklist any help will be appriated thanx
|
I installed this today and rotflmao when it said "No soup for you!, and you!, and you! :laugh:
Many thanks my friend!:) |
Quote:
Automatically block banned users Block banned users from forum (with deepscan), including they who's not logged in to the forum ... meaning that guests (not logged in users) also will be blocked on match with the banlist ... You can also use the options for "specific users to block". If so, just enter the names or the userids you want to block if they reach a match of XX usernames (Controlled by the option Specific users trigger). This option only block chosen multiple usernames when they are trying to log in. Quote:
Quote:
|
yea great man fix worked for me but can you tel me how to create a black list you mean is it the list on the vbulletin options>user banning options i really need help on this
|
Quote:
For example, if the tracker works as it should:
The blacklisting option means that if any guest is matched with a banned user the ip will be blocked from the forum even before login. If 'Jim' is a shared "troll"-account this also means that all users logged in as Jim, will be locked out of the forum because Joe is linked to the same nick - and banned. The blacklist in options->userbanning only stops specific ip-addresses, which means that if Joe goes to his parents he's able to see the forum as a guest (until he tries to login as Joe again). If you use the built-in blacklist and using parts of the ip the risk is that you ban a bunch of other users that is using the same subnet. :) |
Jumping back to this picture. What else is missing here? There's a checkbox that is missing text on my installation too. I manually added the troll_iptracker_deleteselected phrase mentioned on the previous page, and that fixed the delete button text.
|
Quote:
Phrase: troll_search_RBL Text: Check RBL-Database (Open Proxy) The two reported phrases should be fixed in next version. Sorry for the misses...:) |
Changes for 2.0.4 that will be released as soon the caches has been tested:
If someone thinks that I have forgotten something, please tell me. :) |
Quote:
|
After a month of use, I experienced these errors:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
I've got many more, but they are variations on the same. |
Quote:
Yes, but blocking users is optional and can be turned off. I only block specific usernames myself but the function is there for paranoid admins ;) Quote:
(I still cant reproduce the problem you have there with server shutdowns. If someone have a tip there, why the error shows up, I would be very happy.) |
Ok I have found a bug:
Code:
Invalid SQL: This leaves us all open to a SQL attack.. |
I apologize for the big delay on this hack. Too much things are happening around me so I've lost a lot of time.. Hopefully I can release 2.0.4 as soon as possible with a bunch of fixes.
As a notice - I've noticed (at least on my own server) that the function for showing trolls in the o Who's Online-listing lags me down a little bit sometimes. Probably that function depends on how many users online and how much the tracker has to look for. Without the extra cache there, I think the online-listing won't survive. :) Quote:
|
Because of the apostrophe-thing, I'll release this one now.. Here's the changelog -
2.0.4 [beta]
|
After upgrading this I get an error. I have tried uninstalling trolltracker and reinstalling it, but then I get this:
Database error in vBulletin 3.5.4: Invalid SQL: ### INSERT QUERY GENERATED BY fetch_query_sql() ### INSERT INTO vb4_plugin (`active`, `executionorder`, `title`, `hookname`, `phpcode`, `product`) VALUES ('1', '5', 'trolltracker_register', 'global_start', '// Note, this code has no version 1.0.0 released. The first version was private\r\n// and this one is the conversion.\r\n\r\n$dosavetroll = 1;\r\n\r\n// admincp settings\r\n// v1.0->2.0 and some addons\r\n$trollenabled = $vbulletin->options[\'trollenabled\'];\r\n\r\n// Something went wrong!\r\nif (!$_SERVER[\'REMOTE_ADDR\']) {$trollenabled = 0;}\r\n\r\nif ($trollenabled == 1) {\r\n$followtroll = $vbulletin->options[\'followtroll\'];\r\n$trolluseridlookup = $vbulletin->options[\'trolluserid\'];\r\n$trollunreg = $vbulletin->options[\'trollunreg\'];\r\n$trollignoreopm = $vbulletin->options[\'trollignoreopm\'];\r\n$trollwarnopm = $vbulletin->options[\'trollwarnopm\'];\r\n$trollsession = $vbulletin->options[\'trollsession\'];\r\n$trollblock = $vbulletin->options[\'trollblock\'];\r\n$trollblockuser = strtolower($vbulletin->options[\'trollblockuser\']);\r\n$trollexcludeuser = strtolower($vbulletin->options[\'trollexcludeuser\']);\r\n$trollblockusertrig = $vbulletin->options[\'trollblockusertrig\'];\r\n$trolladmin = $vbulletin->options[\'trolladmin\'];\r\n$trollcandelete = $vbulletin->options[\'trollcandelete\'];\r\n$trolluniqueheaders = $vbulletin->options[\'trolluniqueheaders\'];\r\n$trollalertuser = $vbulletin->options[\'trollalertuser\'];\r\n$trollalertforum = $vbulletin->options[\'trollalertforum\'];\r\n$trollalertafter = $vbulletin->options[\'trollalertafter\'];\r\n$trollonlineusers = $vbulletin->options[\'trollonlineusers\'];\r\n$trolldifftime = $vbulletin->options[\'trolldifftime\']*60*60;\r\n$trollalertfrom = $vbulletin->options[\'trollalertfrom\'];\r\n$trollFQDN = $vbulletin->options[\'trollFQDN\'];\r\n$trolluseFQDN = $vbulletin->options[\'trolluseFQDN\'];\r\n$trollautoblockBans = $vbulletin->options[\'trollautoblockBans\'];\r\n\r\n// Clean cacheResolver\r\n$cleanTrollResolver = TIMENOW - 21600;\r\n$vbulletin->db->query(\"DELETE FROM \" . TABLE_PREFIX . \"user_trollresolver WHERE dateline < $cleanTrollResolver\");\r\n\r\n// Who can use tracker...?\r\nglobal $istrolladmin, $istrolldelete, $vbulletin, $db, $vbphrase, $stylevar, $style;\r\n\r\n$trollgroups = explode(\',\',$vbulletin->options[trolladmin]); \r\nif (is_member_of($vbulletin->userinfo, $trollgroups)) $istrolladmin = true;\r\n\r\n// Who can manipulate the tracker?\r\n$trollcandeletegroups = explode(\',\',$vbulletin->options[trollcandelete]); \r\nif (is_member_of($vbulletin->userinfo, $trollcandeletegroups)) $istrolldelete = true;\r\n\r\nif ($istrolladmin == 1) {\r\n $show[\'trolltracker\'] = 1;\r\n if ($trollonlineusers) {$show[\'trolldata\'] = 1;}\r\n }\r\n\r\n/**** Userdata and browser stuff ****/\r\n// Reliable data to register\r\n// Note, addslashes is only needed on ONE $trollusername if we don\'t want a whole lot of dupes!\r\n$trollusername = addslashes($vbulletin->userinfo[\'username\']);\r\n$trolluserid = $vbulletin->userinfo[\'userid\'];\r\n$trollremote = $_SERVER[\'REMOTE_ADDR\'];\r\n$timestamp = TIMENOW;\r\n$trolldate = strftime(\'%Y-%m-%d\');\r\n$trolltime = strftime(\'%H:%M:%S\');\r\n\r\n\r\n// Unreliable data to save, but sometimes, still effective when trolls are using half-anonymous proxies\r\n$forwarded = $_SERVER[\'HTTP_X_FORWARDED_FOR\'];\r\n$via = $_SERVER[\'HTTP_VIA\'];\r\n\r\n// Don\'t overload the server with extra processes if not needed...\r\nif ($trollalertuser OR $trollalertforum OR $trollonlineusers == 1) {\r\n\r\n/**** COUNTING OF USER\'S NICKNAMES BEGIN (IF SELECTED FROM OPTIONS) ****/\r\n// Should only be enabled on request (alerting, blocking and \"self-notifying\")\r\n\r\n/** Check the cache for nicknames, so we don\'t have to query the big one **/\r\n// Clear old entries...\r\n$clearcachetime = TIMENOW - $vbulletin->options[cookietimeout];\r\n$vbulletin->db->query_write(\"DELETE FROM \" . TABLE_PREFIX . \"user_trollcache WHERE timestamp < \" . $clearcachetime);\r\n$trollcache = $vbulletin->db->query_first(\"SELECT * from \" . TABLE_PREFIX . \"user_trollcache WHERE realip = \'$trollremote\'\");\r\nif ($trollcache[nicks]) {\r\n $trollcachenicks = explode(\"\\n\", $trollcache[nicks]);\r\n foreach ($trollcachenicks as $nicks => $trollcachevalue) {\r\n // Must not be empty!\r\n if ($trollcachevalue) {\r\n $trollnicksUID[$vbulletin->userinfo[userid]] = $vbulletin->userinfo[userid];\r\n $trollnicksNAME[strtolower($trollcachevalue)] = strtolower($trollcachevalue);\r\n $trollnicksIP[$trollremote] = $trollremote;\r\n $trolls .= $trollcachevalue . \"\\n\";\r\n $linked++;\r\n }\r\n }\r\n}\r\n\r\n\r\n/** Check the cache for nicknames, so we don\'t have to query the big one --- DONE HERE **/\r\n// If this var is empty, we don\'t have anything cached.\r\n// Start caching only if this is no guest...\r\nif (!$trolls) {\r\n\r\n// This is a special thing that has to do with the guest vs logged when reporting.\r\n$getusernamedata = \"user.username = \'\" . addslashes($vbulletin->userinfo[username]) . \"\' OR \";\r\n// We don\'t want to include not logged in users in this report (because of the unregistered-name).\r\n// So we\'re removing it here instead of looking for unregged usernames in the database.\r\nif ($vbulletin->userinfo[userid] == 0) {$getusernamedata = \"\";}\r\n\r\n$lcountsql = \"SELECT DISTINCT users.userid,users.username,users.userlink,users.r ealip,users.timestamp,users.fo rwarded_for,users.http_via,user.userid\r\nFROM \" . TABLE_PREFIX . \"user_troll AS users\r\nINNER JOIN \" . TABLE_PREFIX . \"user_troll as user\r\nON (users.username = user.username)\r\nOR (users.userlink = user.userid AND users.userlink > 0)\r\nOR (users.realip = user.realip)\r\nOR (users.forwarded_for LIKE \'%$trollremote%\' AND users.forwarded_for != \'\')\r\nOR (users.http_via LIKE \'%$trollremote%\' AND users.http_via != \'\')\r\nWHERE user.userid > 0 AND users.userid > 0\r\nAND (\r\n $getusernamedata user.realip = \'$trollremote\'\r\n )\r\nAND user.deleted = 0\r\nAND users.deleted = 0\r\nAND user.fqdn = 0\r\nAND users.fqdn = 0\r\nGROUP by username\r\nORDER by timestamp DESC\r\n\";\r\n\r\n// Do not include FQDN-names into this listing - FQDN-names are not duplicate usernames, just identifiers\r\n$lcount = $vbulletin->db->query($lcountsql);\r\n\r\n// Collect nicknames to the dupechecker\r\n while ($trollArray = $vbulletin->db->fetch_array($lcount)) {\r\n\r\n // Must not be empty\r\n if ($trollArray[username]) {\r\n $trollnicksUID[$trollArray[userid]] = $trollArray[userid];\r\n $trollnicksNAME[strtolower($trollArray[username])] = strtolower($trollArray[username]);\r\n $trollnicksIP[$trollArray[realip]] = $trollArray[realip];\r\n\r\n if ($trollArray[userid] > 0) {$trolls .= $trollArray[username] . \"\\n\";}\r\n $linked++;\r\n }\r\n }\r\n\r\n\r\n// Fixes ontheirway! (060919)\r\n$trolls = addslashes($trolls);\r\n\r\n// If the own nick is missing, add it.\r\nif (!$trollnicksNAME[strtolower($trollusername)] AND $vbulletin->userinfo[userid] > 0) {$trolls .= $vbulletin->userinfo[username] . \"\\n\";}\r\n\r\n$vbulletin->db->query_write(\"INSERT INTO \" . TABLE_PREFIX . \"user_trollcache (userid, realip, nicks, timestamp) VALUES (\'\" . $vbulletin->userinfo[userid] . \"\', \'$trollremote\', \'$trolls\', \" . TIMENOW . \")\");\r\n\r\n} // End if cachevar\r\n\r\n}\r\n\r\n/**** COUNTING OF USER\'S NICKNAMES FINISH ****/\r\n\r\n\r\n/**** ALERT SECTION BEGIN ****/\r\n if (($trollalertuser OR $trollalertforum) AND $linked >= $trollalertafter AND $trollalertfrom > 0 AND $vbulletin->userinfo[userid] > 0) {\r\n // Used vars: $trollalertuser, $trollalertforum (Update database)\r\n\r\n $trolldupechanges = $vbulletin->db->query_first(\"SELECT * FROM \" . TABLE_PREFIX . \"user_trolldupes WHERE userid = \'\" . $vbulletin->userinfo[userid] . \"\' AND userid > 0\");\r\n\r\n if (!$trolldupechanges[nicklist]) {\r\n // Do not write guests into this list, that will cause trouble on reporting...\r\n if ($vbulletin->userinfo[userid] > 0) {\r\n $vbulletin->db->query_write(\"INSERT INTO \" . TABLE_PREFIX . \"user_trolldupes (userid, nicklist) VALUES (\'\" . $vbulletin->userinfo[userid] . \"\', \'\" . $trolls . \"\')\");\r\n }\r\n }\r\n\r\n // Report on changes...\r\n if ($trolls != $trolldupechanges[nicklist] AND $trolls) {\r\n $doreporttrolls = 1;\r\n\r\n // If there\'s an old nicklist, it\'s time to update here...\r\n if ($trolldupechanges[userid] == $vbulletin->userinfo[userid] AND $vbulletin->userinfo[userid] > 0 AND $trolldupechanges[userid] > 0) {\r\n $vbulletin->db->query_write(\"UPDATE \" . TABLE_PREFIX . \"user_trolldupes SET nicklist = \'$trolls\' WHERE userid = \'\" . $vbulletin->userinfo[userid] . \"\'\");\r\n }\r\n\r\n }\r\n\r\n$blockstatus = \"\";\r\n\r\n// Report normal blockings\r\nif ($linked >= $trollblock AND $trollblock > 0 AND $istrolladmin != 1 AND THIS_SCRIPT != \'iptracker.php\') {$blockstatus = $vbphrase[troll_report_blocked];}\r\n\r\n// Report bans\r\nif ($trollautoblockBans == 1 AND $forcetrollban == 1 AND $istrolladmin != 1 AND THIS_SCRIPT != \'iptracker.php\') {$blockstatus = $vbphrase[troll_report_banned];}\r\n\r\n if ($doreporttrolls == 1 AND $linked >= $trollalertafter) {\r\n $trollqueryuser = fetch_userinfo($trollalertfrom);\r\n\r\n $trollpm =& datamanager_init(\'PM\', $vbulletin, ERRTYPE_SILENT);\r\n // Send PM if options are set for PM\r\n if ($trollalertuser) {\r\n $trollpm->set(\'fromuserid\', $trollqueryuser[userid]);\r\n $trollpm->set(\'fromusername\', $trollqueryuser[username]);\r\n $trollpm->set_info(\'reciept\', false);\r\n $trollpm->set_info(\'savecopy\', false);\r\n $trollpm->set(\'title\', construct_phrase($vbphrase[troll_alertsubject], $vbulletin->userinfo[username]));\r\n $trollpm->set(\'message\', construct_phrase($vbphrase[troll_alertmessage], $vbulletin->userinfo[username], $trolls, $blockstatus));\r\n $trollpm->set_recipients($trollalertuser, $trollqueryuser[permissions]);\r\n $trollpm->set(\'dateline\', TIMENOW);\r\n $trollpm->save();\r\n }\r\n\r\n if ($trollalertforum) {\r\n $t_smilies = 1;\r\n $t_visible = 1;\r\n require_once(DIR . \'/includes/class_dm_threadpost.php\');\r\n $trollreport = new vB_DataManager_Thread_FirstPost($vbulletin, ERRTYPE_STANDARD);\r\n $trollreport->do_set(\'forumid\', $trollalertforum);\r\n $trollreport->do_set(\'userid\', $trollqueryuser[\'userid\']);\r\n $trollreport->do_set(\'username\', $trollqueryuser[\'username\']);\r\n $trollreport->do_set(\'title\', construct_phrase($vbphrase[troll_alertsubject], $vbulletin->userinfo[username]));\r\n $trollreport->do_set(\'pagetext\', construct_phrase($vbphrase[troll_alertmessage], $vbulletin->userinfo[username], $trolls, $blockstatus));\r\n $trollreport->do_set(\'allowsmilie\', $t_smilies);\r\n $trollreport->do_set(\'visible\', $t_visible);\r\n $sendtrollreport = $trollreport->save();\r\n \r\n require_once(DIR . \'/includes/functions_databuild.php\');\r\n build_forum_counters($trollalertforum);\r\n }\r\n }\r\n\r\n // Update database, so we won\'t get repeating in the forum and PM\'s\r\n $vbulletin->db->query_write(\"UPDATE user_troll SET alert = \" . TIMENOW . \" WHERE userid = \'\" . $vbulletin->userinfo[userid] . \"\' AND deleted = 0 ORDER by alert DESC LIMIT 1\");\r\n\r\n }\r\n/**** ALERT SECTION FINISH ****/\r\n\r\n\r\n/**** BLOCK TROLLS ON REQUEST BEGIN ****/\r\n// Check for special blocks start\r\n$trollblocknames = explode(\"\\n\", preg_replace(\"[\\r]\", \"\", strtolower($vbulletin->options[\'trollblockuser\'])));\r\n$trollexcludenames = explode(\"\\n\", preg_replace(\"[\\r]\", \"\", strtolower($vbulletin->options[\'trollexcludeuser\'])));\r\n\r\n foreach ($trollexcludenames as $texclude => $excludenames) {$exclude[strtolower($excludenames)] = strtolower($excludenames);}\r\n\r\n// Want to block banned users from forum? Array it here...\r\nif ($trollautoblockBans == 1) {\r\n $trollbans = $vbulletin->db->query(\"SELECT * from \" . TABLE_PREFIX . \"userban\");\r\n\r\n while ($trollban = $vbulletin->db->fetch_array($trollbans)) {\r\n $realuserBAN = fetch_userinfo($trollban[userid]);\r\n if ($trollautoblockBans == 1) {\r\n // Force ban if any matches, but only if user is not admin...\r\n if (strtolower($trollnicksUID[$trollban[userid]]) == strtolower($trollban[userid]) AND $istrolladmin != 1) {\r\n $trollbanreason = $trollban[\'reason\'];\r\n if ($trollban[\'liftdate\']) {\r\n $trollbandate = vbdate($vbulletin->options[\'dateformat\'] . \', \' . $vbulletin->options[\'timeformat\'], $trollban[\'liftdate\']);\r\n } else {\r\n $trollbandate = $vbphrase[\'never\'];\r\n }\r\n $forcetrollban = 1;\r\n }\r\n if (strtolower($trollnicksNAME[$realuserBAN[username]]) == strtolower($realuserBAN[username]) AND $istrolladmin != 1) {\r\n $trollbanreason = $trollban[\'reason\'];\r\n if ($trollban[\'liftdate\']) {\r\n $trollbandate = vbdate($vbulletin->options[\'dateformat\'] . \', \' . $vbulletin->options[\'timeformat\'], $trollban[\'liftdate\']);\r\n } else {\r\n $trollbandate = $vbphrase[\'never\'];\r\n }\r\n $forcetrollban = 1;\r\n }\r\n }\r\n\r\n }\r\n if (!$trollbanreason) {$vbphrase[\'none\'];}\r\n}\r\n// End banblock array\r\n\r\nforeach ($trollblocknames as $trollers) {\r\n $counttrollblock++;\r\n if ($trollers > 0 && $vbulletin->userinfo[\'userid\'] == $trollers) {$dotrollblock = 1;}\r\n if ($trollers < 1 && strtolower($vbulletin->userinfo[\'username\']) == strtolower($trollers)) {$dotrollblock = 1;}\r\n\r\n // Linkmatching - Block the current logged in user if there\'s a match with the userlist in options.\r\n // This includes IP from v2.0.2 and up\r\n if (strtolower($trollers) == strtolower($trollnicksUID[$trollers])) {$dotrollblock = 1;}\r\n if (strtolower($trollers) == strtolower($trollnicksNAME[$trollers])) {$dotrollblock = 1;}\r\n if (strtolower($trollers) == strtolower($trollnicksIP[$trollers])) {$dotrollblock = 1;}\r\n}\r\n\r\n// If there is a count in the userlist, the blocklist is active. Of there\'s matches on the current\r\n// logged in userid/username, check how many userlinks we find. Then block if everything is ok\r\nif ($counttrollblock > 0 AND $dotrollblock == 1 AND $linked >= $trollblockusertrig) {\r\n $trollblock = $trollblockusertrig;\r\n }\r\n// Check for special blocks end\r\n\r\nif (strtolower($trollusername) == strtolower($exclude[$trollusername]) OR $vbulletin->userinfo[userid] == $exclude[$trolluserid]) {\r\n $forcetrollban = 0;\r\n $linked = 0;\r\n }\r\n\r\n/** BLOCKING AND BANNING BEGIN **/\r\n// Protect admins from being blocked\r\nif ($trollautoblockBans == 1 AND $forcetrollban == 1 AND $istrolladmin != 1 AND THIS_SCRIPT != \'iptracker.php\') {\r\n eval(\'$headinclude = \"\' . fetch_template(\'headinclude\') . \'\";\');\r\n eval(standard_error(fetch_error(\'nopermission_ban ned\', $trollbanreason, $trollbandate)));\r\n }\r\n\r\nif ($linked >= $trollblock AND $trollblock > 0 AND $istrolladmin != 1 AND THIS_SCRIPT != \'iptracker.php\') {\r\n $vbulletin->userinfo[\'badlocation\'] =1;\r\n $errormessage = construct_phrase($vbphrase[\'trollerror_toomanynicks\'], $linked);\r\n eval(\'$headinclude = \"\' . fetch_template(\'headinclude\') . \'\";\');\r\n eval(\'$header = \"\' . fetch_template(\'header\') . \'\";\');\r\n eval(\'$footer = \"\' . fetch_template(\'footer\') . \'\";\');\r\n eval(\'print_output(\"\' . fetch_template(\'STANDARD_ERROR\') . \'\");\');\r\n}\r\n/** BLOCKING AND BANNING FINISH **/\r\n\r\n\r\n/**** BLOCK TROLLS ON REQUEST FINISH ****/\r\n\r\n\r\n\r\n/******** CONTINUE IF THE USER ISN\'T BLOCKED ********/\r\n\r\n\r\n\r\n/**** RBL MONITORING BEGIN ****/\r\n// Is the rbl monitor installed?\r\nif ($rblInstalled) {\r\n // Are we allowed to look for proxies?\r\n if ($trollignoreopm == 1 OR $trollwarnopm == 1) {\r\n // Just return the value returned from the monitor\r\n $trollIsOPM = rbl_livecheck(1, $trollremote);\r\n }\r\n } else {\r\n // If nothing is correct, just say 0\r\n $trollIsOPM = 0;\r\n }\r\n/**** RBL MONITORING FINISH ****/\r\n\r\n\r\n\r\n\r\n\r\n/**** FQDN RESOLVE BEGIN ****/\r\n if ($trollFQDN AND $trolluseFQDN == 1) {\r\n // First, grab the names and split up with userid\r\n $trollFQnames = explode(\"\\n\", preg_replace(\"[\\r]\", \"\", $trollFQDN));\r\n foreach ($trollFQnames as $t_FQ => $trollresolve) {\r\n $trollrescache = $vbulletin->db->query(\"SELECT * from \" . TABLE_PREFIX . \"user_trollresolver WHERE host = \'$trollresolve\'\");\r\n $trollhost = array();\r\n $countcache = -1;\r\n // Can this host be found in the cache?\r\n while ($rescache = $vbulletin->db->fetch_array($trollrescache)) {$trollhost[$countcache++] = $rescache[ip];}\r\n\r\n // If nothing found in cache, start resolve the host\r\n $docache = 0;\r\n if ($countcache < 1) {\r\n $trollhost = gethostbynamel($trollresolve); // Array for full resolving\r\n $docache = 1; // Also remember the host as register-in-cache\r\n }\r\n\r\n // Now start looking up all resolved ips (yes, we support multiple ips under one FQDN)\r\n foreach ($trollhost as $trollip) {\r\n // If we have a match, save it with the userid where it belong\r\n if ($trollremote == $trollip) {$FQDNresolved[$trollresolve] = true;}\r\n // Don\'t forget to cache this host so we don\'t have to resolve it the next time\r\n if ($docache == 1) {\r\n $vbulletin->db->query_write(\"INSERT INTO \" . TABLE_PREFIX . \"user_trollresolver (host, ip, dateline) VALUES (\'$trollresolve\', \'$trollip\', \" . TIMENOW . \")\");\r\n }\r\n }\r\n\r\n }\r\n\r\n // Start fixing with the trolldb...\r\n foreach ($FQDNresolved as $FQDN => $Fvalue) {\r\n // IP ($trollremote), user ($Fvalue), FQDN ($FQDN)\r\n\r\n $realuserFQDN = fetch_userinfo($Fvalue);\r\n $findhost = $vbulletin->db->query_first(\"SELECT * FROM \" . TABLE_PREFIX . \"user_troll WHERE realip = \'$trollremote\' AND username = \'\" . $FQDN . \"\'\");\r\n\r\n // If this host isn\'t registered to the tracker, it\'s time to register (or update) it now, but do not interfere with the regular data (that\'s why we use the fqdn-field here!)\r\n\r\n if (!$findhost[idx]) {\r\n $vbulletin->db->query_write(\"INSERT INTO \" . TABLE_PREFIX . \"user_troll (userid, realip, forwarded_for, username, timestamp, http_via, date, time, opm, fqdn) VALUES (\'$trolluserid\', \'$trollremote\', \'$forwarded\', \'$FQDN\', \'$timestamp\' , \'$via\', \'$trolldate\', \'$trolltime\', \'$trollIsOPM\', \'1\')\");\r\n } else {\r\n $vbulletin->db->query_write(\"UPDATE \" . TABLE_PREFIX . \"user_troll SET timestamp = $timestamp, date = \'$trolldate\', time = \'$trolltime\', opm = \'$trollIsOPM\', imported = 0 WHERE idx = \'\" . $findhost[idx] . \"\' AND deleted = 0 AND fqdn = 1 LIMIT 1\"); }\r\n\r\n }\r\n }\r\n/**** FQDN RESOLVE FINISH ****/\r\n\r\n\r\n\r\n\r\n\r\n/**** STORAGE PREPARE BEGIN ****/\r\n// How to check the database when inserting new entries\r\nif ($followtroll == 1) \r\n {\r\n $trollquery = \"WHERE realip = \'$trollremote\' AND deleted = 0 AND fqdn = 0 ORDER BY timestamp DESC\";\r\n } else {\r\n $trollquery = \"WHERE userid = \'$trolluserid\' AND realip = \'$trollremote\' AND deleted = 0 AND fqdn = 0 ORDER BY timestamp DESC\";\r\n // Switch lookup type, by request\r\n if ($trolluseridlookup == 0) {\r\n $trollquery = \"WHERE username = \'\" . $trollusername . \"\' AND realip = \'$trollremote\' AND deleted = 0 AND fqdn = 0 ORDER BY timestamp DESC\";\r\n }\r\n }\r\n/**** STORAGE PREPARE FINISH ****/\r\n\r\n\r\n\r\n/**** STORAGE DATA COLLECTING BEGIN ****/\r\n$ftroll = $vbulletin->db->query_first(\"SELECT * from \" . TABLE_PREFIX . \"user_troll $trollquery LIMIT 1\");\r\n\r\n$usedtroll = $ftroll[\'realip\'];\r\n$trollid = $ftroll[\'idx\'];\r\n$trolluser = $ftroll[\'userid\'];\r\n\r\n$trollVIA = $ftroll[\'http_via\'];\r\n$trollFOR = $ftroll[\'forwarded_for\'];\r\n\r\nif ($forwarded != $trollFOR OR $via != $trollVIA) {$trollheadermismatch = 1;}\r\n\r\n// If there is any userid found in database, we should check the first nick used by looking up the host and the userlink data\r\nif ($trolluser > 0 AND $trollremote != \'\') {\r\n $firsttroll = $vbulletin->db->query_first(\"SELECT userid,realip,timestamp from \" . TABLE_PREFIX . \"user_troll WHERE userid > 0 AND realip = \'$trollremote\' AND deleted = 0 AND fqdn = 0 ORDER by timestamp DESC, userid ASC LIMIT 1\");\r\n $firsttrollid = $firsttroll[\'userid\'];\r\n\r\n $followlink = $vbulletin->db->query_first(\"SELECT userid,userlink from \" . TABLE_PREFIX . \"user_troll WHERE userid = \'$trolluserid\' AND userlink > 0 AND deleted = 0 AND fqdn = 0 ORDER by userlink ASC LIMIT 1\");\r\n\r\n // Did it? Then replace this id with the first found in db\r\n if ($followlink[\'userlink\'] != $firsttrollid) {$firsttrollid = $followlink[\'userlink\'];}\r\n\r\n // Save data about any user who possibly used this ip first\r\n if ($firsttrollid > 0) {\r\n $vbulletin->db->query_write(\"UPDATE \" . TABLE_PREFIX . \"user_troll SET userlink = \'$firsttrollid\' WHERE idx = \'$trollid\' AND deleted = 0 AND fqdn = 0 LIMIT 1\");\r\n }\r\n}\r\n/**** STORAGE DATA COLLECTING FINISH ****/\r\n\r\n\r\n\r\n/**** SESSION STORAGE BEGIN ****/\r\n// Force updating of the session-table on request (this is stupid!)\r\nif ($trollsession == 1 AND $trollremote != \'\') {\r\n\r\n // Lookup latest used username from specific IP\r\n $lasttroll = $vbulletin->db->query_first(\"SELECT * from \" . TABLE_PREFIX . \"user_troll WHERE userid > 0 AND realip = \'$trollremote\' AND deleted = 0 ORDER BY timestamp DESC LIMIT 1\");\r\n $trolluser = $lasttroll[\'userid\'];\r\n\r\n if ($trolluser) {\r\n $vbulletin->db->query_write(\"UPDATE \" . TABLE_PREFIX . \"session SET userid = \'$trolluser\', lastactivity = $timestamp WHERE host = \'$trollremote\'\");\r\n // If this is true, troller is already found and forced into sessions...\r\n $dosavetroll = 0;\r\n }\r\n\r\n}\r\n/**** SESSION STORAGE FINISH ****/\r\n\r\n\r\n// Do not register not logged in users on request\r\nif ($trollunreg == 0 AND $trolluserid < 1) {$dosavetroll = 0;}\r\n\r\n// Do not save RBL\'s on request\r\nif ($trollignoreopm == 1 AND $trollIsOPM == 1) {$dosavetroll = 0;}\r\n\r\n// Changes in headers?\r\nif ($trollheadermismatch == 1 AND $trolluniqueheaders == 1) {$dosavetroll = 1;}\r\n\r\n\r\n\r\n/**** TROLLDB STORAGE BEGIN ****/\r\nif ($dosavetroll == 1) {\r\n\r\n if (!$usedtroll) {\r\n // If the user wasn\'t found in the database, we will add it...\r\n $vbulletin->db->query_write(\"INSERT INTO \" . TABLE_PREFIX . \"user_troll (userid, realip, forwarded_for, username, timestamp, http_via, date, time, opm) VALUES (\'$trolluserid\', \'$trollremote\', \'$forwarded\', \'\" . $trollusername . \"\', $timestamp, \'$via\', \'$trolldate\', \'$trolltime\', \'$trollIsOPM\')\");\r\n } else {\r\n // Changes will make the database change selected entry to not imported\r\n // If the user was found in the database, we won\'t duplicate it - instead, we\'re updating the latest login\r\n $vbulletin->db->query_write(\"UPDATE \" . TABLE_PREFIX . \"user_troll SET timestamp = $timestamp, date = \'$trolldate\', username = \'\" . $trollusername . \"\', userid = \'$trolluserid\', time = \'$trolltime\', opm = \'$trollIsOPM\', imported = 0 WHERE idx = \'$trollid\' AND deleted = 0 AND fqdn = 0 LIMIT 1\");\r\n }\r\n}\r\n/**** TROLLDB STORAGE FINISH ****/\r\n\r\n\r\n\r\n} // End of enable check... Turns this plugin completely off or on...', 'trolltracker'); MySQL Error : Unknown column 'executionorder' in 'field list' Error Number : 1054 Date : Tuesday, September 19th 2006 @ 05:42:28 PM What now? |
Sorry. I exported the hack from vB 3.6 so "executionorder" is an unkown database-field for 3.5. I had the same problem when I forgot to remove that field. Fixed now ;)
|
Many thanks.
Can you please add a small explanation of the functions. I am confused with this: When I enter a username, select resolve IP address, the tracker finds an amount of entries, but does not display them. |
Quote:
How do you mean with does not display? Do you have any screenshot to show as an example? |
I currently have another duplicate account tracker called dual account tracker that was coded from someones on this site but really like the functions of this hack better. Any issues with running both?
|
I mean that the page does not display the entries of the member, but does display how many entries there are.
I have to add that I did not upload the trollpost.php as i do not want to import IP's from older posts. I also did not upload the changelog, as I have no clue what this is for. I did not see any instructions about what to do with this. |
Quote:
Is it the hack called AE Multiple Login Detector? In that case - I use both. :) Quote:
Quote:
|
Quote:
On another note: What would really help my moderators solving the double accounts is; In the post which warns for multiuser accounts 1. get the usernames linked to the profile like the AE detector does. 2. have the IP address which connects the two member accounts listed in the post 3. include both usernames in the topic title of the post Any chance on this? |
Because it is very important to know wether the user is on dial up/proxy or not, it would be handy to see how many other IP's have been used by the member. If these are a lot, then it is reasonably sagfe to assume that it concerns a proxy/dial up and is not the same member.
I'd like to request in the post: 4. amount of IP's used. 5. link for admin to the iptracker results for the found user. |
Your requests can be fixed, yes. :)
The first one - act like AE does - is already added, by the way. I'm also thinking of making ipv6-support to the ipaddress field (by just changing the max lenthg of that field) since I use ipv6 myself. :) |
The IP tracker gives us many reports about members on the same proxy (like AOL and such). How do I prevent the tracker from listing members on proxy?
|
Quote:
If you use the tracker together with the OPM-hack theres an option called "Ignore OPM-users" you can use. Described: If the OPM-monitor is installed, use this option to avoid register users using proxies (Keeping track of users that using multiple accounts from anonymous proxies might give unreliable results in the tracker). OPM Monitor is required for this option |
I getting this error did I miss something?:
Code:
Database error in vBulletin 3.5.4: |
Quote:
|
Quote:
|
Thanks. I can see this software becoming some really good stuff.
Although somewhat off topic. Is there a list of proxy providers (AOL et al) somewhere? When banning a member on such providers, one also bans a bunch of others on the same provider. Such a list would come in handy. In the past I have even accidentally IP banned one of my major moderators, which gave me a lot of explaining to do. vBulletin should have a function to disable proxyuser banning. Side note 2: the errors I had before only seem to exist on shared hosting. I do not have them on dedicated hosting. Not even on a low spec one. |
Quote:
I'm just curious about this - are you using innodb and still get those errors? |
I have no clue what innodb is, but i do not have the errors anymore.
The tracker still doesn't work for me: the page does not display the entries of the member |
I get this error if i'm trying to register with an anonnimous proxy
Quote:
|
Ok, this seems to work for me for so long but then it gives me a DB error:
Quote:
|
Quote:
Quote:
|
Another question: If i put users/userid's in de "Specific users to exclude" I still get the multiple account detection pm. Did I something wrong?
|
Quote:
|
All times are GMT. The time now is 12:12 PM. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|