From 363a57c547450ceb30887f133578567e06e32db6 Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 8 Jul 2011 01:20:19 +0200 Subject: [PATCH] added field called "website" to the handle info (only accessible by bots) --- src/nickserv.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/nickserv.h | 1 + 2 files changed, 46 insertions(+) diff --git a/src/nickserv.c b/src/nickserv.c index 7911034..6c621bc 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -85,6 +85,7 @@ #define KEY_REGISTER_ON "register" #define KEY_LAST_SEEN "lastseen" #define KEY_INFO "info" +#define KEY_WEBSITE "website" #define KEY_USERLIST_STYLE "user_style" #define KEY_SCREEN_WIDTH "screen_width" #define KEY_LAST_AUTHED_HOST "last_authed_host" @@ -212,6 +213,7 @@ static const struct message_entry msgtab[] = { { "NSMSG_HANDLEINFO_COOKIE_ALLOWAUTH", " Cookie: There is currently an allowauth cookie issued for this account" }, { "NSMSG_HANDLEINFO_COOKIE_UNKNOWN", " Cookie: There is currently an unknown cookie issued for this account" }, { "NSMSG_HANDLEINFO_INFOLINE", " Infoline: %s" }, + { "NSMSG_HANDLEINFO_WEBSITE", " Website: %s" }, { "NSMSG_HANDLEINFO_FLAGS", " Flags: %s" }, { "NSMSG_HANDLEINFO_EPITHET", " Epithet: %s" }, { "NSMSG_HANDLEINFO_FAKEIDENT", " Fake ident: %s" }, @@ -305,6 +307,7 @@ static const struct message_entry msgtab[] = { { "NSMSG_SETTING_LIST", "$b$N account settings:$b" }, { "NSMSG_INVALID_OPTION", "$b%s$b is an invalid account setting." }, { "NSMSG_SET_INFO", "$bINFO: $b%s" }, + { "NSMSG_SET_WEBSITE", "$bWEBSITE: $b%s" }, { "NSMSG_SET_WIDTH", "$bWIDTH: $b%d" }, { "NSMSG_SET_TABLEWIDTH", "$bTABLEWIDTH: $b%d" }, { "NSMSG_SET_COLOR", "$bCOLOR: $b%s" }, @@ -463,6 +466,7 @@ register_handle(const char *handle, const char *passwd, unsigned long id) dict_insert(nickserv_handle_dict, hi->handle, hi); hi->id = id; + hi->website = NULL; dict_insert(nickserv_id_dict, strdup(id_base64), hi); return hi; @@ -549,6 +553,7 @@ free_handle_info(void *vhi) free(hi->infoline); free(hi->epithet); free(hi->fakehost); + free(hi->website); free(hi->fakeident); if (hi->cookie) { timeq_del(hi->cookie->expires, nickserv_free_cookie, hi->cookie, 0); @@ -1399,6 +1404,8 @@ static NICKSERV_FUNC(cmd_handleinfo) } reply("NSMSG_HANDLEINFO_INFOLINE", (hi->infoline ? hi->infoline : nsmsg_none)); + if (user->handle_info && HANDLE_FLAGGED(user->handle_info, BOT)) + reply("NSMSG_HANDLEINFO_WEBSITE", (hi->website ? hi->website : nsmsg_none)); if (HANDLE_FLAGGED(hi, FROZEN)) reply("NSMSG_HANDLEINFO_VACATION"); @@ -2351,6 +2358,30 @@ static OPTION_FUNC(opt_info) return 1; } +static OPTION_FUNC(opt_website) +{ + const char *website; + + if (argc > 1) { + if (!HANDLE_FLAGGED(user->handle_info, BOT)) { + send_message(user, nickserv, "MSG_SETTING_PRIVILEGED", argv[0]); + return 0; + } + if ((argv[1][0] == '*') && (argv[1][1] == 0)) { + free(hi->website); + hi->website = NULL; + } else { + website = unsplit_string(argv+1, argc-1, NULL); + hi->website = strdup(website); + } + } + if (HANDLE_FLAGGED(user->handle_info, BOT)) { + website = hi->website ? hi->website : user_find_message(user, "MSG_NONE"); + send_message(user, nickserv, "NSMSG_SET_WEBSITE", website); + } + return 1; +} + static OPTION_FUNC(opt_width) { if (argc > 1) @@ -3079,6 +3110,8 @@ nickserv_saxdb_write(struct saxdb_context *ctx) { saxdb_write_int(ctx, KEY_ID, hi->id); if (hi->infoline) saxdb_write_string(ctx, KEY_INFO, hi->infoline); + if (hi->website) + saxdb_write_string(ctx, KEY_WEBSITE, hi->website); if (hi->last_quit_host[0]) saxdb_write_string(ctx, KEY_LAST_QUIT_HOST, hi->last_quit_host); saxdb_write_int(ctx, KEY_LAST_SEEN, hi->lastseen); @@ -3268,6 +3301,7 @@ struct nickserv_discrim { const char *hostmask; const char *fakehostmask; const char *fakeidentmask; + const char *website; const char *handlemask; const char *emailmask; }; @@ -3373,6 +3407,12 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[]) } else { discrim->fakeidentmask = argv[i]; } + } else if (!irccasecmp(argv[i], "website")) { + if (!irccasecmp(argv[++i], "*")) { + discrim->website = 0; + } else { + discrim->website = argv[i]; + } } else if (!irccasecmp(argv[i], "handlemask") || !irccasecmp(argv[i], "accountmask")) { if (!irccasecmp(argv[++i], "*")) { discrim->handlemask = 0; @@ -3449,6 +3489,7 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi) || (discrim->handlemask && !match_ircglob(hi->handle, discrim->handlemask)) || (discrim->fakehostmask && (!hi->fakehost || !match_ircglob(hi->fakehost, discrim->fakehostmask))) || (discrim->fakeidentmask && (!hi->fakeident || !match_ircglob(hi->fakeident, discrim->fakeidentmask))) + || (discrim->website && (!hi->website || !match_ircglob(hi->website, discrim->website))) || (discrim->emailmask && (!hi->email_addr || !match_ircglob(hi->email_addr, discrim->emailmask))) || (discrim->min_level > hi->opserv_level) || (discrim->max_level < hi->opserv_level) @@ -3695,6 +3736,9 @@ nickserv_db_read_handle(const char *handle, dict_t obj) str = database_get_data(obj, KEY_INFO, RECDB_QSTRING); if (str) hi->infoline = strdup(str); + str = database_get_data(obj, KEY_WEBSITE, RECDB_QSTRING); + if (str) + hi->website = strdup(str); str = database_get_data(obj, KEY_REGISTER_ON, RECDB_QSTRING); hi->registered = str ? strtoul(str, NULL, 0) : now; str = database_get_data(obj, KEY_LAST_SEEN, RECDB_QSTRING); @@ -4322,6 +4366,7 @@ init_nickserv(const char *nick) dict_insert(nickserv_opt_dict, "PASS", opt_password); dict_insert(nickserv_opt_dict, "PASSWORD", opt_password); dict_insert(nickserv_opt_dict, "FLAGS", opt_flags); + dict_insert(nickserv_opt_dict, "WEBSITE", opt_website); dict_insert(nickserv_opt_dict, "ACCESS", opt_level); dict_insert(nickserv_opt_dict, "LEVEL", opt_level); dict_insert(nickserv_opt_dict, "EPITHET", opt_epithet); diff --git a/src/nickserv.h b/src/nickserv.h index 6d6bcd5..f32e23e 100644 --- a/src/nickserv.h +++ b/src/nickserv.h @@ -92,6 +92,7 @@ struct handle_info { struct handle_cookie *cookie; struct handle_note *notes; struct language *language; + char *website; char *email_addr; char *epithet; char *infoline; -- 2.20.1