%token AUTOCONNECT
%token PROGRAM
%token TOK_IPV4 TOK_IPV6
+%token DNS
/* and now a lot of privileges... */
%token TPRIV_CHAN_LIMIT TPRIV_MODE_LCHAN TPRIV_DEOP_LCHAN TPRIV_WALK_LCHAN
%token TPRIV_LOCAL_KILL TPRIV_REHASH TPRIV_RESTART TPRIV_DIE
parse_error("Your General block must contain a numeric (between 1 and 4095).");
};
generalitems: generalitem generalitems | generalitem;
-generalitem: generalnumeric | generalname | generalvhost | generaldesc;
+generalitem: generalnumeric | generalname | generalvhost | generaldesc
+ | generaldnsvhost | generaldnsserver;
+
generalnumeric: NUMERIC '=' NUMBER ';'
{
if (localConf.numeric == 0)
MyFree(vhost);
};
+generaldnsvhost: DNS VHOST '=' address_family QSTRING ';'
+{
+ struct irc_in_addr addr;
+ int families = $4;
+ char *vhost = $5;
+
+ if (!strcmp(vhost, "*")) {
+ /* Let the operating system assign the default. */
+ } else if (!ircd_aton(&addr, vhost))
+ parse_error("Invalid DNS virtual host '%s'.", vhost);
+ else
+ {
+ if ((families & USE_IPV4)
+ || (!families && irc_in_addr_is_ipv4(&addr)))
+ memcpy(&VirtualHost_dns_v4.addr, &addr, sizeof(addr));
+ if ((families & USE_IPV6)
+ || (!families && !irc_in_addr_is_ipv4(&addr)))
+ memcpy(&VirtualHost_dns_v6.addr, &addr, sizeof(addr));
+ }
+ MyFree(vhost);
+};
+
+generaldnsserver: DNS SERVER '=' QSTRING ';'
+{
+ char *server = $4;
+
+ add_nameserver(server);
+ MyFree(server);
+};
+
adminblock: ADMIN
{
MyFree(localConf.location1);