X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/7827220c933cf2fd53437d1285b639a49b213508..075d79322a27a1e04807a9f4b85a52c7eb7c3ede:/src/nickserv.c diff --git a/src/nickserv.c b/src/nickserv.c index 3cb6992..de36d24 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -889,11 +889,28 @@ reg_handle_rename_func(handle_rename_func_t func) static char * generate_fakehost(struct handle_info *handle) { + struct userNode *target; extern const char *hidden_host_suffix; static char buffer[HOSTLEN+1]; + char *data; + int style = 1; if (!handle->fakehost) { - snprintf(buffer, sizeof(buffer), "%s.%s", handle->handle, hidden_host_suffix); + data = conf_get_data("server/hidden_host_type", RECDB_QSTRING); + if (data) + style = atoi(data); + + if (style == 1) + snprintf(buffer, sizeof(buffer), "%s.%s", handle->handle, hidden_host_suffix); + else if (style == 2) { + /* Due to the way fakehost is coded theres no way i can + get the exact user, so for now ill just take the first + authed user. */ + for (target = handle->users; target; target = target->next_authed) + break; + + snprintf(buffer, sizeof(buffer), "%s", target->crypthost); + } return buffer; } else if (handle->fakehost[0] == '.') { /* A leading dot indicates the stored value is actually a title. */ @@ -2151,6 +2168,32 @@ static NICKSERV_FUNC(cmd_odelcookie) return 0; } + switch (hi->cookie->type) { + case ACTIVATION: + safestrncpy(hi->passwd, hi->cookie->data, sizeof(hi->passwd)); + if (nickserv_conf.sync_log) + SyncLog("ACCOUNTACC %s", hi->handle); + break; + case PASSWORD_CHANGE: + safestrncpy(hi->passwd, hi->cookie->data, sizeof(hi->passwd)); + if (nickserv_conf.sync_log) + SyncLog("PASSCHANGE %s %s", hi->handle, hi->passwd); + break; + case EMAIL_CHANGE: + if (!hi->email_addr && nickserv_conf.sync_log) { + if (nickserv_conf.sync_log) + SyncLog("REGISTER %s %s %s %s", hi->handle, hi->passwd, hi->cookie->data, user->info); + } + nickserv_set_email_addr(hi, hi->cookie->data); + if (nickserv_conf.sync_log) + SyncLog("EMAILCHANGE %s %s", hi->handle, hi->cookie->data); + break; + default: + reply("NSMSG_BAD_COOKIE_TYPE", hi->cookie->type); + log_module(NS_LOG, LOG_ERROR, "Bad cookie type %d for account %s.", hi->cookie->type, hi->handle); + break; + } + nickserv_eat_cookie(hi->cookie); reply("NSMSG_ATE_FOREIGN_COOKIE", hi->handle);