ipsec-types: Restrict the use of %unique and other keywords when parsing marks
%unique (and the upcoming %same key) are usable in specific contexts only. To restrict the user from using it in other places where it does not get the expected results, reject such keywords unless explicitly allowed.
This commit is contained in:
committed by
Tobias Brunner
parent
b9aacf9adc
commit
ebd2d3877e
@@ -860,47 +860,69 @@ END_TEST
|
||||
static struct {
|
||||
char *s;
|
||||
bool ok;
|
||||
mark_op_t ops;
|
||||
mark_t m;
|
||||
} mark_data[] = {
|
||||
{NULL, FALSE, { 0 }},
|
||||
{"", TRUE, { 0, 0xffffffff }},
|
||||
{"/", TRUE, { 0, 0 }},
|
||||
{"42", TRUE, { 42, 0xffffffff }},
|
||||
{"0x42", TRUE, { 0x42, 0xffffffff }},
|
||||
{"x", FALSE, { 0 }},
|
||||
{"42/", TRUE, { 0, 0 }},
|
||||
{"42/0", TRUE, { 0, 0 }},
|
||||
{"42/x", FALSE, { 0 }},
|
||||
{"42/42", TRUE, { 42, 42 }},
|
||||
{"42/0xff", TRUE, { 42, 0xff }},
|
||||
{"0x42/0xff", TRUE, { 0x42, 0xff }},
|
||||
{"/0xff", TRUE, { 0, 0xff }},
|
||||
{"/x", FALSE, { 0 }},
|
||||
{"x/x", FALSE, { 0 }},
|
||||
{"0xfffffff0/0x0000ffff", TRUE, { 0x0000fff0, 0x0000ffff }},
|
||||
{"%unique", TRUE, { MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique/", TRUE, { MARK_UNIQUE, 0 }},
|
||||
{"%unique/0x0000ffff", TRUE, { MARK_UNIQUE, 0x0000ffff }},
|
||||
{"%unique/0xffffffff", TRUE, { MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique0xffffffffff", FALSE, { 0, 0 }},
|
||||
{"0xffffffff/0x0000ffff", TRUE, { MARK_UNIQUE, 0x0000ffff }},
|
||||
{"0xffffffff/0xffffffff", TRUE, { MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique-dir", TRUE, { MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-dir/", TRUE, { MARK_UNIQUE_DIR, 0 }},
|
||||
{"%unique-dir/0x0000ffff", TRUE, { MARK_UNIQUE_DIR, 0x0000ffff }},
|
||||
{"%unique-dir/0xffffffff", TRUE, { MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-dir0xffffffff", FALSE, { 0, 0 }},
|
||||
{"0xfffffffe/0x0000ffff", TRUE, { MARK_UNIQUE_DIR, 0x0000ffff }},
|
||||
{"0xfffffffe/0xffffffff", TRUE, { MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-/0xffffffff", FALSE, { 0, 0 }},
|
||||
{"%unique-foo/0xffffffff", FALSE, { 0, 0 }},
|
||||
{NULL, FALSE, MARK_OP_NONE, { 0 }},
|
||||
{"", TRUE, MARK_OP_NONE, { 0, 0xffffffff }},
|
||||
{"/", TRUE, MARK_OP_NONE, { 0, 0 }},
|
||||
{"42", TRUE, MARK_OP_NONE, { 42, 0xffffffff }},
|
||||
{"0x42", TRUE, MARK_OP_NONE, { 0x42, 0xffffffff }},
|
||||
{"x", FALSE, MARK_OP_NONE, { 0 }},
|
||||
{"42/", TRUE, MARK_OP_NONE, { 0, 0 }},
|
||||
{"42/0", TRUE, MARK_OP_NONE, { 0, 0 }},
|
||||
{"42/x", FALSE, MARK_OP_NONE, { 0 }},
|
||||
{"42/42", TRUE, MARK_OP_NONE, { 42, 42 }},
|
||||
{"42/0xff", TRUE, MARK_OP_NONE, { 42, 0xff }},
|
||||
{"0x42/0xff", TRUE, MARK_OP_NONE, { 0x42, 0xff }},
|
||||
{"/0xff", TRUE, MARK_OP_NONE, { 0, 0xff }},
|
||||
{"/x", FALSE, MARK_OP_NONE, { 0 }},
|
||||
{"x/x", FALSE, MARK_OP_NONE, { 0 }},
|
||||
{"0xfffffff0/0x0000ffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ 0x0000fff0, 0x0000ffff }},
|
||||
{"%unique", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique/", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0 }},
|
||||
{"%unique", FALSE, MARK_OP_NONE,
|
||||
{ 0, 0 }},
|
||||
{"%unique/0x0000ffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0x0000ffff }},
|
||||
{"%unique/0xffffffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique0xffffffffff", FALSE, MARK_OP_UNIQUE,
|
||||
{ 0, 0 }},
|
||||
{"0xffffffff/0x0000ffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0x0000ffff }},
|
||||
{"0xffffffff/0xffffffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE, 0xffffffff }},
|
||||
{"%unique-dir", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-dir/", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0 }},
|
||||
{"%unique-dir", FALSE, MARK_OP_NONE,
|
||||
{ 0, 0 }},
|
||||
{"%unique-dir/0x0000ffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0x0000ffff }},
|
||||
{"%unique-dir/0xffffffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-dir0xffffffff", FALSE, MARK_OP_UNIQUE,
|
||||
{ 0, 0 }},
|
||||
{"0xfffffffe/0x0000ffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0x0000ffff }},
|
||||
{"0xfffffffe/0xffffffff", TRUE, MARK_OP_UNIQUE,
|
||||
{ MARK_UNIQUE_DIR, 0xffffffff }},
|
||||
{"%unique-/0xffffffff", FALSE, MARK_OP_UNIQUE,
|
||||
{ 0, 0 }},
|
||||
{"%unique-foo/0xffffffff", FALSE, MARK_OP_UNIQUE,
|
||||
{ 0, 0 }},
|
||||
};
|
||||
|
||||
START_TEST(test_mark_from_string)
|
||||
{
|
||||
mark_t mark;
|
||||
|
||||
if (mark_from_string(mark_data[_i].s, &mark))
|
||||
if (mark_from_string(mark_data[_i].s, mark_data[_i].ops, &mark))
|
||||
{
|
||||
ck_assert_int_eq(mark.value, mark_data[_i].m.value);
|
||||
ck_assert_int_eq(mark.mask, mark_data[_i].m.mask);
|
||||
|
||||
Reference in New Issue
Block a user