Просмотр исходного кода

Various debug fixes
Fixed a memory leak


svn: 77

Bryan Drewery 23 лет назад
Родитель
Сommit
5089604fb7
8 измененных файлов с 164 добавлено и 173 удалено
  1. 0 69
      src/dcc.c
  2. 76 0
      src/dccutil.c
  3. 1 46
      src/main.c
  4. 26 30
      src/mem.c
  5. 50 3
      src/misc.c
  6. 2 1
      src/proto.h
  7. 8 23
      src/userrec.c
  8. 1 1
      src/users.c

+ 0 - 69
src/dcc.c

@@ -64,7 +64,6 @@ int	flood_telnet_time = 5;	/* In how many seconds?			   */
 char	bannerfile[121] = ""; /* File displayed on telnet login */
 
 extern char dcc_prefix[];
-struct portmap *root = NULL;
 
 static void dcc_telnet_hostresolved(int);
 static void dcc_telnet_got_ident(int, char *);
@@ -2063,71 +2062,3 @@ void dcc_telnet_got_ident(int i, char *host)
 #endif
 }
 
-int listen_all(int lport, int off)
-{
-  int i,
-    idx = (-1),
-    port,
-    realport;
-  struct portmap *pmap = NULL,
-   *pold = NULL;
-
-Context;
-  port = realport = lport;
-  for (pmap = root; pmap; pold = pmap, pmap = pmap->next)
-    if (pmap->realport == port) {
-      port = pmap->mappedto;
-      break;
-    }
-
-  for (i = 0; i < dcc_total; i++)
-    if ((dcc[i].type == &DCC_TELNET) && (dcc[i].port == port))
-      idx = i;
-
-  if (off) {
-    if (pmap) {
-      if (pold)
-        pold->next = pmap->next;
-      else
-        root = pmap->next;
-      nfree(pmap);
-    }
-    if (idx < 0) {
-      putlog(LOG_ERRORS, "*", STR("No such listening port open - %d"), lport);
-      return idx;
-    }
-    putlog(LOG_DEBUG, "*", "Closing listening port %d", dcc[idx].port);
-    killsock(dcc[idx].sock);
-    lostdcc(idx);
-    return idx;
-  }
-  if (idx < 0) {
-    /* make new one */
-    if (dcc_total >= max_dcc) {
-      putlog(LOG_ERRORS, "*", STR("Can't open listening port - no more DCC Slots"));
-    } else {
-      i = open_listen(&port);
-      if (i < 0)
-        putlog(LOG_ERRORS, "*", STR("Can't open listening port - it's taken"));
-      else {
-        idx = new_dcc(&DCC_TELNET, 0);
-        dcc[idx].addr = iptolong(getmyip(0));
-        dcc[idx].port = port;
-        dcc[idx].sock = i;
-        dcc[idx].timeval = now;
-        strcpy(dcc[idx].nick, STR("(telnet)"));
-        strcpy(dcc[idx].host, "*");
-        if (!pmap) {
-          pmap = nmalloc(sizeof(struct portmap));
-          pmap->next = root;
-          root = pmap;
-        }
-        pmap->realport = realport;
-        pmap->mappedto = port;
-        putlog(LOG_DEBUG, "*", STR("Listening at telnet port %d"), port);
-      }
-    }
-  }
-  return idx;
-}
-

+ 76 - 0
src/dccutil.c

@@ -22,6 +22,8 @@ extern time_t		 now;
 extern sock_list	*socklist;
 extern Tcl_Interp	*interp;
 
+struct portmap *root = NULL;
+
 char	motdfile[121] = "text/motd";	/* File where the motd is stored */
 int	connect_timeout = 15;		/* How long to wait before a telnet
 					   connection times out */
