]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fixup parser, new test.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 14 Aug 2007 15:33:07 +0000 (15:33 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 14 Aug 2007 15:33:07 +0000 (15:33 +0000)
git-svn-id: file:///svn/unbound/trunk@517 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
services/outside_network.c
testcode/unitmsgparse.c
testdata/test_packets.6 [new file with mode: 0644]
util/data/msgparse.c
util/log.c

index 80d9137182bf7462a301d2014d161ee68a5f3fab..0e1278ade88e5bd4747053ac764d70f96b9a3648 100644 (file)
@@ -7,6 +7,9 @@
        - extensive debugging for memory allocations.
        - --enable-lock-checks can be used to enable lock checking.
        - protect undefs in config.h from autoheaders ministrations.
+       - print all received udp packets. log hex will print on multiple
+         lines if needed.
+       - fixed error in parser with backwards rrsig references.
 
 13 August 2007: Wouter
        - fixup makefile, if lexer is missing give nice error and do not
index f38874d78d774c0ec7cb5529b6e0afece499c5e6..6a4729638b842133d27d8cd01e763f95cb73b6d4 100644 (file)
@@ -259,6 +259,9 @@ outnet_udp_cb(struct comm_point* c, void* arg, int error,
        }
 
        verbose(VERB_ALGO, "received udp reply.");
+       if(verbosity >= VERB_ALGO)
+               log_hex("udp message", ldns_buffer_begin(c->buffer), 
+                               ldns_buffer_limit(c->buffer));
        if(p->c != c) {
                verbose(VERB_DETAIL, "received reply id,addr on wrong port. "
                        "dropped.");
index 8f7aa231864d56b1e8c96f962bfc05048f6c584d..784aaefb838b374120df16e3aa5c4cff7feffa3c 100644 (file)
@@ -51,6 +51,8 @@
 
 /** verbose message parse unit test */
 static int vbmp = 0;
+/** if matching within a section should disregard the order of RRs. */
+static int matches_nolocation = 0;
 
 /** match two rr lists */
 static int
@@ -65,18 +67,25 @@ match_list(ldns_rr_list* q, ldns_rr_list *p)
        }
        for(i=0; i<ldns_rr_list_rr_count(q); i++)
        {
-               if(ldns_rr_compare(ldns_rr_list_rr(q, i),
-                       ldns_rr_list_rr(p, i)) != 0) {
-                       verbose(3, "rr %u different", (unsigned)i);
-                       return 0;
-               }
-               /* and check the ttl */
-               if(ldns_rr_ttl(ldns_rr_list_rr(q, i)) !=
-                       ldns_rr_ttl(ldns_rr_list_rr(p, i))) {
-                       verbose(3, "rr %u ttl different", (unsigned)i);
-                       return 0;
+               if(matches_nolocation) {
+                       if(!ldns_rr_list_contains_rr(p, ldns_rr_list_rr(q, i)))
+                       {
+                               verbose(3, "rr %u not found", (unsigned)i);
+                               return 0;
+                       }
+               } else {
+                       if(ldns_rr_compare(ldns_rr_list_rr(q, i),
+                               ldns_rr_list_rr(p, i)) != 0) {
+                               verbose(3, "rr %u different", (unsigned)i);
+                               return 0;
+                       }
+                       /* and check the ttl */
+                       if(ldns_rr_ttl(ldns_rr_list_rr(q, i)) !=
+                               ldns_rr_ttl(ldns_rr_list_rr(p, i))) {
+                               verbose(3, "rr %u ttl different", (unsigned)i);
+                               return 0;
+                       }
                }
-
        }
        return 1;
 }
@@ -433,6 +442,10 @@ void msgparse_test()
        testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.4");
        testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.5");
 
+       matches_nolocation = 1; /* RR order not important for the next test */
+       testfromdrillfile(pkt, &alloc, out, "testdata/test_packets.6");
+       matches_nolocation = 0; 
+
        /* cleanup */
        alloc_clear(&alloc);
        alloc_clear(&super_a);
diff --git a/testdata/test_packets.6 b/testdata/test_packets.6
new file mode 100644 (file)
index 0000000..2bd3ce9
--- /dev/null
@@ -0,0 +1,13 @@
+; test packets for unit test
+;-- next packet --
+; test packet from nlnetlabs.nl ANY +dnssec last SRV has RRSIG first.
+
+63578490000100190000000D096E6C6E65746C616273026E6C0000FF0001C00C00060001000151800028046F70656EC00C0A686F73746D6173746572C00C77A1A1BB0000708000001C2000093A8000004650C00C002E000100000E1000A00030050200000E1046E6941D46C1AA1D4706096E6C6E65746C616273026E6C00066B3C47EA4915422B5D312C4221165E01BAA2578D947B0485E01336C355EC4ED3A98BBB7BDDEE50F1DD9CB6D0F535AECB7FC1FD2ED465A416245D69652B6A5D85A441618575ACE9E8DF7EB7E8FE887CD5932D5BEB4DA166DDAA6124F7FD4115C4F0A0534E938C7DE9E77E5C37DC43E279F39C6CD893EA788E39958785C53BEDC070002E000100000E1001200030050200000E1046E6941D46C1AA1D9003096E6C6E65746C616273026E6C00B7AEBD8B1306D263E891326B3C92177676BF25E7795B837532591333E214C04096B7E420CC18C797B81F0A3FA577C364A7D4D36A1284723B3DA04CD120F94A4F07EF98FDBA07A44012BDA0C18091F8AE8FA9F2EDB5F6203664DF945FFCA8087B98823FEB0DC87470F9897A40E43D122A3C4717AF728DC7AE08B3A7CC2F56B7F7B0F9261F9DDC61A30DC06D8B73C8CE1EC2DD011034DB5AABA0A738426014BE076BB7015BA269EED5D9A9BCFEF8767A0D7B09644C50476C2EF49C10A138077EC3BDB2D75DB8AE64E766C855D108F374FD22063564A9B6
+1254931B60E0572F4CC42874387E9063748F0C828A27C85BE31183CF6F97739EAD719415FD8DD506E074C11C002E000100000E1000A00030050200000E1046E6941D46C1AA1DAB0F096E6C6E65746C616273026E6C0065258E476A661AF6EB0C7B3FB6511A9E8D96C0D86B9563DD0BD3A3FE751F25CE324AB06F7FB00584C82CC4CB293B9321A890194B0ECF1953A202FF0A172E5028D1476D0F854E0D6F14E529329ED991E5CCEE57E0D96C6E74D6F4D58823B978FAF56221F0A8DFB295E50CD20CC70A8812D5CABD6D8C02966D3FBF414F0236DE8CC2480030000100000E100086010003050103A96D8AD435A850015E7FC13089F7FC1B48CFDE57E37E8D864032620A9FA405DD9E7B07ABA981C8D51C43B216403761C22DE45CFE5AAA1D0AB0019F8A9285DEAA25847C88FDD2E9F8CDE8F569963323AE1B29FFAC95737D02E9CECFD9BFE6816662E62602E7A9647A00ECD1519F016E479A8B0A8D056860C8CEB4DA3717E30643C2480030000100000E100106010103050103BA4ED88EABBB996BCC07AD0354193DD95EE75A1A39DB76E527C8BC3D5B088311DF15CB5028E0554AEF1A84005A3817980E91D1ABE98ED7CF417E6797B501A425BE10618EE8EF2213D9E4422E34690651B45360B8555F938950731876B5E918F7721BE5754C14E6C49FFE3A651D916893D89EB0E57529498441FA9D2463019FEEEC4F3BF70336
+9EBB7C82EDC75F9D76E4B7D01ED0CA038AF9FECF78064371D068DAAB32E6B9C1B0FB0B85B129769585B3658F4D5A34206600111DE71BA599A6D8AAF0E6006F52B6D8AF22FA3F3E843C2F3510CC8D679531E6C16576CD406930B06809B08B1AA067D5393DD675E2710EEF46A8E0CCFFF9B06714EF3BB4AD6CE86DC2480030000100000E100086010103050103F3CD358CCFCA925884257D19CF724C7606256691537A2CFBA93B799BCFB1612D29E6DBA9FA886F4D2DBCBDEC98B8E77696658DCCE7FC49052392DAF5AD728DADF02D3EC5E3B56DCFDDE994F2DF60C7721A56EAB0C7D6FA7CE8B97E85AD2D9B0CB2F503FBCB66D5C39CD26C50AB79F93CA8250181F1E6F5B1F3306D54058B4421C248002E00010000025800A0002305020000025846E6941D46C1AA1D4706096E6C6E65746C616273026E6C006F0EFD5F3606CDC8501772579B48A24A3522EB2E05A6908BFC9329A63AE2D31640F05B5D26A5ED591A789A705FC54A8D61AB08399F75DCB51380CE647D078670D8330DB2F58517FC74CEF1F9636759C188B8D6FCDE3844411A1F24DA06E371DF17C70F897D1AC23EEFC1CE720E365EF4F4B852BBD25152FB0AEEAEDE0F622A58C52A00230001000002580027001400000173075349502B44325500045F736970045F756470096E6C6E65746C616273026E6C00C5DD002E00010001518000A0001C05020001518046
+E6941D46C1AA1D4706096E6C6E65746C616273026E6C00816A6DF6B45D28B9EFEDA508223F84B8EA9FDBC1122D6758E1DC9BF1379B0DE7305AF63A978EF6B4EB6920083B82A30D24A119C233905F24CFC3EB29782C650FE87699D8CAD2AFF98A790A936F11E29F44D9C0F3A5A4986475DC637AC42018A3377313BE8A3A2C59E67A0B390A4AE9647FCA295A0BE6891B616BB274AB3662C4C609001C0001000151800010200107B8020600010000000000000001C609002E00010001518000A0001005020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0084B11D5C675C84EFF41B5E672E297B4B7171FCF14092236ADC7B356ED4A9A67997A4F4B666C36873EDF3A800BEB4274C4277C408917621F8D380C3A3726FCBA82FF8ED46E5F07DE5AE936993640A62A3F2D2C26EB1DE93E56DE1A277128A442D7AFDEFD264856C35AD59A06A8E881B2CB7205E79805A59B2ACE1A15EDF151338C6D10010000100015180001A19537469636874696E67204E4C6E6574204C616273207A6F6E65C6D1002E00010001518000A0000F05020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0032FBD313E442240AD077248B87DB4CA1B8BB8AEC94B2E815293DDC93093E10E29D1920BCBF2F84244DD58FB9707C6380D171DDB1B39239305C6FDA81E0AFA8E59C4596D3774CB4939B80CA9473558D
+AA3CB31FD2E8D756F425A80CDA9EDB48A9547582F998D363D8D64E45E65EFECA8BD11B3036D2B8B1DFF0FFD0F703CE7BB6C7A3000F00010001518000040032C02AC7A3000F00010001518000110064056F6D76616C067465646E6574C7ADC7A3002E00010001518000A0000605020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0087059806E37D4CFEC617C733F1841B9EB5DBA3F02E7E105E9D23A9998C34F276FE032A83758FA6B4D30A540BCCB0D82AAA1903C8CDF34377712556B08A227613F40FB3A129B6205B16A377227EE682ED9D6F22069BFA24E50FD485C525DE6D1813B056F9AEF2C0CE408BBA7A3E8D9347AA648849B7896275BE6D7EC443B6E1A0C87C002E00010001518000A0000205020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C007588829ABDACCB921070102946174422ECB1057BF9B1DF3A6A179FB03E7CA698C967FDD34EF0973142B6471B161981B0BF9EE066608744D8A60EDC873EFC8461E055915D924BC2FEBCF5DC22D1468EAD2C27D167112FEC0F3C079A91F279EC0925CE54F2AD1EA280D973584633DE119D32F16EAAD012A052D6C66690799AD1D4C92800020001000151800002C02AC92800020001000151800016036E73370F646F6D61696E2D7265676973747279C932C92800020001000151800002C84FC928002E00010001518000A0
+000105020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C004A8FDD14D1F4655452A6C5A9321434B9A4FC73C1D63E7D30030D716AC1ABBB37E208319F2A80111D211EE6D8A47FF4084401353FD65B2F50CB6D3EC0C9593CFA53630E75AAEB483C70E9B5B754B5EAD88DDCC2B0EE8D9BA4BAC3F8643BE12A3BD9CE6051BDDE14C46CE9608B935F004C0828ECF0C7958E272F71F67DE8DDDE72CA1200010001000151800004D59AE001CA12002E00010000465000A0002F05020000465046E6941D46C1AA1D4706096E6C6E65746C616273026E6C000E85A6563F289CC81E360B46EC09C30D0B16B3E7C75DB01C6F7544594425237D38D02FCC3C304F904DE3617D195BBA1F0642C2906E1F91C8D4CC7E34903837607AC1FEE5A9F1AA22596EDEC40AAD323EC8F9845F2A17C94F266C0F30E604E1C6A38124EA2A5F87E3522A7E100E4A2B85059FDF9C2716DAC5D735CE111237F395CACE002F0001000046500021045F736970045F756470096E6C6E65746C616273026E6C00000762018008100380066A6F686E6E79CB7200010001000002580004D59AE02CC02A00010001000002580004D59AE001C02A001C0001000002580010200107B8020600010000000000000001C02A001C0001000002580010200107B8020600010000000000000053C84F00010001000070800004D59AE011C84F001C00010000
+70800010200107B802060001020039FFFE59B187C9D0000100010000FE8B00043E0456E6CB68002E00010000025800A0002105040000025846E6941D46C1AA1D4706096E6C6E65746C616273026E6C0098CEBAD0E8783AE7234B216005CD368086EAE5879C25181A0FF4533F5FE60D5E818D6B10AA5D96D57B9648CD1A530184D128AD1F04BF03316563383A85BF22F8E0E8E2551F419BEFBE849B2C6510A4471D7A285DD071511AF1AEB555A2DDBEDFE535717C1384FA130CEAC5EE86B07A61FAB69C3CEA143FC6AE5006D2152E9CFDCB89002E00010000025800A0000105030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C00432C065713ABF3D8C9C40E1A46EF6FE49F2060689C281BACDDC98ECD06F3D354D77B2216E4EE408D080F9DF86F0F1C427B772D32EDCEE989B2AC8D76615E59E6FD11A1A963D5CEEB40F05C04CC4752A7308739B3C6C9C06A92D65522AB674AD2C27DC5DAC91044DE85A5D8126E170E515C52A642F51FB24323DEE893AF9995DCC02A002E00010000025800A0000105030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C000EBC0704DD6A076244351A27EE61E35EA294A2E6726C919E8BF33BDF7DC97913FE54C1EAAE26624C3F852C77BA1356AF771C3AC6636A3C23DE82AB03FE9F72515E6289D18779083006FE38152773E0AD6A3E9831006B9EA6
+490EEAFE1359AC9FF23F1189E303B838C5D4F3BBDE4FDFC531F1B1095E8BB301F5F8F17C2F20B526C02A002E00010000025800A0001C05030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C006D9C956476F8A04DE789F4439DFFB289AED649EC80320B0A68AE004FD5B39D5F3A955B18AB2DB535662B624FC36ECCBAEC421C7C3D3C2E67ADE6B284AE424974BF24CFAC9A6C3AF9541E70C4D4B8F196419D34C7686D5D95693C4C75B560E543BAED77EF343C1D14F0C5CC842757ABC86B6EC9A8C41F38AEF12B9E7886B1251ECB680021000100000258001B0000000013C4066A6F686E6E79096E6C6E65746C616273026E6C000000291000000080000000
+
index 7471cc7b62054788a072555758da986385b3212a..383a1ceb072af1e974c362c1bc3fa3bab9d264f1 100644 (file)
@@ -389,6 +389,8 @@ change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg,
                dataset->rrsig_last->next = dataset->rr_first;
        else    dataset->rrsig_first = dataset->rr_first;
        dataset->rrsig_last = dataset->rr_last;
+       dataset->rr_first = 0;
+       dataset->rr_last = 0;
        return dataset;
 }
 
