mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-09-13 21:37:43 +02:00
- xfr-tsig, unit test for tsig-verify-reply-xfr, with output that works
with dig and NSD.
This commit is contained in:
@@ -143,6 +143,19 @@ static int vtest = 0;
|
||||
* the checkhex.
|
||||
* The expected rcode is from tsig_verify_query. The expected from
|
||||
* call is from tsig_sign_reply_xfr.
|
||||
* tsig-verify-reply-xfr <num> <key> <time> <result>
|
||||
* packet
|
||||
* <hex>
|
||||
* endpacket
|
||||
* call <time> <last> <result2>
|
||||
* ..
|
||||
* The data from previous packet in the buffer is used with
|
||||
* tsig-sign-query. Then a number of times, the hex data is used
|
||||
* with tsig-verify-reply-xfr, and the result is checked.
|
||||
* The TSIG signes with key name, at timestamp in secs. The result
|
||||
* of the tsig-sign-query function is compared with result.
|
||||
* The last is the last_packet argument. The function result is
|
||||
* compared with result2.
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -1181,6 +1194,144 @@ handle_tsig_sign_reply_xfr(char* line, FILE* in, const char* fname,
|
||||
sldns_buffer_copy(pkt, &reply_pkt);
|
||||
}
|
||||
|
||||
/** Handle the tsig-verify-reply-xfr */
|
||||
static void
|
||||
handle_tsig_verify_reply_xfr(char* line, FILE* in, const char* fname,
|
||||
struct tsig_key_table* key_table, struct sldns_buffer* pkt)
|
||||
{
|
||||
char* arg = get_arg_on_line(line, "tsig-verify-reply-xfr");
|
||||
char* s, *numstr, *keyname, *timestr, *expectedstr, *expectedstr2,
|
||||
*laststr;
|
||||
int i, num, expected_result, expected_result2, ret, last_packet;
|
||||
uint64_t timepoint;
|
||||
struct tsig_data* tsig;
|
||||
size_t pos;
|
||||
uint8_t buf[65536];
|
||||
sldns_buffer reply_pkt;
|
||||
sldns_buffer_init_frm_data(&reply_pkt, buf, sizeof(buf));
|
||||
|
||||
s = arg;
|
||||
numstr = get_next_arg_on_line(&s);
|
||||
keyname = get_next_arg_on_line(&s);
|
||||
timestr = get_next_arg_on_line(&s);
|
||||
expectedstr = get_next_arg_on_line(&s);
|
||||
|
||||
num = atoi(numstr);
|
||||
if(num == 0 && strcmp(numstr, "0") != 0)
|
||||
fatal_exit("expected int argument for %s", numstr);
|
||||
timepoint = (uint64_t)atoll(timestr);
|
||||
if(timepoint == 0 && strcmp(timestr, "0") != 0)
|
||||
fatal_exit("expected time argument for %s", timestr);
|
||||
expected_result = atoi(expectedstr);
|
||||
if(expected_result == 0 && strcmp(expectedstr, "0") != 0)
|
||||
fatal_exit("expected int argument for %s", expectedstr);
|
||||
|
||||
if(vtest) {
|
||||
printf("tsig-verify-reply-xfr with %d %s %d %d\n", num,
|
||||
keyname, (int)timepoint, expected_result);
|
||||
}
|
||||
|
||||
tsig = tsig_create_fromstr(key_table, keyname);
|
||||
if(!tsig)
|
||||
fatal_exit("alloc fail or key not found %s", keyname);
|
||||
|
||||
/* Put position at the end of the packet to sign it. */
|
||||
pos = sldns_buffer_limit(pkt);
|
||||
sldns_buffer_clear(pkt);
|
||||
sldns_buffer_set_position(pkt, pos);
|
||||
|
||||
ret = tsig_sign_query(tsig, pkt, key_table, timepoint);
|
||||
sldns_buffer_flip(pkt);
|
||||
|
||||
if(vtest) {
|
||||
if(ret == expected_result)
|
||||
printf("function ok, %s\n", (ret?"success":"fail"));
|
||||
else
|
||||
printf("function returned %d, expected result %d\n",
|
||||
ret, expected_result);
|
||||
}
|
||||
unit_assert(ret == expected_result);
|
||||
|
||||
/* Verify the reply packets */
|
||||
for(i=0; i<num; i++) {
|
||||
char callline[1024];
|
||||
if(vtest >= 2)
|
||||
printf("xfr packet %d/%d\n", i+1, num);
|
||||
|
||||
/* read packet keyword */
|
||||
if(!(s=read_next_keyword(callline, sizeof(callline), in)))
|
||||
fatal_exit("could not read next line for "
|
||||
"tsig-verify-reply-xfr %d", i+1);
|
||||
if(strcmp(s, "packet")!=0)
|
||||
fatal_exit("expected 'packet', but read '%s'",
|
||||
callline);
|
||||
if(!read_packet_hex("", &reply_pkt, in, fname))
|
||||
fatal_exit("Could not read reply packet");
|
||||
|
||||
/* read call arguments */
|
||||
if(!(s=read_next_keyword(callline, sizeof(callline), in)))
|
||||
fatal_exit("could not read next line for "
|
||||
"tsig-verify-reply-xfr %d", i+1);
|
||||
if(strncmp(s, "call", 4) == 0) {
|
||||
s = get_arg_on_line(s, "call");
|
||||
timestr = get_next_arg_on_line(&s);
|
||||
laststr = get_next_arg_on_line(&s);
|
||||
expectedstr2 = get_next_arg_on_line(&s);
|
||||
timepoint = (uint64_t)atoll(timestr);
|
||||
if(timepoint == 0 && strcmp(timestr, "0") != 0)
|
||||
fatal_exit("expected time argument for %s", timestr);
|
||||
last_packet = atoi(laststr);
|
||||
if(last_packet == 0 && strcmp(laststr, "0") != 0)
|
||||
fatal_exit("expected int argument for %s", laststr);
|
||||
expected_result2 = atoi(expectedstr2);
|
||||
if(expected_result2 == 0 && strcmp(expectedstr2, "0") != 0)
|
||||
fatal_exit("expected int argument for %s", expectedstr2);
|
||||
} else {
|
||||
fatal_exit("unknown line '%s' is not 'call' for %d in "
|
||||
"tsig-verify-reply-xfr", s, i+1);
|
||||
}
|
||||
|
||||
if(vtest >= 2) {
|
||||
char* str = sldns_wire2str_pkt(sldns_buffer_begin(&reply_pkt),
|
||||
sldns_buffer_limit(&reply_pkt));
|
||||
if(str)
|
||||
printf("reply packet: %s\n", str);
|
||||
else
|
||||
printf("could not wire2str_pkt\n");
|
||||
free(str);
|
||||
}
|
||||
if(vtest) {
|
||||
printf("call with %d %d %d\n", (int)timepoint,
|
||||
last_packet, expected_result2);
|
||||
}
|
||||
|
||||
/* Put position before TSIG */
|
||||
if(!tsig_find_rr(&reply_pkt)) {
|
||||
if(vtest)
|
||||
printf("tsig-verify-reply-xfr found no TSIG RR\n");
|
||||
/* Set position at end, if no TSIG. */
|
||||
sldns_buffer_set_position(&reply_pkt,
|
||||
sldns_buffer_limit(&reply_pkt));
|
||||
}
|
||||
ret = tsig_parse_verify_reply_xfr(tsig, &reply_pkt, key_table,
|
||||
timepoint, last_packet);
|
||||
|
||||
if(vtest) {
|
||||
if(ret == expected_result2)
|
||||
printf("function ok, %s\n", (ret?"success":"fail"));
|
||||
else
|
||||
printf("function returned %d, expected result2 %d\n",
|
||||
ret, expected_result2);
|
||||
}
|
||||
unit_assert(ret == expected_result2);
|
||||
if(vtest)
|
||||
printf("call ok, for %d/%d\n", i+1, num);
|
||||
}
|
||||
|
||||
tsig_delete(tsig);
|
||||
}
|
||||
|
||||
|
||||
/** Handle one line from the TSIG test file */
|
||||
static void
|
||||
handle_line(char* line, struct tsig_key_table* key_table,
|
||||
@@ -1210,6 +1361,8 @@ handle_line(char* line, struct tsig_key_table* key_table,
|
||||
handle_tsig_verify_shared(s, key_table, pkt);
|
||||
} else if(strncmp(s, "tsig-sign-reply-xfr", 19) == 0) {
|
||||
handle_tsig_sign_reply_xfr(s, in, fname, key_table, pkt);
|
||||
} else if(strncmp(s, "tsig-verify-reply-xfr", 21) == 0) {
|
||||
handle_tsig_verify_reply_xfr(s, in, fname, key_table, pkt);
|
||||
} else if(strncmp(s, "tsig-sign-reply", 15) == 0) {
|
||||
handle_tsig_sign_reply(s, in, fname, key_table, pkt);
|
||||
} else if(strncmp(s, "tsig-verify-reply", 17) == 0) {
|
||||
|
||||
Vendored
+155
@@ -341,3 +341,158 @@ check-packet
|
||||
1c9684000000000100000001076578616d706c6503636f6d000006000100000e100023c00c0a686f73746d6173746572c00c5cd7fffe00000e100000038400127500000007080474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020b2559f077753cfb86c254c472dcfeb9010f5c924098bd12101006cd661926f951c9600000000
|
||||
endpacket
|
||||
# end of tsig-sign-reply-xfr test, example.com AXFR.
|
||||
|
||||
# tsig-verify-reply-xfr test, example.com AXFR.
|
||||
# same output as the previous test.
|
||||
# the query packet.
|
||||
packet
|
||||
1c9600000001000000000001076578616d706c6503636f6d0000fc00010000291000000000000000
|
||||
endpacket
|
||||
# <number of packets> <keyname> <time> <tsig-sign-query result>
|
||||
tsig-verify-reply-xfr 24 test.key 1757420114 1
|
||||
|
||||
# packet 1
|
||||
packet
|
||||
1c9684000001000200000002076578616d706c6503636f6d0000fc0001c00c0006000100000e100023c00c0a686f73746d6173746572c00c5cd7fffe00000e10000003840012750000000708c00c0001000100000e1000043ed26e0700002904d00000000000000474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00200fe349e19b5b3e952c097db0dfef9430734da92125ab1d4542d450774f352b4d1c9600000000
|
||||
endpacket
|
||||
# <time> <last_packet> <function result>
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 2
|
||||
packet
|
||||
1c9684000000000200000001076578616d706c6503636f6d000002000100000e100005026e73c00cc00c000f000100000e1000070005026d78c00c0474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020d03727ee94d091b5ae91ffb0b7aec23ad6f753571c66b958c0e5fca8ad49f9931c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 3
|
||||
packet
|
||||
1c96840000000002000000010131026161076578616d706c6503636f6d000001000100000e1000047f000001023130c00e0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020e32db0e11c2084fbe37f0a7603ba35eca8ad24efeeea0a6ad0a9c5fac2d82fef1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 4
|
||||
packet
|
||||
1c9684000000000200000001023131026161076578616d706c6503636f6d000001000100000e1000047f000001023132c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020e38f1b5ff94189c0f1e43d12002f72fedd04842b9562036a890e434b28b01a361c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 5
|
||||
packet
|
||||
1c9684000000000200000001023133026161076578616d706c6503636f6d000001000100000e1000047f000001023134c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00209ec339cdb4ff11f704920aebc81decded09ddb6ff3e5181f3ef410fbc7074b201c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 6
|
||||
packet
|
||||
1c9684000000000200000001023135026161076578616d706c6503636f6d000001000100000e1000047f000001023136c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00209d4fc84ad670d95791fd281d8465213ff95432d18d920d3bba819ef8ef39307a1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 7
|
||||
packet
|
||||
1c9684000000000200000001023137026161076578616d706c6503636f6d000001000100000e1000047f000001023138c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c002085b43b7552da236e9e786a764797936dd35bf5b66240eda86b55b1401b7c89001c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 8
|
||||
packet
|
||||
1c9684000000000200000001023139026161076578616d706c6503636f6d000001000100000e1000047f0000010132c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020c509d9d88403cd38de55041c25df3918094d2ba58d7aef3421894375145c9b481c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 9
|
||||
packet
|
||||
1c9684000000000200000001023230026161076578616d706c6503636f6d000001000100000e1000047f000001023231c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c002035bb99b902597883326e520924197823afe67c16bc1277b76c0fe6a5c8df71481c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 10
|
||||
packet
|
||||
1c9684000000000200000001023232026161076578616d706c6503636f6d000001000100000e1000047f000001023233c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c002076cabe0adbfd33dc0de403b12eb4ab6760a01e309590b2fcbf1feb58d2b9d2d21c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 11
|
||||
packet
|
||||
1c9684000000000200000001023234026161076578616d706c6503636f6d000001000100000e1000047f000001023235c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020239b0438becc231a906e1b58871d708f8f2f6b4fa3d13d4c416e6a405261f7c11c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 12
|
||||
packet
|
||||
1c9684000000000200000001023236026161076578616d706c6503636f6d000001000100000e1000047f000001023237c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020f7f700322f917f820711b19d0737ea883ef1f84df10fe43768ddeb208436a2c71c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 13
|
||||
packet
|
||||
1c9684000000000200000001023238026161076578616d706c6503636f6d000001000100000e1000047f000001023239c00f0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020734aeda53e0b3bba7adbc6f3107be3a1ca15c0519ef9bc4c358266b279e4a84c1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 14
|
||||
packet
|
||||
1c96840000000002000000010133026161076578616d706c6503636f6d000001000100000e1000047f000001023330c00e0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00208bba7720eb76db59ca223e72e75161a51905ad7da75bfe87ea7e3f858e95a5e31c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 15
|
||||
packet
|
||||
1c96840000000002000000010134026161076578616d706c6503636f6d000001000100000e1000047f0000010135c00e0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020bd18bd75f9b6073af2f0c2e3321530f18b48768881fc246e5485b7adf744e18f1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 16
|
||||
packet
|
||||
1c96840000000002000000010136026161076578616d706c6503636f6d000001000100000e1000047f0000010137c00e0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00209bde6bd3ff63bcadc4987cb97056fefa57b6f2b62f0715d7f569ff2526c1cd7a1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 17
|
||||
packet
|
||||
1c96840000000002000000010138026161076578616d706c6503636f6d000001000100000e1000047f0000010139c00e0001000100000e1000047f0000010474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020eb67e8b02e2e2464a688c420e5705e137ada69a9e56d65e1fb94fe4061a1bb091c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 18
|
||||
packet
|
||||
1c9684000000000200000001012a01630164076578616d706c6503636f6d000010000100000e1000222174657874207265636f72642077697468206d61696c207065726d697373696f6e73c00c000f000100000e1000070005026d78c0120474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020b529a10450c8fbf8582b18e1de1cd23470f09c77ec0b7d8fff783067dac7eca91c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 19
|
||||
packet
|
||||
1c968400000000020000000104646f6e65076578616d706c6503636f6d000001000100000e100004010101010166c0110027000100000e10001101780166076578616d706c6503636f6d000474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00207742d4b6f182ff0f547a0f192ef85f5e7167739768a83a669816145995bd0be61c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 20
|
||||
packet
|
||||
1c9684000000000200000001026d78076578616d706c6503636f6d000001000100000e1000043ed26e07026e73c00f0001000100000e1000043ed26e070474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c00203139787980ff264c8a9eec8b90abe2456b10177a72d2ebc929e23c90c7af555b1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 21
|
||||
packet
|
||||
1c9684000000000200000001027274076578616d706c6503636f6d000010000100000e1000130261620263640665662267682202696a026b6c03727432c00f0010000100000e10000d06616263646566056768696a6b0474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020bfedd8e7dd2cf2cfa4dd0eb2229c4aefe6e6efc6856aca79b1f2dbbf140f9eee1c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 22
|
||||
packet
|
||||
1c968400000000020000000103727433076578616d706c6503636f6d000010000100000e10001202616202636402656602676802696a026b6c03727434c0100010000100000e10000d06616263646566056768696a6b0474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020915c444174214b9876cbbfc2d5a3039af0a7a6e5a93eb592fa46436d48c732a81c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 23
|
||||
packet
|
||||
1c96840000000002000000010178076578616d706c6503636f6d000027000100000e10000f0179076578616d706c6503636f6d0003666f6f0179c00e0005000100000e10000704646f6e65c00e0474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020011049e9d4ab4cc0af1717e56077ff8a2be5030cb6b7b4a42aabe212dd7f34701c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
|
||||
# packet 24
|
||||
packet
|
||||
1c9684000000000100000001076578616d706c6503636f6d000006000100000e100023c00c0a686f73746d6173746572c00c5cd7fffe00000e100000038400127500000007080474657374036b65790000fa00ff00000000003d0b686d61632d73686132353600000068c01a52012c0020b2559f077753cfb86c254c472dcfeb9010f5c924098bd12101006cd661926f951c9600000000
|
||||
endpacket
|
||||
call 1757420114 0 1
|
||||
# end of tsig-verify-reply-xfr test, example.com AXFR.
|
||||
|
||||
Reference in New Issue
Block a user