xref: /openbsd-src/regress/lib/libradius/test22.c (revision 0eaf192d8f98a1706afb2186171b5fb45b160397)
1*0eaf192dSyasuoka #include "incs.h"
2*0eaf192dSyasuoka 
3*0eaf192dSyasuoka #include <arpa/inet.h>
4*0eaf192dSyasuoka 
5*0eaf192dSyasuoka /*
6*0eaf192dSyasuoka  * inernet address (struct in_addr, struct in6_addr) attributes
7*0eaf192dSyasuoka  */
8*0eaf192dSyasuoka 
test22(void)9*0eaf192dSyasuoka void test22(void)
10*0eaf192dSyasuoka {
11*0eaf192dSyasuoka 	RADIUS_PACKET *packet;
12*0eaf192dSyasuoka 	struct in_addr in4a;
13*0eaf192dSyasuoka 	struct in6_addr in6a, in6b;
14*0eaf192dSyasuoka 
15*0eaf192dSyasuoka 	static const uint8_t attrs_beforeset[] = {
16*0eaf192dSyasuoka 		1, 3, 0,
17*0eaf192dSyasuoka 		10, 6, 192, 168, 0, 1,
18*0eaf192dSyasuoka 		RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 20, 30, 6, 10, 20, 30, 40,
19*0eaf192dSyasuoka 		40, 18, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
20*0eaf192dSyasuoka 		RADIUS_TYPE_VENDOR_SPECIFIC, 24, 0, 0, 0, 50, 60, 18, 0x3f, 0xff, 0x0e, 0xca, 0x86, 0x42, 0xfd, 0xb9, 0x75, 0x31, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54,
21*0eaf192dSyasuoka 	};
22*0eaf192dSyasuoka 	static const uint8_t attrs_afterset[] = {
23*0eaf192dSyasuoka 		1, 3, 0,
24*0eaf192dSyasuoka 		10, 6, 10, 20, 30, 40,
25*0eaf192dSyasuoka 		RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 20, 30, 6, 192, 168, 0, 1,
26*0eaf192dSyasuoka 		40, 18, 0x3f, 0xff, 0x0e, 0xca, 0x86, 0x42, 0xfd, 0xb9, 0x75, 0x31, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54,
27*0eaf192dSyasuoka 		RADIUS_TYPE_VENDOR_SPECIFIC, 24, 0, 0, 0, 50, 60, 18, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
28*0eaf192dSyasuoka 	};
29*0eaf192dSyasuoka 
30*0eaf192dSyasuoka 	packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST);
31*0eaf192dSyasuoka 
32*0eaf192dSyasuoka 	radius_put_raw_attr(packet, 1, "", 1); /* padding for UNalignment */
33*0eaf192dSyasuoka 	in4a.s_addr = inet_addr("192.168.0.1");
34*0eaf192dSyasuoka 	radius_put_ipv4_attr(packet, 10, in4a);
35*0eaf192dSyasuoka 	in4a.s_addr = inet_addr("10.20.30.40");
36*0eaf192dSyasuoka 	radius_put_vs_ipv4_attr(packet, 20, 30, in4a);
37*0eaf192dSyasuoka 	inet_pton(AF_INET6, "2001:0db8:dead:beef:1234:5678:9abc:def0", &in6a);
38*0eaf192dSyasuoka 	radius_put_ipv6_attr(packet, 40, &in6a);
39*0eaf192dSyasuoka 	inet_pton(AF_INET6, "3fff:0eca:8642:fdb9:7531:fedc:ba98:7654", &in6a);
40*0eaf192dSyasuoka 	radius_put_vs_ipv6_attr(packet, 50, 60, &in6a);
41*0eaf192dSyasuoka 
42*0eaf192dSyasuoka 	CHECK(radius_get_length(packet) == sizeof(attrs_beforeset) + 20);
43*0eaf192dSyasuoka 	CHECK(memcmp(radius_get_data(packet) + 20, attrs_beforeset, sizeof(attrs_beforeset)) == 0);
44*0eaf192dSyasuoka 
45*0eaf192dSyasuoka 	CHECK(radius_get_ipv4_attr(packet, 10, &in4a) == 0);
46*0eaf192dSyasuoka 	CHECK(in4a.s_addr == inet_addr("192.168.0.1"));
47*0eaf192dSyasuoka 	CHECK(radius_get_vs_ipv4_attr(packet, 20, 30, &in4a) == 0);
48*0eaf192dSyasuoka 	CHECK(in4a.s_addr == inet_addr("10.20.30.40"));
49*0eaf192dSyasuoka 
50*0eaf192dSyasuoka 	CHECK(radius_get_ipv6_attr(packet, 40, &in6b) == 0);
51*0eaf192dSyasuoka 	inet_pton(AF_INET6, "2001:0db8:dead:beef:1234:5678:9abc:def0", &in6a);
52*0eaf192dSyasuoka 	CHECK(memcmp(&in6b, &in6a, sizeof(struct in6_addr)) == 0);
53*0eaf192dSyasuoka 	CHECK(radius_get_vs_ipv6_attr(packet, 50, 60, &in6b) == 0);
54*0eaf192dSyasuoka 	inet_pton(AF_INET6, "3fff:0eca:8642:fdb9:7531:fedc:ba98:7654", &in6a);
55*0eaf192dSyasuoka 	CHECK(memcmp(&in6b, &in6a, sizeof(struct in6_addr)) == 0);
56*0eaf192dSyasuoka 
57*0eaf192dSyasuoka 	in4a.s_addr = inet_addr("10.20.30.40");
58*0eaf192dSyasuoka 	radius_set_ipv4_attr(packet, 10, in4a);
59*0eaf192dSyasuoka 	in4a.s_addr = inet_addr("192.168.0.1");
60*0eaf192dSyasuoka 	radius_set_vs_ipv4_attr(packet, 20, 30, in4a);
61*0eaf192dSyasuoka 	inet_pton(AF_INET6, "3fff:0eca:8642:fdb9:7531:fedc:ba98:7654", &in6a);
62*0eaf192dSyasuoka 	radius_set_ipv6_attr(packet, 40, &in6a);
63*0eaf192dSyasuoka 	inet_pton(AF_INET6, "2001:0db8:dead:beef:1234:5678:9abc:def0", &in6a);
64*0eaf192dSyasuoka 	radius_set_vs_ipv6_attr(packet, 50, 60, &in6a);
65*0eaf192dSyasuoka 
66*0eaf192dSyasuoka 	CHECK(radius_get_length(packet) == sizeof(attrs_afterset) + 20);
67*0eaf192dSyasuoka 	CHECK(memcmp(radius_get_data(packet) + 20, attrs_afterset, sizeof(attrs_afterset)) == 0);
68*0eaf192dSyasuoka 
69*0eaf192dSyasuoka 	CHECK(radius_get_ipv4_attr(packet, 40, &in4a) != 0);
70*0eaf192dSyasuoka 	CHECK(radius_get_vs_ipv4_attr(packet, 50, 60, &in4a) != 0);
71*0eaf192dSyasuoka 	CHECK(radius_get_ipv6_attr(packet, 10, &in6b) != 0);
72*0eaf192dSyasuoka 	CHECK(radius_get_vs_ipv6_attr(packet, 20, 30, &in6b) != 0);
73*0eaf192dSyasuoka }
74*0eaf192dSyasuoka 
75*0eaf192dSyasuoka ADD_TEST(test22)
76