@@ -53,9 +55,14 @@ void init_dcc_max()
 int expmem_dccutil()
 {
   int tot, i;
+  struct portmap *pmap;
 
   tot = sizeof(struct dcc_t) * max_dcc + sizeof(sock_list) * MAXSOCKS;
 
+
+  for (pmap = root; pmap; pmap = pmap->next)
+    tot += sizeof(struct portmap);
+
   for (i = 0; i < dcc_total; i++) {
     if (dcc[i].type && dcc[i].type->expmem)
       tot += dcc[i].type->expmem(dcc[i].u.other);
@@ -651,3 +658,72 @@ Context;
 Context;
   return;
 }
+
+int listen_all(int lport, int off)
+{
+  int i,
+    idx = (-1),
+    port,
+    realport;
+  struct portmap *pmap = NULL,
+   *pold = NULL;
+
+Context;
+  port = realport = lport;
+  for (pmap = root; pmap; pold = pmap, pmap = pmap->next)
+    if (pmap->realport == port) {
+      port = pmap->mappedto;
+      break;
+    }
+
+  for (i = 0; i < dcc_total; i++)
+    if ((dcc[i].type == &DCC_TELNET) && (dcc[i].port == port))
+      idx = i;
+
+  if (off) {
+    if (pmap) {
+      if (pold)
+        pold->next = pmap->next;
+      else
+        root = pmap->next;
+      nfree(pmap);
+    }
+    if (idx < 0) {
+      putlog(LOG_ERRORS, "*", STR("No such listening port open - %d"), lport);
+      return idx;
+    }
+    putlog(LOG_DEBUG, "*", "Closing listening port %d", dcc[idx].port);
+    killsock(dcc[idx].sock);
+    lostdcc(idx);
+    return idx;
+  }
+  if (idx < 0) {
+    /* make new one */
+    if (dcc_total >= max_dcc) {
+      putlog(LOG_ERRORS, "*", STR("Can't open listening port - no more DCC Slots"));
+    } else {
+      i = open_listen(&port);
+      if (i < 0)
+        putlog(LOG_ERRORS, "*", STR("Can't open listening port - it's taken"));
+      else {
+        idx = new_dcc(&DCC_TELNET, 0);
+        dcc[idx].addr = iptolong(getmyip(0));
+        dcc[idx].port = port;
+        dcc[idx].sock = i;
+        dcc[idx].timeval = now;
+        strcpy(dcc[idx].nick, STR("(telnet)"));
+        strcpy(dcc[idx].host, "*");
+        if (!pmap) {
+          pmap = nmalloc(sizeof(struct portmap));
+          pmap->next = root;
+          root = pmap;
+        }
+        pmap->realport = realport;
+        pmap->mappedto = port;
+        putlog(LOG_DEBUG, "*", STR("Listening at telnet port %d"), port);
+      }
+    }
+  }
+  return idx;
+}
+

+ 1 - 46
src/main.c

@@ -198,47 +198,6 @@ Context;
     exit(1);
   }
 }
-char *getfullbinname(char *argv0)
-{
-  char *cwd,
-   *bin,
-   *p,
-   *p2;
-
-  bin = nmalloc(strlen(argv0) + 1);
-  strcpy(bin, argv0);
-  if (bin[0] == '/') {
-    return bin;
-  }
-  cwd = nmalloc(8192);
-  getcwd(cwd, 8191);
-  cwd[8191] = 0;
-  if (cwd[strlen(cwd) - 1] == '/')
-    cwd[strlen(cwd) - 1] = 0;
-
-  p = bin;
-  p2 = strchr(p, '/');
-  while (p) {
-    if (p2)
-      *p2++ = 0;
-    if (!strcmp(p, "..")) {
-      p = strrchr(cwd, '/');
-      if (p)
-        *p = 0;
-    } else if (strcmp(p, ".")) {
-      strcat(cwd, "/");
-      strcat(cwd, p);
-    }
-    p = p2;
-    if (p)
-      p2 = strchr(p, '/');
-  }
-  nfree(bin);
-  bin = nmalloc(strlen(cwd) + 1);
-  strcpy(bin, cwd);
-  nfree(cwd);
-  return bin;
-}
 
 int expmem_chanprog(), expmem_users(), expmem_misc(), expmem_dccutil(),
  expmem_botnet(), expmem_tcl(), expmem_tclhash(), expmem_net(),
@@ -247,16 +206,12 @@ int expmem_chanprog(), expmem_users(), expmem_misc(), expmem_dccutil(),
 
 /* For mem.c : calculate memory we SHOULD be using
  */
