]> jfr.im git - irc/blitzed-org/bopm.git/commitdiff
Prevented memory leaks where ss wasn't freed if all scanners returned !OPM_SUCCESS
authorstrtok <redacted>
Sun, 29 Dec 2002 21:03:32 +0000 (21:03 +0000)
committerstrtok <redacted>
Sun, 29 Dec 2002 21:03:32 +0000 (21:03 +0000)
and there were no dnsbl checks.

Added verbosity to failed dnsbl checks on manual scan
Added scan_checkfinished if dnsbl check was last test to finish and it failed (memory leak)

src/dnsbl.c
src/scan.c

index 6b73624b85d851e9d583f0927a1c19d60539cd39..30ff6e92b224303039a48fe22f629912452b8979 100644 (file)
@@ -149,8 +149,15 @@ void dnsbl_result(struct firedns_result *res)
 
    /* Everything is OK */
    if(res->text[0] == '\0' && fdns_errno == FDNS_ERR_NXDOMAIN)
-      return;
+   {
+      if(ss->manual_target != NULL)
+         irc_send("PRIVMSG %s :CHECK -> DNSBL -> %s does not appear in BL zone %s", 
+                   ss->manual_target->name, ss->ip,
+                   (strlen(ss->ip) < strlen(res->lookup)) ? (res->lookup + strlen(ss->ip) + 1) : res->lookup);
 
+      scan_checkfinished(ss);
+      return;
+   }
    /* Either an error, or a positive lookup */
 
    if(fdns_errno == FDNS_ERR_NONE)
index f89ae39f119b5b4de5c8ae6abccdeee1923454af..b5e43151678e74d5bbd4711194d89ddc2ed6fa43 100644 (file)
@@ -383,6 +383,10 @@ void scan_connect(char **user, char *msg)
          }
       }
    }
+
+   /* All scanners returned !OPM_SUCCESS and there were no dnsbl checks */
+   if(ss->scans == 0)
+      scan_free(ss);
 }
 
 
@@ -871,14 +875,16 @@ void scan_checkfinished(struct scan_struct *ss)
    {
 
       if(ss->manual_target != NULL)
-         irc_send("PRIVMSG %s :All tests on %s completed", ss->manual_target->name, ss->ip);
+         irc_send("PRIVMSG %s :CHECK -> All tests on %s completed.", ss->manual_target->name, ss->ip);
       else
+      {
          if(OPT_DEBUG) /* If there was a manual_target, then irc_nick, etc is NULL */
             log("SCAN -> All tests on %s!%s@%s complete.", ss->irc_nick, ss->irc_username, ss->irc_hostname);
 
-      /* Scan was a negative */
-      if(!ss->positive)
-         scan_negative(ss);
+         /* Scan was a negative */
+         if(!ss->positive)
+            scan_negative(ss);
+      }
 
       scan_free(ss);
    }
@@ -1000,22 +1006,29 @@ void scan_manual(char *param, struct ChannelConf *target)
             case OPM_ERR_NOPROTOCOLS:
                break;
             case OPM_ERR_BADADDR:
-               irc_send("PRIVMSG %s :OPM -> Bad address %s", ss->manual_target->name, ss->ip);
+               irc_send("PRIVMSG %s :OPM -> Bad address %s [%s]", ss->manual_target->name, 
+                         ss->ip, scs->name);
                break;
             default:
-               irc_send("PRIVMSG %s :OPM -> Unknown error %s", ss->manual_target->name, ss->ip);
+               irc_send("PRIVMSG %s :OPM -> Unknown error %s [%s]", ss->manual_target->name, 
+                         ss->ip, scs->name);
                break;
          }
-         scan_free(ss);
-         return;
       }
       else
          ss->scans++; /* Increase scan count only if OPM_SUCCESS */
    }
 
-   if((scannername != NULL) && (ss->scans == 0))
+   /* If all of the scanners gave !OPM_SUCCESS and there were no dnsbl checks, 
+      cleanup here */
+   if(ss->scans == 0)
    {
-      irc_send("PRIVMSG %s :CHECK -> No such scanner '%s'", ss->manual_target->name, scannername);
+      if(scannername != NULL)
+         irc_send("PRIVMSG %s :CHECK -> No such scanner '%s', or '%s' has 0 protocols.", 
+                   ss->manual_target->name, scannername, scannername);
+
+      irc_send("PRIVMSG %s :CHECK -> No scans active on '%s', aborting scan.", 
+                ss->manual_target->name, ss->ip);
       scan_free(ss);
    }
 }