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