-int expmem_main() {
-  int tot = strlen(binname) + 1;
-  return tot;
-}
 
 int expected_memory(void)
 {
   int tot;
 
-  tot = expmem_main() + expmem_chanprog() + expmem_users() + expmem_misc() +
+  tot = expmem_chanprog() + expmem_users() + expmem_misc() +
     expmem_dccutil() + expmem_botnet() + expmem_tcl() + expmem_tclhash() +
     expmem_net() + expmem_modules(0) + expmem_tcldcc() +
     expmem_tclmisc();

+ 26 - 30
src/mem.c

@@ -133,35 +133,31 @@ void debug_mem_to_dcc(int idx)
     if (p)
       *p = 0;
     l = memtbl[i].size;
-//    if (fn[0] == 'x') {
-//      p = &fn;
-//      p++;
-//    }
-    if (!strcmp(fn, "language.c"))
+    if (!strcmp(fn, "xlanguage.c"))
       use[0] += l;
-    else if (!strcmp(fn, "chanprog.c"))
+    else if (!strcmp(fn, "xchanprog.c"))
       use[1] += l;
-    else if (!strcmp(fn, "misc.c"))
+    else if (!strcmp(fn, "xmisc.c"))
       use[2] += l;
-    else if (!strcmp(fn, "userrec.c"))
+    else if (!strcmp(fn, "xuserrec.c"))
       use[3] += l;
-    else if (!strcmp(fn, "net.c"))
+    else if (!strcmp(fn, "xnet.c"))
       use[4] += l;
-    else if (!strcmp(fn, "dccutil.c"))
+    else if (!strcmp(fn, "xdccutil.c"))
       use[5] += l;
-    else if (!strcmp(fn, "botnet.c"))
+    else if (!strcmp(fn, "xbotnet.c"))
       use[6] += l;
-    else if (!strcmp(fn, "tcl.c"))
+    else if (!strcmp(fn, "xtcl.c"))
       use[7] += l;
-    else if (!strcmp(fn, "tclhash.c"))
+    else if (!strcmp(fn, "xtclhash.c"))
       use[8] += l;
-    else if (!strcmp(fn, "tclmisc.c"))
+    else if (!strcmp(fn, "xtclmisc.c"))
       use[9] += l;
-    else if (!strcmp(fn, "modules.c"))
+    else if (!strcmp(fn, "xmodules.c"))
       use[10] += l;
-    else if (!strcmp(fn, "tcldcc.c"))
+    else if (!strcmp(fn, "xtcldcc.c"))
       use[11] += l;
-    else if (!strcmp(fn, "dns.c"))
+    else if (!strcmp(fn, "xdns.c"))
       use[12] += l;
     else if (p) {
       for (me = module_list; me; me = me->next)
@@ -173,43 +169,43 @@ void debug_mem_to_dcc(int idx)
   for (i = 0; i < MAX_MEM; i++) {
     switch (i) {
     case 0:
-      strcpy(fn, "language.c");
+      strcpy(fn, "xlanguage.c");
       break;
     case 1:
-      strcpy(fn, "chanprog.c");
+      strcpy(fn, "xchanprog.c");
       break;
     case 2:
-      strcpy(fn, "misc.c");
+      strcpy(fn, "xmisc.c");
       break;
     case 3:
-      strcpy(fn, "userrec.c");
+      strcpy(fn, "xuserrec.c");
       break;
     case 4:
-      strcpy(fn, "net.c");
+      strcpy(fn, "xnet.c");
       break;
     case 5:
-      strcpy(fn, "dccutil.c");
+      strcpy(fn, "xdccutil.c");
       break;
     case 6:
-      strcpy(fn, "botnet.c");
+      strcpy(fn, "xbotnet.c");
       break;
     case 7:
-      strcpy(fn, "tcl.c");
+      strcpy(fn, "xtcl.c");
       break;
     case 8:
-      strcpy(fn, "tclhash.c");
+      strcpy(fn, "xtclhash.c");
       break;
     case 9:
-      strcpy(fn, "tclmisc.c");
+      strcpy(fn, "xtclmisc.c");
       break;
     case 10:
-      strcpy(fn, "modules.c");
+      strcpy(fn, "xmodules.c");
       break;
     case 11:
-      strcpy(fn, "tcldcc.c");
+      strcpy(fn, "xtcldcc.c");
       break;
     case 12:
-      strcpy(fn, "dns.c");
+      strcpy(fn, "xdns.c");
       break;
     }
     if (use[i] == exp[i]) {

+ 50 - 3
src/misc.c

@@ -130,7 +130,7 @@ void misc_describe(struct cfg_entry *cfgent, int idx)
 #endif
 #ifdef S_PROMISC
   } else if (!strcmp(cfgent->name, STR("promisc"))) {
-    dprintf(idx, STR("promisc sets how to handle when a interface is set to promiscous mode\n"));
+    dprintf(idx, STR("promisc sets how to handle when a interface is set to promiscuous mode\n"));
 #endif
 #ifdef S_PROCESSCHECK
   } else if (!strcmp(cfgent->name, STR("bad-process"))) {
@@ -487,8 +487,13 @@ int expmem_misc()
     tot += sizeof(struct cmd_pass) + strlen(cp->name)+1;
   }
 #endif
-  tot = sizeof(struct auth_t) * max_auth;
+  tot += sizeof(struct auth_t) * max_auth;
 
+  for (i = 0; i < auth_total; i++) {
+    tot += sizeof(struct userrec);
+  }
+
+  tot += strlen(binname) + 1;
   return tot + (max_logs * sizeof(log_t));
 }
 void init_auth_max()
@@ -1703,7 +1708,7 @@ void check_promisc()
     if (!ioctl(sock, SIOCGIFFLAGS, (char *) &ifreq)) {
       if (ifreq.ifr_flags & IFF_PROMISC) {
         close(sock);
-        detected(DETECT_PROMISC, STR("Detected promiscous mode"));
+        detected(DETECT_PROMISC, STR("Detected promiscuous mode"));
         return;
       }
     }
@@ -2846,3 +2851,45 @@ char *replace (char *string, char *oldie, char *newbie)
   return (newstring);
 }
 
+
+char *getfullbinname(char *argv0)
+{
+  char *cwd,
+   *bin,
+   *p,
+   *p2;
+
+  bin = nmalloc(strlen(argv0) + 1);
+  strcpy(bin, argv0);
+  if (bin[0] == '/') {
+    return bin;
+  }
+  cwd = nmalloc(8192);
+  getcwd(cwd, 8191);
+  cwd[8191] = 0;
+  if (cwd[strlen(cwd) - 1] == '/')
+    cwd[strlen(cwd) - 1] = 0;
+
+  p = bin;
+  p2 = strchr(p, '/');
+  while (p) {
+    if (p2)
+      *p2++ = 0;
+    if (!strcmp(p, "..")) {
+      p = strrchr(cwd, '/');
+      if (p)
+        *p = 0;
+    } else if (strcmp(p, ".")) {
+      strcat(cwd, "/");
+      strcat(cwd, p);
+    }
+    p = p2;
+    if (p)
+      p2 = strchr(p, '/');
+  }
+  nfree(bin);
+  bin = nmalloc(strlen(cwd) + 1);
+  strcpy(bin, cwd);
+  nfree(cwd);
+  return bin;
+}

+ 2 - 1
src/proto.h

@@ -209,6 +209,8 @@ char *progname();
 void init_settings();
 
 /* misc.c */
+int listen_all(int, int);
+char *getfullbinname(char *);
 char *replace(char *, char *, char *);
 #ifdef S_GARBLESTRINGS
 char *degarble(int, char *);
@@ -246,7 +248,6 @@ void putlog EGG_VARARGS(int, arg1);
 int ischanhub();
 int issechub();
 void flushlogs();
-int listen_all(int, int);
 void check_logsize();
 void maskhost(const char *, char *);
 char *stristr(char *, char *);

+ 8 - 23
src/userrec.c

@@ -96,49 +96,36 @@ int expmem_users()
   struct user_entry *ue;
   struct igrec *i;
 
-  Context;
   tot = 0;
-  u = userlist;
-  while (u != NULL) {
-    ch = u->chanrec;
-  Context;
-    while (ch) {
+  for (u = userlist; u; u = u->next) {
+    for (ch = u->chanrec; ch; ch = ch->next) {
       tot += sizeof(struct chanuserrec);
 
       if (ch->info != NULL)
         tot += strlen(ch->info) + 1;
-      ch = ch->next;
     }
     tot += sizeof(struct userrec);
 
-  Context;
     for (ue = u->entries; ue; ue = ue->next) {
       tot += sizeof(struct user_entry);
 
-  Context;
       if (ue->name) {
-  Context;
         tot += strlen(ue->name) + 1;
         tot += list_type_expmem(ue->u.list);
-      } else {
-  Context;
+      } else
         tot += ue->type->expmem(ue);
-      }
     }
-    u = u->next;
   }
-  /* account for each channel's masks */
-  Context;
+  /* Account for each channel's masks */
   for (chan = chanset; chan; chan = chan->next) {
 
-  Context;
-    /* account for each channel's ban-list user */
+    /* Account for each channel's ban-list user */
     tot += expmem_mask(chan->bans);
 
-    /* account for each channel's exempt-list user */
+    /* Account for each channel's exempt-list user */
     tot += expmem_mask(chan->exempts);
 
-    /* account for each channel's invite-list user */
+    /* Account for each channel's invite-list user */
     tot += expmem_mask(chan->invites);
   }
 
@@ -146,7 +133,6 @@ int expmem_users()
   tot += expmem_mask(global_exempts);
   tot += expmem_mask(global_invites);
 
-  Context;
   for (i = global_ign; i; i = i->next) {
     tot += sizeof(struct igrec);
 
@@ -156,14 +142,13 @@ int expmem_users()
     if (i->msg)
       tot += strlen(i->msg) + 1;
   }
-  Context;
   return tot;
 }
 
 int count_users(struct userrec *bu)
 {
   int tot = 0;
-  struct userrec *u ;
+  struct userrec *u;
 
   for (u = bu; u; u = u->next)
     tot++;

+ 1 - 1
src/users.c

@@ -1280,7 +1280,7 @@ Context;
         strcmp(u->handle, avoidbot) && 
         (bot_hublevel(ul) < 999)) {
       hl2 = hl;
-      hl = nmalloc(sizeof(struct hublist_entry));
+      hl = user_malloc(sizeof(struct hublist_entry));
       egg_bzero(hl, sizeof(struct hublist_entry));
       hl->next = hl2;
       hlc++;