* kicknorejoin (+J in inspircd chmode)
* operoverride umode (+p), steal this from ircd-seven
* immune cmode (+M), steal this from ircd-seven too
-* host-on-operup: vhost that gets applied to you on oper-up. A surprising number of people want this.
* Anything else we think of between now and release. :P
Todo list for ShadowIRCd 6.1
*/
snomask = "+Zbfkrsuy";
+ /* vhost: defines the vhost that this oper will get on oper up.
+ * this must be a valid hostmask. If this is specified the oper
+ * will not be given default_operhost.
+ */
+ vhost = "is.an.oper";
+
/* flags: misc options for the operator. You may prefix an option
* with ~ to disable it, e.g. ~encrypted.
*
yy_tmpoper->flags = yy_oper->flags;
yy_tmpoper->umodes = yy_oper->umodes;
yy_tmpoper->snomask = yy_oper->snomask;
+ if(valid_hostname(yy_oper->vhost))
+ yy_tmpoper->vhost = rb_strdup(yy_oper->vhost);
+ else
+ conf_report_error("Ignoring vhost setting for oper %s -- invalid hostmask.", yy_oper->name);
yy_tmpoper->privset = yy_oper->privset;
#ifdef HAVE_LIBCRYPTO
yy_oper->snomask = parse_snobuf_to_mask(0, (const char *) data);
}
+static void
+conf_set_oper_vhost(void *data)
+{
+ yy_oper->vhost = rb_strdup((char *) data);
+}
+
static int
conf_begin_class(struct TopConf *tc)
{
{ "umodes", CF_STRING | CF_FLIST, conf_set_oper_umodes, 0, NULL },
{ "privset", CF_QSTRING, conf_set_oper_privset, 0, NULL },
{ "snomask", CF_QSTRING, conf_set_oper_snomask, 0, NULL },
+ { "vhost", CF_QSTRING, conf_set_oper_vhost, 0, NULL },
{ "user", CF_QSTRING, conf_set_oper_user, 0, NULL },
{ "password", CF_QSTRING, conf_set_oper_password, 0, NULL },
{ "fingerprint", CF_QSTRING, conf_set_oper_fingerprint, 0, NULL },
else
source_p->umodes |= DEFAULT_OPER_UMODES;
- if(!EmptyString(ConfigFileEntry.default_operhost))
+ if(oper_p->vhost || !EmptyString(ConfigFileEntry.default_operhost))
{
- change_nick_user_host(source_p, source_p->name, source_p->username, ConfigFileEntry.default_operhost, 0, "Changing host");
+ if(oper_p->vhost)
+ change_nick_user_host(source_p, source_p->name, source_p->username, oper_p->vhost, 0, "Changing host");
+ else
+ change_nick_user_host(source_p, source_p->name, source_p->username, ConfigFileEntry.default_operhost, 0, "Changing host");
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host (set by %s)", source_p->host, source_p->servptr->name);