module linker_test_2 1.0;

require { 
	class file { read write };
	class lnk_file { unlink };
	attribute g_b_attr_5;
	attribute g_b_attr_6;
	attribute g_m1_attr_3;
	attribute o3_m1_attr_2;
}

type tag_g_m2;

type g_m2_type_1;
role g_m2_role_1;
role g_m2_role_1 types g_m2_type_1;

type g_m2_type_4, g_b_attr_5;
type g_m2_type_5, g_b_attr_6;

#add types to role declared in base test
type g_m2_type_2;
role g_b_role_3;
role g_b_role_3 types g_m2_type_2;

#optional base role w/ adds in 2 modules
role o4_b_role_1;
role o4_b_role_1 types g_m2_type_1;

# attr a added to in base optional, declared/added to in module, added to in other module
type g_m2_type_3, g_m1_attr_3;

# attr a added to in base optional, declared/added in module optional, added to in other module
type g_m2_type_6, o3_m1_attr_2;

# cond mapping tests
bool g_m2_bool_1 true;
bool g_m2_bool_2 false;
if (g_m2_bool_1 && g_m2_bool_2) {
	allow g_m2_type_1 g_m2_type_2 : lnk_file unlink;
}

optional {
	require {
		type optional_type;
	}

	type tag_o1_m2;

	type o1_m2_type_1;
	role o1_m2_role_1;
	role o1_m2_role_1 types o1_m2_type_1;
}


optional {
	require {
		attribute g_m1_attr_4;
		attribute o4_m1_attr_1;
	}
	type tag_o2_m2;

	type o2_m2_type_1, g_m1_attr_4;
	type o2_m2_type_2, o4_m1_attr_1;

}
