Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
BIND
Commits
412e6501
Commit
412e6501
authored
Mar 08, 2002
by
Mark Andrews
Browse files
rrset-order checks
parent
26de79b2
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib/bind9/check.c
View file @
412e6501
...
...
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: check.c,v 1.2
8
2002/03/0
4
0
5:27:29
marka Exp $ */
/* $Id: check.c,v 1.2
9
2002/03/0
8
0
0:54:48
marka Exp $ */
#include <config.h>
...
...
@@ -32,13 +32,114 @@
#include <isc/symtab.h>
#include <isc/util.h>
#include <dns/rdataclass.h>
#include <dns/fixedname.h>
#include <dns/rdataclass.h>
#include <dns/rdatatype.h>
#include <isccfg/cfg.h>
#include <bind9/check.h>
static
isc_result_t
check_orderent
(
cfg_obj_t
*
ent
,
isc_log_t
*
logctx
)
{
isc_result_t
result
=
ISC_R_SUCCESS
;
isc_result_t
tresult
;
isc_textregion_t
r
;
dns_fixedname_t
fixed
;
cfg_obj_t
*
obj
;
dns_rdataclass_t
rdclass
;
dns_rdatatype_t
rdtype
;
isc_buffer_t
b
;
const
char
*
str
;
dns_fixedname_init
(
&
fixed
);
obj
=
cfg_tuple_get
(
ent
,
"class"
);
if
(
cfg_obj_isstring
(
obj
))
{
DE_CONST
(
cfg_obj_asstring
(
obj
),
r
.
base
);
r
.
length
=
strlen
(
r
.
base
);
tresult
=
dns_rdataclass_fromtext
(
&
rdclass
,
&
r
);
if
(
tresult
!=
ISC_R_SUCCESS
)
{
cfg_obj_log
(
obj
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: invalid class '%s'"
,
r
.
base
);
result
=
ISC_R_FAILURE
;
}
}
obj
=
cfg_tuple_get
(
ent
,
"type"
);
if
(
cfg_obj_isstring
(
obj
))
{
DE_CONST
(
cfg_obj_asstring
(
obj
),
r
.
base
);
r
.
length
=
strlen
(
r
.
base
);
tresult
=
dns_rdatatype_fromtext
(
&
rdtype
,
&
r
);
if
(
tresult
!=
ISC_R_SUCCESS
)
{
cfg_obj_log
(
obj
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: invalid type '%s'"
,
r
.
base
);
result
=
ISC_R_FAILURE
;
}
}
obj
=
cfg_tuple_get
(
ent
,
"name"
);
if
(
cfg_obj_isstring
(
obj
))
{
str
=
cfg_obj_asstring
(
obj
);
isc_buffer_init
(
&
b
,
str
,
strlen
(
str
));
isc_buffer_add
(
&
b
,
strlen
(
str
));
tresult
=
dns_name_fromtext
(
dns_fixedname_name
(
&
fixed
),
&
b
,
dns_rootname
,
ISC_FALSE
,
NULL
);
if
(
tresult
!=
ISC_R_SUCCESS
)
{
cfg_obj_log
(
obj
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: invalid name '%s'"
,
str
);
result
=
ISC_R_FAILURE
;
}
}
obj
=
cfg_tuple_get
(
ent
,
"order"
);
if
(
!
cfg_obj_isstring
(
obj
)
||
strcasecmp
(
"order"
,
cfg_obj_asstring
(
obj
))
!=
0
)
{
cfg_obj_log
(
ent
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: keyword 'order' missing"
);
result
=
ISC_R_FAILURE
;
}
obj
=
cfg_tuple_get
(
ent
,
"ordering"
);
if
(
!
cfg_obj_isstring
(
obj
))
{
cfg_obj_log
(
ent
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: missing ordering"
);
result
=
ISC_R_FAILURE
;
}
else
if
(
strcasecmp
(
cfg_obj_asstring
(
obj
),
"fixed"
)
!=
0
&&
strcasecmp
(
cfg_obj_asstring
(
obj
),
"random"
)
!=
0
&&
strcasecmp
(
cfg_obj_asstring
(
obj
),
"cyclic"
)
!=
0
)
{
cfg_obj_log
(
obj
,
logctx
,
ISC_LOG_ERROR
,
"rrset-order: invalid order '%s'"
,
cfg_obj_asstring
(
obj
));
result
=
ISC_R_FAILURE
;
}
return
(
result
);
}
static
isc_result_t
check_order
(
cfg_obj_t
*
options
,
isc_log_t
*
logctx
)
{
isc_result_t
result
=
ISC_R_SUCCESS
;
isc_result_t
tresult
;
cfg_listelt_t
*
element
;
cfg_obj_t
*
obj
=
NULL
;
if
(
cfg_map_get
(
options
,
"rrset-order"
,
&
obj
)
!=
ISC_R_SUCCESS
)
return
(
result
);
for
(
element
=
cfg_list_first
(
obj
);
element
!=
NULL
;
element
=
cfg_list_next
(
element
))
{
tresult
=
check_orderent
(
cfg_listelt_value
(
element
),
logctx
);
if
(
tresult
!=
ISC_R_SUCCESS
)
result
=
tresult
;
}
return
(
result
);
}
static
isc_result_t
check_forward
(
cfg_obj_t
*
options
,
isc_log_t
*
logctx
)
{
cfg_obj_t
*
forward
=
NULL
;
...
...
@@ -581,6 +682,13 @@ check_viewconf(cfg_obj_t *config, cfg_obj_t *vconfig, dns_rdataclass_t vclass,
result
=
ISC_R_FAILURE
;
}
/*
* Check that rrset-order is reasonable.
*/
if
(
vconfig
!=
NULL
)
{
if
(
check_order
(
vconfig
,
logctx
)
!=
ISC_R_SUCCESS
)
result
=
ISC_R_FAILURE
;
}
if
(
vconfig
!=
NULL
)
{
(
void
)
cfg_map_get
(
vconfig
,
"server"
,
&
servers
);
...
...
@@ -625,6 +733,10 @@ bind9_check_namedconf(cfg_obj_t *config, isc_log_t *logctx, isc_mem_t *mctx) {
check_servers
(
servers
,
logctx
)
!=
ISC_R_SUCCESS
)
result
=
ISC_R_FAILURE
;
if
(
options
!=
NULL
&&
check_order
(
options
,
logctx
)
!=
ISC_R_SUCCESS
)
result
=
ISC_R_FAILURE
;
(
void
)
cfg_map_get
(
config
,
"view"
,
&
views
);
if
(
views
==
NULL
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment