فهرست منبع

Merge branch 'master' into next

* master:
  bdlib: Update to 59e4dde7
  Make dns_info fields more clear
  Fix defs build handling
  server.mod: Fix memory leak on failure to initiate SSL
Bryan Drewery 5 ماه پیش
والد
کامیت
779a2f9197
7فایلهای تغییر یافته به همراه31 افزوده شده و 25 حذف شده
  1. 11 4
      Makefile.in
  2. 1 1
      lib/bdlib
  3. 2 2
      src/adns.cc
  4. 9 9
      src/botnet.cc
  5. 3 3
      src/dcc.cc
  6. 2 4
      src/dcc.h
  7. 3 2
      src/mod/server.mod/servmsg.cc

+ 11 - 4
Makefile.in

@@ -78,6 +78,7 @@ cleanutils:
 clean:  cleanutils
 	+@cd src && $(MAKE) clean
 	-+@cd lib && $(MAKE) clean
+	@rm -f src/.defs/*.stamp
 	@rm -f $(BINEXEC) build/stamp.* *~ src/*~ configure.temp .mangled stamp.*
 	@rm -f ts@EXEEXT@
 
@@ -140,20 +141,26 @@ sorthelp: src/sorthelp.cc
 libdefs: src/.defs/libcrypto_post.h src/.defs/libssl_post.h src/.defs/libtcl_post.h \
 	 src/.defs/libcrypto_pre.h src/.defs/libssl_pre.h src/.defs/libtcl_pre.h \
 	 src/.defs/libcrypto_exports src/.defs/libssl_exports src/.defs/libtcl_exports
-src/.defs/libcrypto_post.h src/.defs/libcrypto_pre.h src/.defs/libcrypto_exports: src/libcrypto.cc \
+src/.defs/libcrypto_post.h src/.defs/libcrypto_pre.h src/.defs/libcrypto_exports: src/.defs/libcrypto_gen.stamp
+src/.defs/libcrypto_gen.stamp: src/libcrypto.cc \
 	src/generate_defs.sh src/generate_symbol.sh src/dl.h
 	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
            SED="sed" src/generate_defs.sh src/libcrypto.cc || exit 1
-src/.defs/libssl_post.h src/.defs/libssl_pre.h src/.defs/libssl_exports: src/libssl.cc \
+	@touch $@
+src/.defs/libssl_post.h src/.defs/libssl_pre.h src/.defs/libssl_exports: src/.defs/libssl_gen.stamp
+src/.defs/libssl_gen.stamp: src/libssl.cc \
 	src/generate_defs.sh src/generate_symbol.sh src/dl.h
 	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
            SED="sed" src/generate_defs.sh src/libssl.cc || exit 1
-src/.defs/libtcl_post.h src/.defs/libtcl_pre.h src/.defs/libtcl_exports: src/libtcl.cc \
+	@touch $@
+src/.defs/libtcl_post.h src/.defs/libtcl_pre.h src/.defs/libtcl_exports: src/.defs/libtcl_gen.stamp
+src/.defs/libtcl_gen.stamp: src/libtcl.cc \
 	src/generate_defs.sh src/generate_symbol.sh src/dl.h
 	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
            SED="sed" src/generate_defs.sh src/libtcl.cc || exit 1
+	@touch $@
 src/.defs/exports: Makefile \
-	src/.defs/libcrypto_exports src/.defs/libssl_exports src/.defs/libtcl_exports
+	src/.defs/libcrypto_gen.stamp src/.defs/libssl_gen.stamp src/.defs/libtcl_gen.stamp
 	@echo "Generating $@"
 	@{ \
 		echo "{"; \

+ 1 - 1
lib/bdlib

@@ -1 +1 @@
-Subproject commit d7e444a54ca1a75573dd266948947596f0266637
+Subproject commit 59e4dde718dd06aaa2af056c0d22c83f947dfd52

+ 2 - 2
src/adns.cc

@@ -251,9 +251,9 @@ static void kill_dcc_dnswait(int idx, void *x)
 	struct dns_info *p = (struct dns_info *) x;
 
 	if (p) {
-		free(p->cbuf);
-		free(p->cptr);
+		free(p->caller_data);
 		// free(p) is same thing here.
+		assert(p == dcc[idx].u.other);
 		free(dcc[idx].u.other);
 		dcc[idx].u.other = NULL;
 	}

+ 9 - 9
src/botnet.cc

@@ -1084,8 +1084,8 @@ int botlink(const char *linker, int idx, char *nick)
       dcc[i].user = u;
       strlcpy(dcc[i].nick, nick, sizeof(dcc[i].nick));
       strlcpy(dcc[i].host, address, sizeof(dcc[i].host));
-      dcc[i].u.dns->cptr = strdup(linker);
-      dcc[i].u.dns->ibuf = idx;
+      dcc[i].u.dns->caller_data = strdup(linker);
+      dcc[i].u.dns->caller_idx = idx;
       dcc[i].bot = 1;
 
       if (unix_domain) {
@@ -1122,7 +1122,7 @@ static void botlink_dns_callback(int id, void *client_data, const char *host,
     return;
 
 //  if (valid_idx(i)) {
-//    idx = dcc[i].u.dns->ibuf;
+//    idx = dcc[i].u.dns->caller_idx;
 //  }
 
   bd::String ip_from_dns;
@@ -1154,10 +1154,10 @@ static void botlink_dns_callback(int id, void *client_data, const char *host,
 
 static void botlink_real(int i)
 {
-  int idx = dcc[i].u.dns->ibuf;
-  char *linker = strdup(dcc[i].u.dns->cptr);
-  free(dcc[i].u.dns->cptr);
-  dcc[i].u.dns->cptr = NULL;
+  int idx = dcc[i].u.dns->caller_idx;
+  char *linker = strdup((char *)dcc[i].u.dns->caller_data);
+  free(dcc[i].u.dns->caller_data);
+  dcc[i].u.dns->caller_data = NULL;
 
   changeover_dcc(i, &DCC_FORK_BOT, sizeof(struct bot_info));
   dcc[i].timeval = now;
@@ -1279,7 +1279,7 @@ void tandem_relay(int idx, char *nick, int i)
   dcc[idx].u.relay->sock = -1;
 
   dcc[i].timeval = now;
-  dcc[i].u.dns->ibuf = idx;
+  dcc[i].u.dns->caller_idx = idx;
   
   int dns_id = egg_dns_lookup(bi->address, 20, tandem_relay_dns_callback, (void *) (long) i);
   if (dns_id >= 0)
@@ -1302,7 +1302,7 @@ static void tandem_relay_dns_callback(int id, void *client_data,
     return;
 
   if (valid_idx(i))
-    idx = dcc[i].u.dns->ibuf;
+    idx = dcc[i].u.dns->caller_idx;
   
   if (idx < 0) {
     putlog(LOG_MISC, "*", "Can't find user for relay!  %d -> %d", i, idx);

+ 3 - 3
src/dcc.cc

@@ -1493,7 +1493,7 @@ dcc_telnet(int idx, char *buf, int ii)
   dcc[i].timeval = now;
   strlcpy(dcc[i].nick, "*", sizeof(dcc[i].nick));
 
-  dcc[i].u.dns->ibuf = idx;
+  dcc[i].u.dns->caller_idx = idx;
 
   int dns_id = egg_dns_reverse(s, 20, dcc_telnet_dns_callback, (void *) (long) i);
   if (dns_id >= 0)
@@ -1512,7 +1512,7 @@ static void dcc_telnet_dns_callback(int id, void *client_data, const char *ip,
   if (!valid_dns_id(i, id))
     return;
 
-  int idx = dcc[i].u.dns->ibuf;
+  int idx = dcc[i].u.dns->caller_idx;
 
   if (!valid_idx(idx)) {
     putlog(LOG_BOTS, "*", "Lost listening socket while resolving %s", dcc[i].host);
@@ -1558,7 +1558,7 @@ static void dcc_telnet_dns_forward_callback(int id, void *client_data,
   char s2[UHOSTLEN + 20] = "";
 
   if (valid_idx(i))
-    idx = dcc[i].u.dns->ibuf;
+    idx = dcc[i].u.dns->caller_idx;
 
   if (!valid_idx(idx)) {
     putlog(LOG_BOTS, "*", "Lost listening socket while resolving %s", iptostr(htonl(dcc[i].addr)));

+ 2 - 4
src/dcc.h

@@ -75,10 +75,8 @@ struct dcc_t {
 };
 
 struct dns_info {
-  char *cbuf;			/* free`d when done */
-  char *cptr;
-  int ibuf;
-  int ibuf2;
+  void *caller_data;			/* free`d when done */
+  int caller_idx;
 //  struct dcc_table *type;       /* type we are doing the lookup for          */
 };
 

