]> jfr.im git - irc/thales.git/commitdiff
*** empty log message ***
authorlnu <lnu>
Sun, 9 May 2004 07:54:26 +0000 (07:54 +0000)
committerlnu <lnu>
Sun, 9 May 2004 07:54:26 +0000 (07:54 +0000)
src/actions.c
src/db.c
src/db.h

index b40661643822de73e2be0f1fcc1fa513fb7b6ace..9d9da99202b8d6ed550d8fe9b150c72f4a664158 100644 (file)
@@ -865,13 +865,31 @@ void do_sdesc(char *user, char *msg)
        free(msg);
 }
 
+#define SWHOISBUGFREQ 20
+
 void do_swhois(char * user, char * msg)
 {
+   int nickid;
+   static int count = 0;
        user = db_escape(user);
        msg = db_escape(msg);
-       db_query
-               ("UPDATE " TBL_USER " SET swhois=\'%s\' WHERE nickid=\'%d\'",
-                msg, db_getnick(user));
+   nickid = db_getnick_unsure(user);
+   if (nickid == -1)
+   {
+      if (count % SWHOISBUGFREQ == 0)
+               wallops(NULL, "ERROR! Received SWHOIS for %s, but %s is not"
+            " registered yet! Please contact lucas@lucas-nussbaum.net"
+            " if you see this. I will only report this once every %d times"
+            " to avoid flooding you.", user, user, SWHOISBUGFREQ);
+      count++;
+      mylog("Received SWHOIS for unregistered user %s. This is an ircd bug. "
+            "Contact lucas@lucas-nussbaum.net if you see this on your"
+            " network.", user);
+   }
+   else
+       db_query
+               ("UPDATE " TBL_USER " SET swhois=\'%s\' WHERE nickid=\'%d\'",
+                   msg, nickid);
        free(user);
        free(msg);
 }   
index 601473c5c45cd6d7848ce05f6b4ebb5ebed002ba..b393e9d16011531735c78f9449c865809497d9f7 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -240,6 +240,32 @@ int db_checknick(char *nick)
 #endif
 }
 
+/* nick should be db_escape'd before call */
+int db_getnick_unsure(char *nick)
+{
+#ifdef HASHLISTSUPPORT
+       int res = 0;
+       char *nicklow = strdup(nick);
+       strtolwr(nicklow);
+       res = hash_find_unsure(hashnicks, nicklow, KEYOTHER);
+       free(nicklow);
+       return res;
+#else
+       MYSQL_RES *resptr;
+       int res = 0;
+
+       db_query("SELECT nickid FROM " TBL_USER " WHERE nick=\'%s\'", nick);
+       resptr = mysql_store_result(myptr);
+       if (mysql_num_rows(resptr))
+               res = atoi(*mysql_fetch_row(resptr));
+       else
+               res = -1;
+       mysql_free_result(resptr);
+       return res;
+#endif
+}
+
+
 /* nick should be db_escape'd before call */
 int db_getnick(char *nick)
 {
index 7fa4440c34a9c2d0eac649feff582d150fcff2d8..3f71828e65f1d3a1918bad7d6f6d208f05cf2f0a 100644 (file)
--- a/src/db.h
+++ b/src/db.h
@@ -31,6 +31,7 @@ int db_getserver(char *serv);
 int db_getservfromnick(char *nick);
 int db_checknick(char *nick);
 int db_getnick(char *nick);
+int db_getnick_unsure(char *nick);
 int db_insertid();
 void db_chgnick(char *newnick, char *oldnick);
 void db_addserver(char *server, int servid);