mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 23:25:38 +00:00
1666. [bug] The optional port on hostnames in dual-stack-servers
was being ignored. 1665. [func] rndc now allows addresses to be set in the server clauses.
This commit is contained in:
6
CHANGES
6
CHANGES
@@ -1,6 +1,8 @@
|
|||||||
1666. [placeholder] rt10838
|
1666. [bug] The optional port on hostnames in dual-stack-servers
|
||||||
|
was being ignored.
|
||||||
|
|
||||||
1665. [placeholder] rt10838
|
1665. [func] rndc now allows addresses to be set in the
|
||||||
|
server clauses.
|
||||||
|
|
||||||
1664. [bug] nsupdate needed KEY for SIG(0), not DNSKEY.
|
1664. [bug] nsupdate needed KEY for SIG(0), not DNSKEY.
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: server.c,v 1.427 2004/06/04 02:31:40 marka Exp $ */
|
/* $Id: server.c,v 1.428 2004/06/18 04:38:45 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@@ -1368,7 +1368,7 @@ configure_alternates(cfg_obj_t *config, dns_view_t *view,
|
|||||||
CHECK(dns_name_fromtext(name, &buffer, dns_rootname,
|
CHECK(dns_name_fromtext(name, &buffer, dns_rootname,
|
||||||
ISC_FALSE, NULL));
|
ISC_FALSE, NULL));
|
||||||
|
|
||||||
portobj = cfg_tuple_get(alternates, "port");
|
portobj = cfg_tuple_get(alternate, "port");
|
||||||
if (cfg_obj_isuint32(portobj)) {
|
if (cfg_obj_isuint32(portobj)) {
|
||||||
isc_uint32_t val = cfg_obj_asuint32(portobj);
|
isc_uint32_t val = cfg_obj_asuint32(portobj);
|
||||||
if (val > ISC_UINT16_MAX) {
|
if (val > ISC_UINT16_MAX) {
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: rndc.c,v 1.96 2004/03/05 04:58:20 marka Exp $ */
|
/* $Id: rndc.c,v 1.97 2004/06/18 04:38:46 marka Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Principal Author: DCL
|
* Principal Author: DCL
|
||||||
@@ -132,11 +132,12 @@ Version: %s\n",
|
|||||||
static void
|
static void
|
||||||
get_addresses(const char *host, in_port_t port) {
|
get_addresses(const char *host, in_port_t port) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
int found = 0, count;
|
||||||
|
|
||||||
isc_app_block();
|
count = SERVERADDRS - nserveraddrs;
|
||||||
result = bind9_getaddresses(servername, port,
|
result = bind9_getaddresses(host, port, &serveraddrs[nserveraddrs],
|
||||||
serveraddrs, SERVERADDRS, &nserveraddrs);
|
count, &found);
|
||||||
isc_app_unblock();
|
nserveraddrs += found;
|
||||||
if (result != ISC_R_SUCCESS)
|
if (result != ISC_R_SUCCESS)
|
||||||
fatal("couldn't get address for '%s': %s",
|
fatal("couldn't get address for '%s': %s",
|
||||||
host, isc_result_totext(result));
|
host, isc_result_totext(result));
|
||||||
@@ -365,8 +366,6 @@ static void
|
|||||||
rndc_start(isc_task_t *task, isc_event_t *event) {
|
rndc_start(isc_task_t *task, isc_event_t *event) {
|
||||||
isc_event_free(&event);
|
isc_event_free(&event);
|
||||||
|
|
||||||
get_addresses(servername, (in_port_t) remoteport);
|
|
||||||
|
|
||||||
currentaddr = 0;
|
currentaddr = 0;
|
||||||
rndc_startconnect(&serveraddrs[currentaddr++], task);
|
rndc_startconnect(&serveraddrs[currentaddr++], task);
|
||||||
}
|
}
|
||||||
@@ -377,6 +376,7 @@ parse_config(isc_mem_t *mctx, isc_log_t *log, const char *keyname,
|
|||||||
{
|
{
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
const char *conffile = admin_conffile;
|
const char *conffile = admin_conffile;
|
||||||
|
cfg_obj_t *addresses = NULL;
|
||||||
cfg_obj_t *defkey = NULL;
|
cfg_obj_t *defkey = NULL;
|
||||||
cfg_obj_t *options = NULL;
|
cfg_obj_t *options = NULL;
|
||||||
cfg_obj_t *servers = NULL;
|
cfg_obj_t *servers = NULL;
|
||||||
@@ -393,6 +393,7 @@ parse_config(isc_mem_t *mctx, isc_log_t *log, const char *keyname,
|
|||||||
static char secretarray[1024];
|
static char secretarray[1024];
|
||||||
const cfg_type_t *conftype = &cfg_type_rndcconf;
|
const cfg_type_t *conftype = &cfg_type_rndcconf;
|
||||||
isc_boolean_t key_only = ISC_FALSE;
|
isc_boolean_t key_only = ISC_FALSE;
|
||||||
|
cfg_listelt_t *element;
|
||||||
|
|
||||||
if (! isc_file_exists(conffile)) {
|
if (! isc_file_exists(conffile)) {
|
||||||
conffile = admin_keyfile;
|
conffile = admin_keyfile;
|
||||||
@@ -510,10 +511,62 @@ parse_config(isc_mem_t *mctx, isc_log_t *log, const char *keyname,
|
|||||||
if (defport != NULL) {
|
if (defport != NULL) {
|
||||||
remoteport = cfg_obj_asuint32(defport);
|
remoteport = cfg_obj_asuint32(defport);
|
||||||
if (remoteport > 65535 || remoteport == 0)
|
if (remoteport > 65535 || remoteport == 0)
|
||||||
fatal("port %d out of range", remoteport);
|
fatal("port %u out of range", remoteport);
|
||||||
} else if (remoteport == 0)
|
} else if (remoteport == 0)
|
||||||
remoteport = NS_CONTROL_PORT;
|
remoteport = NS_CONTROL_PORT;
|
||||||
|
|
||||||
|
if (server != NULL)
|
||||||
|
result = cfg_map_get(server, "addresses", &addresses);
|
||||||
|
else
|
||||||
|
result = ISC_R_NOTFOUND;
|
||||||
|
if (result == ISC_R_SUCCESS) {
|
||||||
|
for (element = cfg_list_first(addresses);
|
||||||
|
element != NULL;
|
||||||
|
element = cfg_list_next(element))
|
||||||
|
{
|
||||||
|
|
||||||
|
cfg_obj_t *address = cfg_listelt_value(element);
|
||||||
|
isc_sockaddr_t sa;
|
||||||
|
|
||||||
|
if (!cfg_obj_issockaddr(address)) {
|
||||||
|
unsigned int myport;
|
||||||
|
const char *name;
|
||||||
|
cfg_obj_t *obj;
|
||||||
|
|
||||||
|
obj = cfg_tuple_get(address, "name");
|
||||||
|
name = cfg_obj_asstring(obj);
|
||||||
|
obj = cfg_tuple_get(address, "port");
|
||||||
|
if (cfg_obj_isuint32(obj)) {
|
||||||
|
myport = cfg_obj_asuint32(obj);
|
||||||
|
if (myport > ISC_UINT16_MAX ||
|
||||||
|
myport == 0)
|
||||||
|
fatal("port %u out of range",
|
||||||
|
myport);
|
||||||
|
} else
|
||||||
|
myport = remoteport;
|
||||||
|
if (nserveraddrs < SERVERADDRS)
|
||||||
|
get_addresses(name, (in_port_t) myport);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "too many address: "
|
||||||
|
"%s: dropped\n", name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sa = *cfg_obj_assockaddr(address);
|
||||||
|
if (isc_sockaddr_getport(&sa) == 0)
|
||||||
|
isc_sockaddr_setport(&sa, remoteport);
|
||||||
|
if (nserveraddrs < SERVERADDRS)
|
||||||
|
serveraddrs[nserveraddrs++] = sa;
|
||||||
|
else {
|
||||||
|
char socktext[ISC_SOCKADDR_FORMATSIZE];
|
||||||
|
|
||||||
|
isc_sockaddr_format(&sa, socktext,
|
||||||
|
sizeof(socktext));
|
||||||
|
fprintf(stderr,
|
||||||
|
"too many address: %s: dropped\n",
|
||||||
|
socktext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
*configp = config;
|
*configp = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,6 +707,9 @@ main(int argc, char **argv) {
|
|||||||
if (strcmp(command, "restart") == 0)
|
if (strcmp(command, "restart") == 0)
|
||||||
fatal("'%s' is not implemented", command);
|
fatal("'%s' is not implemented", command);
|
||||||
|
|
||||||
|
if (nserveraddrs == 0)
|
||||||
|
get_addresses(servername, (in_port_t) remoteport);
|
||||||
|
|
||||||
DO("post event", isc_app_onrun(mctx, task, rndc_start, NULL));
|
DO("post event", isc_app_onrun(mctx, task, rndc_start, NULL));
|
||||||
|
|
||||||
result = isc_app_run();
|
result = isc_app_run();
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: rndc.conf,v 1.8 2004/03/05 04:58:20 marka Exp $ */
|
/* $Id: rndc.conf,v 1.9 2004/06/18 04:38:46 marka Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sample rndc configuration file.
|
* Sample rndc configuration file.
|
||||||
@@ -30,6 +30,17 @@ server localhost {
|
|||||||
key "key";
|
key "key";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
key "cc64b3d1db63fc88d7cb5d2f9f57d258" {
|
||||||
|
algorithm hmac-md5;
|
||||||
|
secret "34f88008d07deabbe65bd01f1d233d47";
|
||||||
|
};
|
||||||
|
|
||||||
|
server "test1" {
|
||||||
|
key "cc64b3d1db63fc88d7cb5d2f9f57d258";
|
||||||
|
port 5353;
|
||||||
|
addresses { 10.53.0.1; };
|
||||||
|
};
|
||||||
|
|
||||||
key "key" {
|
key "key" {
|
||||||
algorithm hmac-md5;
|
algorithm hmac-md5;
|
||||||
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
|
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
- PERFORMANCE OF THIS SOFTWARE.
|
- PERFORMANCE OF THIS SOFTWARE.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- $Id: rndc.conf.docbook,v 1.6 2004/06/03 02:22:33 marka Exp $ -->
|
<!-- $Id: rndc.conf.docbook,v 1.7 2004/06/18 04:38:47 marka Exp $ -->
|
||||||
|
|
||||||
<refentry>
|
<refentry>
|
||||||
<refentryinfo>
|
<refentryinfo>
|
||||||
@@ -86,12 +86,15 @@
|
|||||||
will be used to connect.
|
will be used to connect.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
After the <option>server</option> keyword, the server statement
|
After the <option>server</option> keyword, the server
|
||||||
includes a string which is the hostname or address for a name
|
statement includes a string which is the hostname or address
|
||||||
server. The statement has two possible clauses:
|
for a name server. The statement has three possible clauses:
|
||||||
<option>key</option> and <option>port</option>. The key name must
|
<option>key</option>, <option>port</option> and
|
||||||
match the name of a key statement in the file. The port number
|
<option>addresses</option>. The key name must match the
|
||||||
specifies the port to connect to.
|
name of a key statement in the file. The port number
|
||||||
|
specifies the port to connect to. If an <option>addresses</option>
|
||||||
|
clause is supplied these addresses will be used instead of
|
||||||
|
the server name. Each address can take a optional port.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The <option>key</option> statement begins with an identifying
|
The <option>key</option> statement begins with an identifying
|
||||||
@@ -127,10 +130,20 @@
|
|||||||
key samplekey;
|
key samplekey;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
server testserver {
|
||||||
|
key testkey;
|
||||||
|
addresses { localhost port 5353; };
|
||||||
|
};
|
||||||
|
|
||||||
key samplekey {
|
key samplekey {
|
||||||
algorithm hmac-md5;
|
algorithm hmac-md5;
|
||||||
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
|
secret "6FMfj43Osz4lyb24OIe2iGEz9lf1llJO+lz";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
key testkey {
|
||||||
|
algorithm hmac-md5;
|
||||||
|
secret "R3HI8P6BKw9ZwXwN3VZKuQ==";
|
||||||
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -142,6 +155,10 @@
|
|||||||
uses the HMAC-MD5 algorithm and its secret clause contains the
|
uses the HMAC-MD5 algorithm and its secret clause contains the
|
||||||
base-64 encoding of the HMAC-MD5 secret enclosed in double quotes.
|
base-64 encoding of the HMAC-MD5 secret enclosed in double quotes.
|
||||||
</para>
|
</para>
|
||||||
|
<para>
|
||||||
|
If <command>rndc -s testserver</command> is used then <command>rndc</command> will
|
||||||
|
connect to server on localhost port 5353 using the key testkey.
|
||||||
|
</para>
|
||||||
<para>
|
<para>
|
||||||
To generate a random secret with <command>rndc-confgen</command>:
|
To generate a random secret with <command>rndc-confgen</command>:
|
||||||
</para>
|
</para>
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: namedconf.c,v 1.34 2004/06/04 02:31:43 marka Exp $ */
|
/* $Id: namedconf.c,v 1.35 2004/06/18 04:38:45 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@@ -70,6 +70,7 @@ static cfg_type_t cfg_type_acl;
|
|||||||
static cfg_type_t cfg_type_addrmatchelt;
|
static cfg_type_t cfg_type_addrmatchelt;
|
||||||
static cfg_type_t cfg_type_bracketed_aml;
|
static cfg_type_t cfg_type_bracketed_aml;
|
||||||
static cfg_type_t cfg_type_bracketed_namesockaddrkeylist;
|
static cfg_type_t cfg_type_bracketed_namesockaddrkeylist;
|
||||||
|
static cfg_type_t cfg_type_bracketed_sockaddrnameportlist;
|
||||||
static cfg_type_t cfg_type_bracketed_sockaddrlist;
|
static cfg_type_t cfg_type_bracketed_sockaddrlist;
|
||||||
static cfg_type_t cfg_type_controls;
|
static cfg_type_t cfg_type_controls;
|
||||||
static cfg_type_t cfg_type_controls_sockaddr;
|
static cfg_type_t cfg_type_controls_sockaddr;
|
||||||
@@ -1708,6 +1709,7 @@ static cfg_clausedef_t
|
|||||||
rndcconf_server_clauses[] = {
|
rndcconf_server_clauses[] = {
|
||||||
{ "key", &cfg_type_astring, 0 },
|
{ "key", &cfg_type_astring, 0 },
|
||||||
{ "port", &cfg_type_uint32, 0 },
|
{ "port", &cfg_type_uint32, 0 },
|
||||||
|
{ "addresses", &cfg_type_bracketed_sockaddrnameportlist, 0 },
|
||||||
{ NULL, NULL, 0 }
|
{ NULL, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user