فهرست منبع

* Clear a bot's count when it links in

Bryan Drewery 17 سال پیش
والد
کامیت
97fa023d9b
3فایلهای تغییر یافته به همراه15 افزوده شده و 3 حذف شده
  1. 5 0
      src/botnet.c
  2. 9 3
      src/mod/irc.mod/irc.c
  3. 1 0
      src/mod/irc.mod/irc.h

+ 5 - 0
src/botnet.c

@@ -72,6 +72,8 @@ tand_t *findbot(const char *who)
   return NULL;
 }
 
+extern void counter_clear(struct userrec*);
+
 /* Add a tandem bot to our chain list
  */
 void addbot(char *who, char *from, char *next, char flag, int vlocalhub, time_t vbuildts, char *vcommit, char *vversion)
@@ -105,6 +107,9 @@ void addbot(char *who, char *from, char *next, char flag, int vlocalhub, time_t
   else
     ptr2->uplink = findbot(next);
   tands++;
+
+  if (ptr2->u)
+    counter_clear(ptr2->u);
 }
 
 #ifdef G_BACKUP

+ 9 - 3
src/mod/irc.mod/irc.c

@@ -87,6 +87,7 @@ static bool prevent_mixing = 1;  /* To prevent mixing old/new modes */
 static bool include_lk = 1;      /* For correct calculation
                                  * in real_add_mode. */
 static hash_table_t *bot_counters = NULL;
+static unsigned long my_counter = 0;
 
 static int
 voice_ok(memberlist *m, struct chanset_t *chan)
@@ -356,7 +357,6 @@ sdprintf("tohash: %s", tohash);
 
 void makecookie(char *out, size_t len, const char *chname, const memberlist* opper, const memberlist* m1, const memberlist* m2, const memberlist* m3) {
   char randstring[5] = "", ts[11] = "";
-  static unsigned long counter = 0;
 
   make_rand_str(randstring, 4);
   /* &ts[4] is now last 6 digits of time */
@@ -365,8 +365,8 @@ void makecookie(char *out, size_t len, const char *chname, const memberlist* opp
   char cookie_clear[101] = "";
 
   //Increase my counter
-  ++counter;
-  simple_snprintf2(cookie_clear, sizeof(cookie_clear), STR("%s%s%D"), randstring, &ts[3], counter);
+  ++my_counter;
+  simple_snprintf2(cookie_clear, sizeof(cookie_clear), STR("%s%s%D"), randstring, &ts[3], my_counter);
 
   char key[150] = "";
   simple_snprintf2(key, sizeof(key), "%c%c%c%s%c%c%c%c%c%c%^s%c%c%c%c%c%c%c%s",
@@ -438,6 +438,12 @@ sdprintf("cookie: %s", out);
   free((char*)cookie);
 }
 
+// Clear counter for bot
+void counter_clear(struct userrec *u) {
+  unsigned long counter = 0;
+  hash_table_insert(bot_counters, u->handle, (void *)(counter));
+}
+
 static int checkcookie(const char *chname, const memberlist* opper, const memberlist* opped, const char *cookie, int indexHint) {
 #define HOST(_x) (6 + (_x) + ((hashes << 1) + hashes)) /* x + (hashes * 3) */
 #define SALT(_x) (1 + (_x) + ((hashes << 1) + hashes)) /* x + (hashes * 3) */

+ 1 - 0
src/mod/irc.mod/irc.h

@@ -65,6 +65,7 @@ static void cache_invite(struct chanset_t *, char *, char *, char *, bool, bool)
 //static char *makecookie(const char *, const memberlist*, const memberlist*, const memberlist* = NULL, const memberlist* = NULL);
 void makecookie(char*, size_t, const char *, const memberlist*, const memberlist*, const memberlist* = NULL, const memberlist* = NULL);
 static int checkcookie(const char*, const memberlist*, const memberlist*, const char*, int);
+extern void counter_clear(struct userrec *);
 static bool me_voice(struct chanset_t *);
 static bool any_ops(struct chanset_t *);
 static char *getchanmode(struct chanset_t *);