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);
}
#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)
{
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);