From 8b93b0644c2f9c577190faec6fd3eed5952eb449 Mon Sep 17 00:00:00 2001
From: Shish <shish@shishnet.org>
Date: Wed, 3 Feb 2010 14:29:55 +0000
Subject: [PATCH] postgres barfs if you try to compare a string to an inet_addr

---
 contrib/log_db/main.php | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/contrib/log_db/main.php b/contrib/log_db/main.php
index b1b8b5b6..6c8fb03e 100644
--- a/contrib/log_db/main.php
+++ b/contrib/log_db/main.php
@@ -55,9 +55,22 @@ class LogDatabase extends SimpleExtension {
 					$args[] = $_GET["module"];
 				}
 				if(!empty($_GET["user"])) {
-					$wheres[] = "(username = ? OR address = ?)";
-					$args[] = $_GET["user"];
-					$args[] = $_GET["user"];
+					if($database->engine->name == "pgsql") {
+						if(preg_match("#\d+\.\d+\.\d+\.\d+(/\d+)?#", $_GET["user"])) {
+							$wheres[] = "(username = ? OR address << ?)";
+							$args[] = $_GET["user"];
+							$args[] = $_GET["user"];
+						}
+						else {
+							$wheres[] = "lower(username) = lower(?)";
+							$args[] = $_GET["user"];
+						}
+					}
+					else {
+						$wheres[] = "(username = ? OR address = ?)";
+						$args[] = $_GET["user"];
+						$args[] = $_GET["user"];
+					}
 				}
 				if(!empty($_GET["priority"])) {
 					$wheres[] = "priority >= ?";