add support for lookup only blacklists which don't add bans in if a match found

This commit is contained in:
DNB 2005-12-11 14:45:22 +00:00
parent ea0381a591
commit b0ffd45657
4 changed files with 29 additions and 22 deletions

View file

@ -1,6 +1,7 @@
Black List Scanning Bot Module for NeoStats Changelog. Black List Scanning Bot Module for NeoStats Changelog.
============================================================================== ==============================================================================
3.0.a3-dev - Fish (F) & Mark (M) 3.0.a3-dev - Fish (F) & Mark (M)
- Add support for lookup lists only without banning (D)
- Make sure we broadcast a message when we akill even if not in verbose (F) - Make sure we broadcast a message when we akill even if not in verbose (F)
- AKILL support (F) - AKILL support (F)
- Reorder add command so name works. (M) - Reorder add command so name works. (M)

46
blsb.c
View file

@ -60,9 +60,9 @@ static Bot *blsb_bot;
static dom_list stddomlist[] = static dom_list stddomlist[] =
{ {
{"Blitzed_OPM", "opm.blitzed.org", BL_LOOKUP_TXT_RECORD, "Open proxy - see http://opm.blitzed.org/%s"}, {"Blitzed_OPM", "opm.blitzed.org", BL_LOOKUP_TXT_RECORD, "Open proxy - see http://opm.blitzed.org/%s", 0},
{"Secure-IRC", "bl.irc-chat.net", BL_LOOKUP_TXT_RECORD, "Insecure Host - See http://secure.irc-chat.net/ipinfo.php?ip=%s"}, {"Secure-IRC", "bl.irc-chat.net", BL_LOOKUP_TXT_RECORD, "Insecure Host - See http://secure.irc-chat.net/ipinfo.php?ip=%s", 0},
{"Tor_Exit_Server", "tor.dnsbl.sectoor.de", BL_LOOKUP_TXT_RECORD, "Your Host is a Tor Exit Server"}, {"Tor_Exit_Server", "tor.dnsbl.sectoor.de", BL_LOOKUP_TXT_RECORD, "Your Host is a Tor Exit Server", 0},
{"", "", 0} {"", "", 0}
}; };
@ -96,19 +96,19 @@ ModuleInfo module_info =
static bot_cmd blsb_commands[]= static bot_cmd blsb_commands[]=
{ {
{"ADD", blsb_cmd_add, 4, NS_ULEVEL_ADMIN, blsb_help_add, 0, NULL, NULL}, {"ADD", blsb_cmd_add, 4, NS_ULEVEL_ADMIN, blsb_help_add, 0, NULL, NULL},
{"DEL", blsb_cmd_del, 1, NS_ULEVEL_ADMIN, blsb_help_del, 0, NULL, NULL}, {"DEL", blsb_cmd_del, 1, NS_ULEVEL_ADMIN, blsb_help_del, 0, NULL, NULL},
{"LIST", blsb_cmd_list, 0, NS_ULEVEL_ADMIN, blsb_help_list, 0, NULL, NULL}, {"LIST", blsb_cmd_list, 0, NS_ULEVEL_ADMIN, blsb_help_list, 0, NULL, NULL},
{"CHECK", blsb_cmd_check, 1, NS_ULEVEL_OPER, blsb_help_check, 0, NULL, NULL}, {"CHECK", blsb_cmd_check, 1, NS_ULEVEL_OPER, blsb_help_check, 0, NULL, NULL},
NS_CMD_END() NS_CMD_END()
}; };
static bot_setting blsb_settings[]= static bot_setting blsb_settings[]=
{ {
{"AKILL", &blsb.doakill, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_akill, NULL, (void*)1 }, {"AKILL", &blsb.doakill, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_akill, NULL, (void*)1 },
{"AKILLTIME", &blsb.akilltime, SET_TYPE_INT, 0, 20736000,NS_ULEVEL_ADMIN, NULL, blsb_help_set_akilltime, NULL, (void*)TS_ONE_DAY }, {"AKILLTIME", &blsb.akilltime, SET_TYPE_INT, 0, 20736000, NS_ULEVEL_ADMIN, NULL, blsb_help_set_akilltime, NULL, (void*)TS_ONE_DAY },
{"VERBOSE", &blsb.verbose, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_verbose, NULL, (void*)1 }, {"VERBOSE", &blsb.verbose, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_verbose, NULL, (void*)1 },
{"EXCLUSIONS", &blsb.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_exclusions, blsb_set_exclusions_cb, (void *)0 }, {"EXCLUSIONS", &blsb.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, NULL, blsb_help_set_exclusions, blsb_set_exclusions_cb, (void *)0 },
NS_SETTING_END() NS_SETTING_END()
}; };
@ -146,7 +146,7 @@ ModuleEvent module_events[] =
* @return pointer to newly allocated entry * @return pointer to newly allocated entry
*/ */
static dom_list *new_bldomain( const char *name, const char *domain, BL_LOOKUP_TYPE type, const char *msg ) static dom_list *new_bldomain( const char *name, const char *domain, BL_LOOKUP_TYPE type, const char *msg , int noban)
{ {
dom_list *dl; dom_list *dl;
@ -154,7 +154,8 @@ static dom_list *new_bldomain( const char *name, const char *domain, BL_LOOKUP_T
strlcpy( dl->name, name, BUFSIZE ); strlcpy( dl->name, name, BUFSIZE );
strlcpy( dl->domain, domain, BUFSIZE ); strlcpy( dl->domain, domain, BUFSIZE );
strlcpy( dl->msg, msg, BUFSIZE ); strlcpy( dl->msg, msg, BUFSIZE );
dl->type = type; dl->type = type;
dl->noban = noban;
lnode_create_append( blsb.domains, dl ); lnode_create_append( blsb.domains, dl );
DBAStore( "domains", dl->name, (void *)dl, sizeof( dom_list ) ); DBAStore( "domains", dl->name, (void *)dl, sizeof( dom_list ) );
return dl; return dl;
@ -190,7 +191,7 @@ static void dnsbl_callback(void *data, adns_answer *a)
irc_chanalert( blsb_bot, "%s (%s) exists in %s blacklist: %s", sc->user->name, sc->ip, sc->domain->name, show ); irc_chanalert( blsb_bot, "%s (%s) exists in %s blacklist: %s", sc->user->name, sc->ip, sc->domain->name, show );
if (sc->check) if (sc->check)
irc_prefmsg(blsb_bot, sc->check, "%s (%s) exists in %s blacklist: %s", sc->user->name, sc->ip, sc->domain->name, show); irc_prefmsg(blsb_bot, sc->check, "%s (%s) exists in %s blacklist: %s", sc->user->name, sc->ip, sc->domain->name, show);
if (sc->banned == 0 && sc->user) { if (sc->banned == 0 && sc->user && !sc->domain->noban) {
sc->banned = 1; sc->banned = 1;
/* only ban/msg the user once */ /* only ban/msg the user once */
irc_prefmsg(blsb_bot, sc->user, "Your Host is listed as a inscure host at %s: %s", sc->domain->name, show); irc_prefmsg(blsb_bot, sc->user, "Your Host is listed as a inscure host at %s: %s", sc->domain->name, show);
@ -263,7 +264,7 @@ static scanclient *do_lookup( Client *lookupuser, Client *reportuser )
nlog( LOG_WARNING, "Unknown Type for DNS BL %s", dl->name ); nlog( LOG_WARNING, "Unknown Type for DNS BL %s", dl->name );
break; break;
} }
node = list_next( blsb.domains, node ); node = list_next( blsb.domains, node );
} }
return sc; return sc;
} }
@ -287,7 +288,7 @@ int blsb_cmd_list( const CmdParams *cmdparams )
irc_prefmsg (blsb_bot, cmdparams->source, "BlackList domains:"); irc_prefmsg (blsb_bot, cmdparams->source, "BlackList domains:");
while (lnode) { while (lnode) {
dl = lnode_get(lnode); dl = lnode_get(lnode);
irc_prefmsg (blsb_bot, cmdparams->source, "%s: %s (type %d)", dl->domain, dl->name, dl->type); irc_prefmsg (blsb_bot, cmdparams->source, "%s: %s (type %d) %s", dl->domain, dl->name, dl->type, dl->noban ? "NOBAN" : "");
lnode = list_next(blsb.domains, lnode); lnode = list_next(blsb.domains, lnode);
} }
irc_prefmsg (blsb_bot, cmdparams->source, "End of list."); irc_prefmsg (blsb_bot, cmdparams->source, "End of list.");
@ -341,7 +342,7 @@ int blsb_cmd_add( const CmdParams *cmdparams )
} }
lnode = list_next(blsb.domains, lnode); lnode = list_next(blsb.domains, lnode);
} }
dl = new_bldomain( cmdparams->av[2], cmdparams->av[0], type, msg ); dl = new_bldomain( cmdparams->av[2], cmdparams->av[0], type, msg , ircstrcasecmp( cmdparams->av[3], "NOBAN" ) ? 1 : 0);
irc_prefmsg( blsb_bot, cmdparams->source, "Added domain %s (%s) as type %d", dl->name, dl->domain, dl->type ); irc_prefmsg( blsb_bot, cmdparams->source, "Added domain %s (%s) as type %d", dl->name, dl->domain, dl->type );
CommandReport( blsb_bot, "%s added domain %s (%s) as type %d", cmdparams->source->name, dl->name, dl->domain, dl->type ); CommandReport( blsb_bot, "%s added domain %s (%s) as type %d", cmdparams->source->name, dl->name, dl->domain, dl->type );
return NS_SUCCESS; return NS_SUCCESS;
@ -460,9 +461,12 @@ static int load_dom( void *data, int size )
{ {
dom_list *dl; dom_list *dl;
dl = ns_calloc( sizeof(dom_list)); if( size == sizeof(dom_list) )
os_memcpy(dl, data, sizeof (dom_list)); {
lnode_create_append(blsb.domains, dl); dl = ns_calloc( sizeof(dom_list));
os_memcpy(dl, data, sizeof (dom_list));
lnode_create_append(blsb.domains, dl);
}
return NS_FALSE; return NS_FALSE;
} }
@ -482,7 +486,7 @@ static void load_default_bldomains( void )
default_domains = stddomlist; default_domains = stddomlist;
while( default_domains->type != BL_LOOKUP_TYPE_MIN ) while( default_domains->type != BL_LOOKUP_TYPE_MIN )
{ {
(void)new_bldomain( default_domains->name, default_domains->domain, default_domains->type, default_domains->msg ); (void)new_bldomain( default_domains->name, default_domains->domain, default_domains->type, default_domains->msg , default_domains->noban );
default_domains++; default_domains++;
} }
} }

