1*0eaf192dSyasuoka #include "incs.h"
2*0eaf192dSyasuoka
3*0eaf192dSyasuoka /*
4*0eaf192dSyasuoka * put/get cat attributes
5*0eaf192dSyasuoka */
6*0eaf192dSyasuoka
test04(void)7*0eaf192dSyasuoka void test04(void)
8*0eaf192dSyasuoka {
9*0eaf192dSyasuoka RADIUS_PACKET *packet;
10*0eaf192dSyasuoka uint8_t buf[1024];
11*0eaf192dSyasuoka size_t len;
12*0eaf192dSyasuoka uint8_t *p;
13*0eaf192dSyasuoka
14*0eaf192dSyasuoka #define ATTRLEN (256 + 256 + 103)
15*0eaf192dSyasuoka uint8_t data0[ATTRLEN];
16*0eaf192dSyasuoka uint8_t data1[ATTRLEN];
17*0eaf192dSyasuoka uint8_t data2[] = { 0x10, 0x20, 0x30, 0x40 };
18*0eaf192dSyasuoka uint8_t data3[] = { 0x10, 0x20, 0x30, 0x40, 0x10, 0x20, 0x30, 0x40 };
19*0eaf192dSyasuoka uint8_t attrs[2048];
20*0eaf192dSyasuoka
21*0eaf192dSyasuoka packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST);
22*0eaf192dSyasuoka
23*0eaf192dSyasuoka for (int i = 0; i < ATTRLEN; i++)
24*0eaf192dSyasuoka data0[i] = random();
25*0eaf192dSyasuoka for (int i = 0; i < ATTRLEN; i++)
26*0eaf192dSyasuoka data1[i] = random();
27*0eaf192dSyasuoka
28*0eaf192dSyasuoka p = attrs;
29*0eaf192dSyasuoka *p++ = 20; *p++ = 6;
30*0eaf192dSyasuoka memcpy(p, data2, 4); p += 4;
31*0eaf192dSyasuoka
32*0eaf192dSyasuoka *p++ = 10; *p++ = 255;
33*0eaf192dSyasuoka memcpy(p, data0, 253); p += 253;
34*0eaf192dSyasuoka *p++ = 10; *p++ = 255;
35*0eaf192dSyasuoka memcpy(p, data0 + 253, 253); p += 253;
36*0eaf192dSyasuoka *p++ = 10; *p++ = ATTRLEN-253*2+2;
37*0eaf192dSyasuoka memcpy(p, data0 + 253*2, ATTRLEN-253*2); p += ATTRLEN-253*2;
38*0eaf192dSyasuoka
39*0eaf192dSyasuoka *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = 255;
40*0eaf192dSyasuoka *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = 249;
41*0eaf192dSyasuoka memcpy(p, data1, 247); p += 247;
42*0eaf192dSyasuoka *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = 255;
43*0eaf192dSyasuoka *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = 249;
44*0eaf192dSyasuoka memcpy(p, data1 + 247, 247); p += 247;
45*0eaf192dSyasuoka *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = ATTRLEN-247*2+8;
46*0eaf192dSyasuoka *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = ATTRLEN-247*2+2;
47*0eaf192dSyasuoka memcpy(p, data1 + 247*2, ATTRLEN-247*2); p += ATTRLEN-247*2;
48*0eaf192dSyasuoka
49*0eaf192dSyasuoka *p++ = 20; *p++ = 6;
50*0eaf192dSyasuoka memcpy(p, data2, 4); p += 4;
51*0eaf192dSyasuoka
52*0eaf192dSyasuoka
53*0eaf192dSyasuoka radius_put_raw_attr(packet, 20, data2, sizeof(data2));
54*0eaf192dSyasuoka radius_put_raw_attr_cat(packet, 10, data0, ATTRLEN);
55*0eaf192dSyasuoka radius_put_vs_raw_attr_cat(packet, 20, 30, data1, ATTRLEN);
56*0eaf192dSyasuoka radius_put_raw_attr(packet, 20, data2, sizeof(data2));
57*0eaf192dSyasuoka
58*0eaf192dSyasuoka CHECK(radius_get_length(packet) == 20 + (p-attrs));
59*0eaf192dSyasuoka CHECK(memcmp(radius_get_data(packet) + 20, attrs, p-attrs) == 0);
60*0eaf192dSyasuoka
61*0eaf192dSyasuoka len = sizeof(buf);
62*0eaf192dSyasuoka CHECK(radius_get_raw_attr_cat(packet, 10, buf, &len) == 0);
63*0eaf192dSyasuoka CHECK(len == ATTRLEN);
64*0eaf192dSyasuoka CHECK(memcmp(buf, data0, len) == 0);
65*0eaf192dSyasuoka
66*0eaf192dSyasuoka len = sizeof(buf);
67*0eaf192dSyasuoka CHECK(radius_get_vs_raw_attr_cat(packet, 20, 30, buf, &len) == 0);
68*0eaf192dSyasuoka CHECK(len == ATTRLEN);
69*0eaf192dSyasuoka CHECK(memcmp(buf, data1, len) == 0);
70*0eaf192dSyasuoka
71*0eaf192dSyasuoka len = sizeof(buf);
72*0eaf192dSyasuoka CHECK(radius_get_raw_attr_cat(packet, 20,buf, &len) == 0);
73*0eaf192dSyasuoka CHECK(len == sizeof(data3));
74*0eaf192dSyasuoka CHECK(memcmp(buf, data3, len) == 0);
75*0eaf192dSyasuoka }
76*0eaf192dSyasuoka
77*0eaf192dSyasuoka ADD_TEST(test04)
78