fixed up a few issues with exclusions... now checks server exlusions before doing a DNS lookup (for servicesbots that don't have a resolvable hostname, was generating errors)

This commit is contained in:
fishwaldo 2003-01-08 14:53:28 +00:00
parent 0fbbcf5f6c
commit a3528048c1
2 changed files with 29 additions and 10 deletions

View file

@ -2,6 +2,8 @@ Open Proxy Scanning Bot Module for NeoStats Changelog.
==============================================================================
* Version 1.0 * 12/12/2002 * Fish
- Fix a coredump when not enough paramaters supplied to the set command
- OPSB checks the excluded server list when a nick joins on straight away, instead of waiting for the DNS lookups to finish :)
- Changed some of the levels to 40 (localoper) so localops can use opsb to check sites/users
* Version 1.0RC3 * 5/11/2002 * Fish
- Fixed a problem when we delete a scanned user out of the active list when the tcp connect had finished, but not the dns bl lookup...

37
opsb.c
View file

@ -18,7 +18,7 @@
** USA
**
** NeoStats CVS Identification
** $Id: opsb.c,v 1.10 2002/12/13 11:33:10 fishwaldo Exp $
** $Id: opsb.c,v 1.11 2003/01/08 14:53:28 fishwaldo Exp $
*/
@ -107,15 +107,15 @@ int __Bot_Message(char *origin, char **argv, int argc)
if (!strcasecmp(argv[1], "help")) {
if (argc == 2) {
privmsg_list(u->nick, s_opsb, opsb_help);
if (UserLevel(u) >= 50)
if (UserLevel(u) >= 40)
privmsg_list(u->nick, s_opsb, opsb_help_oper);
} else if (!strcasecmp(argv[2], "lookup")) {
privmsg_list(u->nick, s_opsb, opsb_help_lookup);
} else if (!strcasecmp(argv[2], "info")) {
privmsg_list(u->nick, s_opsb, opsb_help_info);
} else if ((!strcasecmp(argv[2], "check") && UserLevel(u) >= 50)) {
} else if ((!strcasecmp(argv[2], "check") && UserLevel(u) >= 40)) {
privmsg_list(u->nick, s_opsb, opsb_help_check);
} else if ((!strcasecmp(argv[2], "status") && UserLevel(u) >= 50)) {
} else if ((!strcasecmp(argv[2], "status") && UserLevel(u) >= 40)) {
privmsg_list(u->nick, s_opsb, opsb_help_status);
} else if ((!strcasecmp(argv[2], "set") && UserLevel(u) >= 100)) {
privmsg_list(u->nick, s_opsb, opsb_help_set);
@ -129,7 +129,7 @@ int __Bot_Message(char *origin, char **argv, int argc)
privmsg_list(u->nick, s_opsb, opsb_help_info);
return 1;
} else if (!strcasecmp(argv[1], "status")) {
if (UserLevel(u) < 50) {
if (UserLevel(u) < 40) {
prefmsg(u->nick, s_opsb, "Access Denied");
chanalert(s_opsb, "%s tried to view status, but is not a operator", u->nick);
return 1;
@ -137,7 +137,7 @@ int __Bot_Message(char *origin, char **argv, int argc)
send_status(u);
return 1;
} else if (!strcasecmp(argv[1], "lookup")) {
if (UserLevel(u) < 50) {
if (UserLevel(u) < 40) {
prefmsg(u->nick, s_opsb, "Access Denied");
chanalert(s_opsb, "%s tried to use lookup, but is not a operator", u->nick);
return 1;
@ -187,7 +187,7 @@ int __Bot_Message(char *origin, char **argv, int argc)
lnode = lnode_create(scandata);
list_append(opsbl, lnode);
} else if (!strcasecmp(argv[1], "check")) {
if (UserLevel(u) < 50) {
if (UserLevel(u) < 40) {
prefmsg(u->nick, s_opsb, "Access Denied");
chanalert(s_opsb, "%s tried to use check, but does not have access", u->nick);
return 0;
@ -758,6 +758,8 @@ static int ScanNick(char **av, int ac) {
User *u;
scaninfo *scandata;
lnode_t *scannode;
lnode_t *node;
exemptinfo *exempts;
strcpy(segv_location, "OPSB:ScanNick");
@ -776,6 +778,22 @@ static int ScanNick(char **av, int ac) {
return -1;
}
/* don't scan users from a server that is excluded */
node = list_first(exempt);
while (node) {
exempts = lnode_get(node);
if (exempts->server == 1) {
/* match a server */
if (fnmatch(exempts->host, u->server->name, 0) == 0) {
#ifdef DEBUG
log("OPSB: User %s exempt. Matched server entry %s in Exemptions", u->nick, exempts->host);
#endif
return -1;
}
}
node = list_next(exempt, node);
}
if (time(NULL) - u->TS > opsb.timedif) {
#ifdef DEBUG
log("Netsplit Nick %s, Not Scanning", av[0]);
@ -835,9 +853,9 @@ int startscan(scaninfo *scandata) {
strcpy(segv_location, "OPSB:Startscan");
/* only check the cache when we have IP addy */
if (scandata->dnsstate == DO_OPM_LOOKUP && scandata->u == NULL) {
if (scandata->dnsstate == DO_OPM_LOOKUP) {
i = checkcache(scandata);
if (i > 0) {
if ((i > 0) && (scandata->u == NULL)) {
free(scandata);
return 1;
}
@ -1068,7 +1086,6 @@ void reportdns(char *data, adns_answer *a) {
void _init() {
s_opsb = "opsb";
globops(me.name, "OPSB Module Loaded");
/* we have to be carefull here. Currently, we have 7 sockets that get opened per connection. Soooo.