+static OPTION_FUNC(opt_title)
+{
+ const char *title;
+
+ if (!override) {
+ send_message(user, nickserv, "MSG_SETTING_PRIVILEGED", argv[0]);
+ return 0;
+ }
+
+ if ((argc > 1) && oper_has_access(user, nickserv, nickserv_conf.set_title_level, 0)) {
+ title = argv[1];
+ if (strchr(title, '.')) {
+ send_message(user, nickserv, "NSMSG_TITLE_INVALID");
+ return 0;
+ }
+ free(hi->fakehost);
+ if (!strcmp(title, "*")) {
+ hi->fakehost = NULL;
+ } else {
+ hi->fakehost = malloc(strlen(title)+2);
+ hi->fakehost[0] = '.';
+ strcpy(hi->fakehost+1, title);
+ }
+ apply_fakehost(hi);
+ } else if (hi->fakehost && (hi->fakehost[0] == '.'))
+ title = hi->fakehost + 1;
+ else
+ title = NULL;
+ if (!title)
+ title = user_find_message(user, "MSG_NONE");
+ send_message(user, nickserv, "NSMSG_SET_TITLE", title);
+ return 1;
+}
+
+static OPTION_FUNC(opt_fakehost)
+{
+ const char *fake;
+
+ if (!override) {
+ send_message(user, nickserv, "MSG_SETTING_PRIVILEGED", argv[0]);
+ return 0;
+ }
+
+ if ((argc > 1) && oper_has_access(user, nickserv, nickserv_conf.set_fakehost_level, 0)) {
+ fake = argv[1];
+ if ((strlen(fake) > HOSTLEN) || (fake[0] == '.')) {
+ send_message(user, nickserv, "NSMSG_FAKEHOST_INVALID");
+ return 0;
+ }
+ free(hi->fakehost);
+ if (!strcmp(fake, "*"))
+ hi->fakehost = NULL;
+ else
+ hi->fakehost = strdup(fake);
+ fake = hi->fakehost;
+ apply_fakehost(hi);
+ } else
+ fake = generate_fakehost(hi);
+ if (!fake)
+ fake = user_find_message(user, "MSG_NONE");
+ send_message(user, nickserv, "NSMSG_SET_FAKEHOST", fake);
+ return 1;
+}
+