From: NurPech Date: Sun, 1 Sep 2013 12:52:36 +0000 (+0200) Subject: add id field to cmd_search X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=42166bcae4eb1a4e3a50244698ebd14e8c64e93c add id field to cmd_search --- diff --git a/src/nickserv.c b/src/nickserv.c index 089cc93..15c5743 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -3704,8 +3704,9 @@ static NICKSERV_FUNC(cmd_merge) #define NICKSERV_DISCRIM_FIELDS_FAKEHOST 0x10 #define NICKSERV_DISCRIM_FIELDS_WEBSITE 0x20 #define NICKSERV_DISCRIM_FIELDS_DEVNULL 0x40 +#define NICKSERV_DISCRIM_FIELDS_ID 0x80 -#define NICKSERV_DISCRIM_FIELD_COUNT 7 +#define NICKSERV_DISCRIM_FIELD_COUNT 8 struct nickserv_discrim { unsigned int show_fields; @@ -3718,6 +3719,7 @@ struct nickserv_discrim { unsigned long lastseen; unsigned int limit; int min_level, max_level; + unsigned int min_id, max_id; int min_karma, max_karma; enum { SUBSET, EXACT, SUPERSET, LASTQUIT } hostmask_type; const char *nickmask; @@ -3756,6 +3758,9 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[]) discrim->lastseen = ULONG_MAX; discrim->min_karma = INT_MIN; discrim->max_karma = INT_MAX; + discrim->min_id = 0; + discrim->max_id = INT_MAX; + for (i=0; ishow_fields |= NICKSERV_DISCRIM_FIELDS_SEEN; else if(!irccasecmp(fields, "access")) discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ACCESS; + else if(!irccasecmp(fields, "id")) + discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ID; else if(!irccasecmp(fields, "fakehost")) discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_FAKEHOST; else if(!irccasecmp(fields, "website") && IsBot(user)) @@ -3920,6 +3927,26 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[]) } else { send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp); } + } else if (!irccasecmp(argv[i], "id")) { + const char *cmp = argv[++i]; + if (cmp[0] == '<') { + if (discrim->min_id == 0) discrim->min_id = 1; + if (cmp[1] == '=') { + discrim->max_id = strtoul(cmp+2, NULL, 0); + } else { + discrim->max_id = strtoul(cmp+1, NULL, 0) - 1; + } + } else if (cmp[0] == '=') { + discrim->min_id = discrim->max_id = strtoul(cmp+1, NULL, 0); + } else if (cmp[0] == '>') { + if (cmp[1] == '=') { + discrim->min_id = strtoul(cmp+2, NULL, 0); + } else { + discrim->min_id = strtoul(cmp+1, NULL, 0) + 1; + } + } else { + send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp); + } } else if (!irccasecmp(argv[i], "karma")) { const char *cmp = argv[++i]; if (cmp[0] == '<') { @@ -3966,6 +3993,8 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi) || (discrim->emailmask && (!hi->email_addr || !match_ircglob(hi->email_addr, discrim->emailmask))) || (discrim->min_level > hi->opserv_level) || (discrim->max_level < hi->opserv_level) + || (discrim->min_id > hi->id) + || (discrim->max_id < hi->id) || (discrim->min_karma > hi->karma) || (discrim->max_karma < hi->karma) ) { @@ -4042,6 +4071,8 @@ search_print_func(struct userNode *source, struct handle_info *match, struct nic } if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS) discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->opserv_level); + if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID) + discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->id); if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST) discrim->output_table->contents[discrim->output_table_pos][i++] = (match->fakehost ? match->fakehost : "*"); if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE) @@ -4176,6 +4207,8 @@ static NICKSERV_FUNC(cmd_search) discrim->output_table->contents[0][ii++] = "Seen"; if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS) discrim->output_table->contents[0][ii++] = "Access"; + if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID) + discrim->output_table->contents[0][ii++] = "ID"; if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST) discrim->output_table->contents[0][ii++] = "Fakehost"; if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE)