X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fircd_parser.y;h=29b14ef6fef7a441088cf140aaf2868bcba2871c;hb=451a8eb6a969eae7e5f7f0d1b565ea96c6b160f1;hp=2c0dddcabe0d7c26b298a899c4ffdcb10a2fbd22;hpb=f3e9ec2fae92670731ddfa83ef46247553c3dfce;p=ircu2.10.12-pk.git diff --git a/ircd/ircd_parser.y b/ircd/ircd_parser.y index 2c0dddc..29b14ef 100644 --- a/ircd/ircd_parser.y +++ b/ircd/ircd_parser.y @@ -163,6 +163,7 @@ static void parse_error(char *pattern,...) { %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 @@ -283,7 +284,9 @@ generalblock: GENERAL 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) @@ -329,6 +332,36 @@ generalvhost: VHOST '=' QSTRING ';' 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);