+ 3 - 2
src/mod/server.mod/servmsg.cc

@@ -2121,7 +2121,7 @@ static void connect_server(void)
 
     dcc[newidx].timeval = now;
     dcc[newidx].sock = -1;
-    dcc[newidx].u.dns->cbuf = strdup(pass);
+    dcc[newidx].u.dns->caller_data = strdup(pass);
 
     cycle_time = server_cycle_wait;		/* wait N seconds before attempting next server connect */
 
@@ -2186,7 +2186,7 @@ static void server_dns_callback(int id, void *client_data, const char *host,
   if (addr.family == AF_INET)
     dcc[idx].addr = htonl(addr.u.addr.s_addr);
 
-  strlcpy(serverpass, (char *) dcc[idx].u.dns->cbuf, sizeof(serverpass));
+  strlcpy(serverpass, (char *) dcc[idx].u.dns->caller_data, sizeof(serverpass));
   changeover_dcc(idx, &SERVER_SOCKET, 0);
 
   //No proxy, use identd, 2 = spoof ident
@@ -2210,6 +2210,7 @@ static void server_dns_callback(int id, void *client_data, const char *host,
         putlog(LOG_SERV, "*", "SSL Failed to connect to %s (Error while switching to SSL)", dcc[servidx].host);
         trying_server = 0;
         lostdcc(servidx);
+        delete[] ip;
         return;
       }
     }