1
blsb.h
View file

@ -40,6 +40,7 @@ typedef struct dom_list {
char domain[BUFSIZE]; char domain[BUFSIZE];
BL_LOOKUP_TYPE type; BL_LOOKUP_TYPE type;
char msg[BUFSIZE]; char msg[BUFSIZE];
int noban;
} dom_list; } dom_list;
typedef struct scanclient { typedef struct scanclient {

View file

@ -43,13 +43,14 @@ const char *blsb_help_check[] = {
const char *blsb_help_add[] = { const char *blsb_help_add[] = {
"Add to the blacklist domains", "Add to the blacklist domains",
"Syntax: \2ADD <domain> <type> <name>\2", "Syntax: \2ADD <domain> <type> <name> [NOBAN]\2",
"", "",
"Add a domain to the blacklist lookup list", "Add a domain to the blacklist lookup list",
"<type> 1 for TXT record lookups", "<type> 1 for TXT record lookups",
" 2 for A record lookups", " 2 for A record lookups",
"<domain> domain for lookups, e.g. opm.blitzed.org", "<domain> domain for lookups, e.g. opm.blitzed.org",
"<name> name to assign to this entry, e.g. Blitzed OPM", "<name> name to assign to this entry, e.g. Blitzed OPM",
"[NOBAN] does not ban if found, only inform the services channel",
NULL NULL
}; };