@@ -715,7 +717,7 @@ add_rr_to_rrset(struct rrset_parse* rrset, ldns_buffer* pkt,
                        return LDNS_RCODE_FORMERR;
                return 0;
        }
-
+       
        /* create rr */
        if(!(rr = (struct rr_parse*)region_alloc(region, sizeof(*rr))))
                return LDNS_RCODE_SERVFAIL;
@@ -811,6 +813,14 @@ parse_section(ldns_buffer* pkt, struct msg_parse* msg, region_type* region,
                        if(!rrset) 
                                return LDNS_RCODE_SERVFAIL;
                }
+               else if(0)      { 
+                       printf("is part of existing: ");
+                       dname_print(stdout, pkt, rrset->dname);
+                       printf(" type %s(%d)\n",
+                               ldns_rr_descript(rrset->type)?
+                               ldns_rr_descript(rrset->type)->_name: "??",
+                               (int)rrset->type);
+               }
                /* add to rrset. */
                if((r=add_rr_to_rrset(rrset, pkt, msg, region, section, 
                        type)) != 0)
index 9eb598d0cf908f23862628c70cbd6301fdebbba9..8968c705aeff0cfeaaba4dc5af5fd7e851bc6c55 100644 (file)
@@ -179,11 +179,19 @@ log_hex(const char* msg, void* data, size_t length)
        uint8_t* data8 = (uint8_t*)data;
        const char* hexchar = "0123456789ABCDEF";
        char* buf = malloc(length*2 + 1); /* alloc hex chars + \0 */
+       size_t blocksize = 1024;
        for(i=0; i<length; i++) {
                buf[i*2] = hexchar[ data8[i] >> 4 ];
                buf[i*2 + 1] = hexchar[ data8[i] & 0xF ];
        }
        buf[length*2] = 0;
-       log_info("%s[%u] %s", msg, (unsigned)length, buf);
+       if(length < blocksize/2)
+               log_info("%s[%u] %s", msg, (unsigned)length, buf);
+       else {
+               for(i=0; i<length*2; i+=blocksize) {
+                       log_info("%s[%u:%u] %.*s", msg, (unsigned)length, 
+                               (unsigned)i, blocksize, buf+i);
+               }
+       }
        free(buf);
 }