unsigned long handles_per_email;
unsigned long email_search_level;
const char *network_name;
- const char *titlehost_suffix;
regex_t valid_handle_regex;
regex_t valid_nick_regex;
dict_t weak_password_dict;
unsigned long ounregister_flags;
} nickserv_conf;
+const char *titlehost_suffix = NULL;
+
/* We have 2^32 unique account IDs to use. */
unsigned long int highest_id = 0;
return buffer;
} else if (handle->fakehost[0] == '.') {
/* A leading dot indicates the stored value is actually a title. */
- snprintf(buffer, sizeof(buffer), "%s.%s.%s", handle->handle, handle->fakehost+1, nickserv_conf.titlehost_suffix);
+ snprintf(buffer, sizeof(buffer), "%s.%s.%s", handle->handle, handle->fakehost+1, titlehost_suffix);
return buffer;
}
return handle->fakehost;
char *mask;
struct userNode *settee;
struct handle_info *hi;
+ const char *pass, *email;
NICKSERV_MIN_PARMS(3);
+ pass = argv[2];
+ argv[2] = "****";
+
if (!is_valid_handle(argv[1])) {
reply("NSMSG_BAD_HANDLE", argv[1]);
return 0;
}
- if (argc < 4) {
+ if (argc < 5 || !nickserv_conf.email_enabled) {
+ email = NULL;
+ } else {
+ const char *str;
+ email = argv[4];
+ if (!is_valid_email_addr(email)) {
+ send_message(user, nickserv, "NSMSG_BAD_EMAIL_ADDR");
+ return 0;
+ }
+ if ((str = mail_prohibited_address(email))) {
+ send_message(user, nickserv, "NSMSG_EMAIL_PROHIBITED", email, str);
+ return 0;
+ }
+ }
+
+ if (argc < 4 || !strcmp(argv[3], "*")) {
mask = NULL;
settee = NULL;
} else if (strchr(argv[3], '@')) {
free(mask);
return 0;
}
- if (!(hi = nickserv_register(user, settee, argv[1], argv[2], 0))) {
+ if (!(hi = nickserv_register(user, settee, argv[1], pass, 0))) {
free(mask);
return 0;
}
if (mask)
string_list_append(hi->masks, mask);
+ if (email)
+ nickserv_set_email_addr(hi, email);
return 1;
}
}
if (hi->fakehost && hi->fakehost[0] == '.' &&
(strlen(argv[2]) + strlen(hi->fakehost+1) +
- strlen(nickserv_conf.titlehost_suffix) + 2) > HOSTLEN) {
+ strlen(titlehost_suffix) + 2) > HOSTLEN) {
send_message(user, nickserv, "NSMSG_TITLE_TRUNCATED_RENAME");
return 0;
}
return 0;
}
if ((strlen(user->handle_info->handle) + strlen(title) +
- strlen(nickserv_conf.titlehost_suffix) + 2) > HOSTLEN) {
+ strlen(titlehost_suffix) + 2) > HOSTLEN) {
send_message(user, nickserv, "NSMSG_TITLE_TRUNCATED");
return 0;
}
safestrncpy(mask, argv[1], sizeof(mask));
if ((host = strrchr(mask, '@')) && host != mask) {
- // If ident@host was used and the user doesn't have access to set idents, do not change anything.
+ /* If ident@host was used and the user doesn't have access to set idents, do not change anything. */
if (!oper_has_access(user, nickserv, nickserv_conf.set_fakeident_level, 0)) {
host = NULL;
ident = NULL;
str = database_get_data(conf_node, KEY_EMAIL_SEARCH_LEVEL, RECDB_QSTRING);
nickserv_conf.email_search_level = str ? strtoul(str, NULL, 0) : 600;
str = database_get_data(conf_node, KEY_TITLEHOST_SUFFIX, RECDB_QSTRING);
- nickserv_conf.titlehost_suffix = str ? str : "example.net";
+ titlehost_suffix = str ? str : "example.net";
str = conf_get_data("server/network", RECDB_QSTRING);
nickserv_conf.network_name = str ? str : "some IRC network";
if (!nickserv_conf.auth_policer_params) {
dict_insert(nickserv_opt_dict, "ACCESS", opt_level);
dict_insert(nickserv_opt_dict, "LEVEL", opt_level);
dict_insert(nickserv_opt_dict, "EPITHET", opt_epithet);
- if (nickserv_conf.titlehost_suffix) {
+ if (titlehost_suffix) {
dict_insert(nickserv_opt_dict, "TITLE", opt_title);
dict_insert(nickserv_opt_dict, "FAKEHOST", opt_fakehost);
dict_insert(nickserv_opt_dict, "FAKEIDENT", opt_fakeident);