-# $OpenBSD: Makefile.inc,v 1.15 2021/10/24 17:54:28 claudio Exp $
+# $OpenBSD: Makefile.inc,v 1.16 2021/12/01 09:03:19 claudio Exp $
.PATH: ${.CURDIR}/../../../../usr.sbin/rpki-client
PROGS += test-mft
PROGS += test-roa
PROGS += test-tal
+PROGS += test-rrdp
.for p in ${PROGS}
REGRESS_TARGETS += run-regress-$p
encoding.c print.c dummy.c
run-regress-test-tal: test-tal
./test-tal -v ${.CURDIR}/../tal/*.tal
+
+SRCS_test-rrdp+= test-rrdp.c rrdp_delta.c rrdp_notification.c \
+ rrdp_snapshot.c rrdp_util.c \
+ log.c encoding.c ip.c validate.c dummy.c
+LDADD_test-rrdp+= -lexpat ${LDADD}
+DPADD_test-rrdp+= ${LIBEXPAT} ${DPADD}
+run-regress-test-rrdp: test-rrdp
+ ./test-rrdp \
+ -n < ${.CURDIR}/../rrdp/notification.xml 2>&1 | tee rrdp-r1.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r1.out rrdp-r1.out
+
+ ./test-rrdp -S 8fe05c2e-047d-49e7-8398-cd4250a572b1 -N 50500 \
+ -n < ${.CURDIR}/../rrdp/notification.xml 2>&1 | tee rrdp-r2.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r2.out rrdp-r2.out
+
+ ./test-rrdp -S 9b3f7e31-4979-ef8c-d818-73e4dadc3e6b -N 13755 \
+ -H 27571e365a4c87b51a03731415ce2118cc268d686db3209ae752f01ba2d74bc5 \
+ -d < ${.CURDIR}/../rrdp/delta.xml 2>&1 | tee rrdp-r3.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r3.out rrdp-r3.out
+
+ ./test-rrdp -S 7e7d2563-5bbb-40b0-8723-6a2e90c85d9e -N 28483 \
+ -H 2a051bfd199150fe6bcdc777d09e70fe1acdf239fbf98ba378a793685e5adb21 \
+ -s < ${.CURDIR}/../rrdp/snapshot.xml 2>&1 | tee rrdp-r4.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r4.out rrdp-r4.out
+
+ ./test-rrdp \
+ -n < ${.CURDIR}/../rrdp/xxe.xml 2>&1 | tee rrdp-r5.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r5.out rrdp-r5.out
+
+ ./test-rrdp \
+ -n < ${.CURDIR}/../rrdp/billion_lol.xml 2>&1 | tee rrdp-r6.out
+ cmp ${.CURDIR}/../rrdp/rrdp-r6.out rrdp-r6.out
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE lolz [
+<!ENTITY lol "lol">
+<!ELEMENT lolz (#PCDATA)>
+<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
+<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
+<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
+<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
+<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
+<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
+<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
+<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
+<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
+]>
+<notification version="1" session_id="9b3f7e31-4979-ef8c-d818-73e4dadc3e6b" serial="13756" xmlns="http://www.ripe.net/rpki/rrdp">
+&lol9;
+</notification>
--- /dev/null
+<delta version="1" session_id="9b3f7e31-4979-ef8c-d818-73e4dadc3e6b" serial="13755" xmlns="http://www.example.com/rpki/rrdp">
+<withdraw uri="rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/gSk6an-JyWyxV5LYX0AB2BOJb7I.roa" hash="6f19c7760d83b12e259f35924f40be76c6a9c963db23a692ce192c2faef94271"/>
+<publish uri="rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/nBETmuVT1txzB4h_Rn5CB4gARes.crl" hash="9aaf87b277efb7e47ab00a4a86cad1cd132d8a06a782d9b54202c4bffede347b">MIICDDCB9QIBATANBgkqhkiG9w0BAQsFADAzMTEwLwYDVQQDEyg5YzExMTM5YWU1NTNkNmRjNzMwNzg4N2Y0NjdlNDIwNzg4MDA0NWViFw0yMTExMjQxMjU4MzlaFw0yMTExMjUxMjU4MzlaMFwwFQIEAn7YkhcNMjExMTI0MTI1NzM4WjAVAgQFTTrHFw0yMTExMjQwMDIwMThaMBUCBAVOq8cXDTIxMTEyNDA4MjAyM1owFQIEBU7nwxcNMjExMTI0MTI1ODM5WqAwMC4wHwYDVR0jBBgwFoAUnBETmuVT1txzB4h/Rn5CB4gAReswCwYDVR0UBAQCAgbkMA0GCSqGSIb3DQEBCwUAA4IBAQCfpuUosjOLlChmmjHjIZ0+NiQSb7EnPZdOZKnbAmK3xqflMAvbdHe7ROuFeb6LFU1RvAfq+100NRbBnt7kppLoHFItAoNUl8YtOevRr8imkE0I6jhj3kPxsFhjnWwD1Bqv++SP84xQQrTJ9+NhVv4xWx4K21OaBK1jQfNnDIEKgtMV5FKrb3GJNoWjFIURLkyJ4GKuFhp/J+Jr5PHb36k1aZBYlXU52/MkYROyHw8MgcfY39ECCjoz7396ihwuB5DX8h8C1oPyQtMKHRs7HLHbSu0VTMKz2iL8U8D14dnRz3ALB28FpAU1jRcYjPsV6913GYC1u931CIdzCL/cF6sY</publish>
+<publish uri="rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/nBETmuVT1txzB4h_Rn5CB4gARes.mft" hash="b45fa2daaeeda2b37bff1a039ada2c299dc6ace28ca16dbc22664e3d89b8d556">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</publish>
+<publish uri="rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/x7OkhL6fs-x6CQ4Kqd5jOkkB4pY.roa">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</publish>
+</delta>
--- /dev/null
+<notification xmlns="http://www.ripe.net/rpki/rrdp" version="1" session_id="8fe05c2e-047d-49e7-8398-cd4250a572b1" serial="50550">
+ <snapshot uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50550/snapshot.xml" hash="ae52f78bcb1b258a1da924122971b0fddfce4c01b2b2dba59c9b28ef1d94c02b" />
+ <delta serial="50550" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50550/delta.xml" hash="e99cc80cb36259e73ec1ffed5a0cfbaf27d345800da18147dbdf8316b28e027c" />
+ <delta serial="50549" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50549/delta.xml" hash="0f7808520c7d54e6f0cbd37bbf391e9028fdc62bdc0f2e90d986479b3b11f8aa" />
+ <delta serial="50548" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50548/delta.xml" hash="8f022550ecee3cd13ee209c1a8fcd5e99e449295ae9d53adca1ba3231718b36c" />
+ <delta serial="50547" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50547/delta.xml" hash="fb94b545fc52cc7ca91a42bc09ae5f89dcf7bcd758fe4bded47f565cf991dd64" />
+ <delta serial="50546" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50546/delta.xml" hash="67dcb6751e0e31586603244cd90fc2f8a3e7ea8132af13d95962c59898f11b24" />
+ <delta serial="50545" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50545/delta.xml" hash="12985397a67daed8f64ee8b653a60a02b121632169247bb95a9d3beb0f897ca1" />
+ <delta serial="50544" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50544/delta.xml" hash="b4b36d43e649ca7b919ad5754c745a8b50a594f0250e4617c7756b9ae008ead0" />
+ <delta serial="50543" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50543/delta.xml" hash="7626bd5fe4528b3810806eede9698f0c835657024717c116024b010d0239ae58" />
+ <delta serial="50542" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50542/delta.xml" hash="bee7a540aa6fff7c2c00d559b7e9de6973d52ffa7121030ba534db5f18a23fa6" />
+ <delta serial="50541" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50541/delta.xml" hash="d9622f90e5850f38cf2ecbcd5714a9f5f699d8d0ba509f41daa56dfeef83cd85" />
+ <delta serial="50540" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50540/delta.xml" hash="a64882d43f76933bfbba07e96a3982a6b1b15bd261f4f78ffbf19ad4c9fafded" />
+ <delta serial="50539" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50539/delta.xml" hash="397264bfbd7d466f9bddefe5139ba9ce392fafe24c95f80be00f27f40246919b" />
+ <delta serial="50538" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50538/delta.xml" hash="f5b6e9e253597f0fa8c023278d9d77e75b220e1cebae597e906a7d6b0ab07398" />
+ <delta serial="50537" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50537/delta.xml" hash="13be78ba673b89d9d8004a1c39e82f667219610371f4ecd64c3c318636419608" />
+ <delta serial="50536" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50536/delta.xml" hash="59fbb6d36742c51219cd1a4ef064d6a54531b82cb8db592a4fad9d89e867353f" />
+ <delta serial="50535" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50535/delta.xml" hash="a749ff4e39b607f65b7d2d2b4baababa0198c47ea02c9ef8a8fc36529102bc3c" />
+ <delta serial="50534" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50534/delta.xml" hash="19eff9063c421788ffa4859842cf05366862a78c9dd40d926091a6e9e6f9bb1b" />
+ <delta serial="50533" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50533/delta.xml" hash="e45dcdab3ac49d0f6af740b6c42b2c48faf539bb1bcbe6ac0eac9e95028d1d7d" />
+ <delta serial="50532" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50532/delta.xml" hash="26cb2af7ef8ef4a6568832feeccf45193503e2d5aa60edc36f04928a91448228" />
+ <delta serial="50531" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50531/delta.xml" hash="8e18d6c89b7129c2450efb4a36fee9085ee5abd02f0a9aadbcc2a6f4afd1369e" />
+ <delta serial="50530" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50530/delta.xml" hash="99d665bc23a27a011684985a3f986c4a8d99ef2c5aa700ddcca48c32d68d1da1" />
+ <delta serial="50529" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50529/delta.xml" hash="afbe35fac90ed1f9ffbc9c00ef9f264e52c3ce5a963cb71d8493fec0970c6ade" />
+ <delta serial="50528" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50528/delta.xml" hash="7ca7b7bbeaf412c492b4781d23f3cf3de1ce333ef569377b57719c58195cba6f" />
+ <delta serial="50527" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50527/delta.xml" hash="fdc9eb4e70a5f55b310015936d65a3878665d9c03631da4b66069f4f1d812d5f" />
+ <delta serial="50526" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50526/delta.xml" hash="e615ed42ac32529c7dfe7189f8deca1e7ec7c4d79c03c50bd51488c7381610bb" />
+ <delta serial="50525" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50525/delta.xml" hash="2660598aafb968737d8a81f823d490c7157f5a6ee72ef7f2def8176095cb96be" />
+ <delta serial="50524" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50524/delta.xml" hash="6bd5645cda5490eb42737ed94f249c9166f626231b5315c1205c4e1d8e7fd409" />
+ <delta serial="50523" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50523/delta.xml" hash="abd00b8aeb0555a965f83ea89853e5a8179d5f00e341c7f958e95c3bd6df8807" />
+ <delta serial="50522" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50522/delta.xml" hash="aa249c432d2eaeff266b3a875c1cbf721491c10776a28d62cd5cf0cce891e834" />
+ <delta serial="50521" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50521/delta.xml" hash="321d3c439dc175974842a52d936ec13fc6a73912f75e6ae66d99b9eaac09e84d" />
+ <delta serial="50520" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50520/delta.xml" hash="ab32d797dfa4d0490888d129ba275f9c4a816f409b5d99dba76c07ab14ba3a2b" />
+ <delta serial="50519" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50519/delta.xml" hash="0c07702baee536f54f5a35bc481c422c170974dcc2bd4f99e4f58028901b3a52" />
+ <delta serial="50518" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50518/delta.xml" hash="30a580dd74f8f5cf1bf83bc8643171a09482fb401e3f2f0443934ee675ca8107" />
+ <delta serial="50517" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50517/delta.xml" hash="eac5270a5109e95683eb73153e7f5e081f6da473048782ce4e0e708ad2264b3a" />
+ <delta serial="50516" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50516/delta.xml" hash="fadee13b825f713e931edadedc79b1f86f4e501ef6c153c0f5fd4401c73b3065" />
+ <delta serial="50515" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50515/delta.xml" hash="bd258657de4c220ad500cc0ece87cffcad813ecd30a63deff28086a5f2dcbb5f" />
+ <delta serial="50514" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50514/delta.xml" hash="70d288ec67c4b47b6dc177bfb735ddd6542b2a9e484bae770534a83fd515ce8b" />
+ <delta serial="50513" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50513/delta.xml" hash="85daf825c8335d8f59fd6b32b25f9b7152f89038b74ed3366a6ea59bd2f4e600" />
+ <delta serial="50512" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50512/delta.xml" hash="155c0f96de414ac4ca7d60de7b1acbecdf5b192ccae6af3c78f06fff212138f4" />
+ <delta serial="50511" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50511/delta.xml" hash="9015620f5b20dba3dedc63f90c0cfab5dd3816217976c6dcc4a68d5555649dc9" />
+ <delta serial="50510" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50510/delta.xml" hash="6d8d296ca28ca390b761d25bdb69eaa0086242911a90965c7436d602b4190b66" />
+ <delta serial="50509" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50509/delta.xml" hash="fcd7fe3d59f4b8daa40920c7b3c5c4d149660afd35dfca53ede7671919802cfb" />
+ <delta serial="50508" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50508/delta.xml" hash="b4ae54c1207ec9a12a5e20091004830fb3d146f62b2396a6c3de2ab0795ed2e7" />
+ <delta serial="50507" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50507/delta.xml" hash="20360d8b294e3a6e62de2af58955afe601507231e6937b375de0c047a69cd9c1" />
+ <delta serial="50506" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50506/delta.xml" hash="7c9c62da4dd109e5151fcc0ea366db343e35ab7f2a62d81d6c54eee1e1fd72b1" />
+ <delta serial="50505" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50505/delta.xml" hash="50c95ff4b63c03836fe291afca61fda25c96bc0d280e421dddc307e591fe8f81" />
+ <delta serial="50504" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50504/delta.xml" hash="cdcd746257a0f35bbce0b1832c2df4cf25751c281fde23cae8b17f607f1e82e1" />
+ <delta serial="50503" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50503/delta.xml" hash="e8de1e10d05734bb9efe65202b96023d3770f0b8fd457249676214612f4685b3" />
+ <delta serial="50502" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50502/delta.xml" hash="1036a71df3129449e1403f3beacfa427d59659fac0b45c9e3dffdbebdb17d722" />
+ <delta serial="50501" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50501/delta.xml" hash="40521fb9995aca55d39360985c336619e08072a6afffce97753e701a0d65d57b" />
+ <delta serial="50500" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50500/delta.xml" hash="7efb8b3a1e854b0d2814ab18446ee022ade286c5a1d31606097b3f90356ccdaf" />
+ <delta serial="50499" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50499/delta.xml" hash="c70a32f49cce1debba0966f78ff99ea18e78bd40dba9f67396d26b5cc5c605ff" />
+ <delta serial="50498" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50498/delta.xml" hash="751794129303140be49746bf9e3622c2bdd8e4c5a08e40493f7cd46a71d20aa1" />
+ <delta serial="50497" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50497/delta.xml" hash="cc6a29239f63de8518f1af177a1b0dc5b2e0a88eb4fe0922e56c73d83dd4d6d0" />
+ <delta serial="50496" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50496/delta.xml" hash="a716208fdc5cdff2c7f56cdec1c02286c59823afd3879aa75e1f06c987748441" />
+ <delta serial="50495" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50495/delta.xml" hash="ef3ca2ce6b1d169e8fe62ee8f0b7242ee8fa2a1c573993c674faa4ec611dc544" />
+ <delta serial="50494" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50494/delta.xml" hash="54c980eaa0124eabd3099e0d8272293e2deb796acf8f102dfd24a250ddee2775" />
+ <delta serial="50493" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50493/delta.xml" hash="7cfd18677fd6dae4293980a78ab555cbe9e61d803b142ffc8198a29ec6b04c08" />
+ <delta serial="50492" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50492/delta.xml" hash="4f6206afd9bf34751fd733874becac64b9dc04630640e7df8c772fb2fcf7a348" />
+ <delta serial="50491" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50491/delta.xml" hash="7a74b74aa104f7f52d8f7bc6ed1ec5f9e6e3adccadd1e04fc575f6d8f34ee6dc" />
+ <delta serial="50490" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50490/delta.xml" hash="ceda0e4154f22b7a16ef04998dc17fc70c84105c4aae083e17fac6f381c41713" />
+ <delta serial="50489" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50489/delta.xml" hash="010c945e13c99cf92741d523f5c57f0f2851fb1c52d1fb4964f115bfd85c9ef6" />
+ <delta serial="50488" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50488/delta.xml" hash="0fd5fa0604384d8ddec30b69acd04d23c90bcba34d3e062e73a96a3a57bf60a8" />
+ <delta serial="50487" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50487/delta.xml" hash="0427cccadfa70f69a412122ba8419aee3a8904a3de63b7059a35e652f9404569" />
+ <delta serial="50486" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50486/delta.xml" hash="d171d1e8ef82c0769b36efff0debac91f3cc33054ded176d54a35b63232d2c96" />
+ <delta serial="50485" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50485/delta.xml" hash="f05dc4d2995cb514391404936edcdebb1107297887e3a3c494c0896477b27e6e" />
+ <delta serial="50484" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50484/delta.xml" hash="1f6c44e3d738879df95fc8673e659fd78a30a183a1d5ca823ccabe81fdf3736a" />
+ <delta serial="50483" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50483/delta.xml" hash="b2ed1f439cac0a62001f6e1d9e1f00ad764fd047a64126b47f26af3b2ab514e8" />
+ <delta serial="50482" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50482/delta.xml" hash="83d1c8e6bc1b065a32683d6f2ef7ca4ee1009e6d0d8b22062d6288cd72617b3f" />
+ <delta serial="50481" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50481/delta.xml" hash="24a99e8d8ab0b3352d19f33a49eaf69939086ab0315ec6dbed067f63b5604ef5" />
+ <delta serial="50480" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50480/delta.xml" hash="6a2accdfd0b4af9906a5a81e30241fb87f67bb6f7e9d7b99d59cae15044a010b" />
+ <delta serial="50479" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50479/delta.xml" hash="8f7af8fd7c729baddedc2a13b689544a767dd936dbcbf084211e00075d74a1e5" />
+ <delta serial="50478" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50478/delta.xml" hash="d2b419736b991ccdc6198f8c1e8c602f14e934871be7ecd607d866e584f2aa42" />
+ <delta serial="50477" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50477/delta.xml" hash="bdf736d3c7cecd75ee19dba29941881cade37c2c53b165a2413a1b7982795be6" />
+ <delta serial="50476" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50476/delta.xml" hash="c7975b0f7ef18f93304a2babed5f7486262c90ee02977a3fab9ecd95c4b47852" />
+ <delta serial="50475" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50475/delta.xml" hash="2aa5b94c098d36affabeef66f7f9271d7e6ae93985c3457ed4a3c84316b8d1f6" />
+ <delta serial="50474" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50474/delta.xml" hash="e8c459bd165aa12c7e2f0b0da0d8fb18e0e23607c42f2b7f9a7957fe6b8eef28" />
+ <delta serial="50473" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50473/delta.xml" hash="3b9fbe5d13d4403acedc45d946f3068ed17c6bbe62196186dab9a12b3e558599" />
+ <delta serial="50472" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50472/delta.xml" hash="b8b884391b4058d1eaca7e166d205db1594847cc1e5cc956b6445d38e376f646" />
+ <delta serial="50471" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50471/delta.xml" hash="160c140d36df4ed569ab11a540ec17e2cd5530950e119cc4a06e5ffb9d9f9150" />
+ <delta serial="50470" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50470/delta.xml" hash="baf8b1d3700495e112c23189e927a52a7ac2246d4da310ae4fc6eea0351d513f" />
+ <delta serial="50469" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50469/delta.xml" hash="e4dcefd79395aa920fe91888afedc82a8e28e262e6e40127a6b937635faf9fba" />
+ <delta serial="50468" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50468/delta.xml" hash="af6fb2aeafd434254e29fa7f16dd133c69abb464ad1b8ae8a44de23578f1bcbd" />
+ <delta serial="50467" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50467/delta.xml" hash="bd8816c6e64e42fcb0046aa2ca9b5769b5c3ebbf32ffac844c8b38c8889b62c9" />
+ <delta serial="50466" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50466/delta.xml" hash="c1bd0883c69fe968d949933b0e0272ce07e91424b8357f62b7ee4ba63d63d9f4" />
+ <delta serial="50465" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50465/delta.xml" hash="3f420ccdc0efe1086ec4950c76396cfd2c47875a9a6da4d5eae914af60876ba5" />
+ <delta serial="50464" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50464/delta.xml" hash="0e2a66306ce1fe54f7b29ea2b33c29bb42c75d0e085386f20a05312fce7bdcff" />
+ <delta serial="50463" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50463/delta.xml" hash="e60d42e6886464763f02d5b025015872357392b6769a69ccf3aa6e61fa013276" />
+ <delta serial="50462" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50462/delta.xml" hash="9e8b3371c693c0893f1edbdb055a6b81de26aceb82f57af728ac7c1954c9d5a1" />
+ <delta serial="50461" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50461/delta.xml" hash="6ecd5a432c927c8e491f56abcf0eee37ab77a620a8b98672c80f07777175c824" />
+ <delta serial="50460" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50460/delta.xml" hash="5455227b1ec9b681d75dcc2427c6762c6e9a58249112e815142d321e1c465eff" />
+ <delta serial="50459" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50459/delta.xml" hash="c13c22ef00f54d628e58928411aa810e4044f08fe6b752adcb680c490807eac2" />
+ <delta serial="50458" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50458/delta.xml" hash="0a8ade6143f941d60b07a6638a3095101960dde1cb05243361ec8a1bbd3d61b8" />
+ <delta serial="50457" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50457/delta.xml" hash="e44bee224b87ae7cd52b9f9e87366e47aec0f8d9f337f49963444b99f4752a3a" />
+ <delta serial="50456" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50456/delta.xml" hash="b1a0bb86fdbfded50ed63272a904c99f368cf30872be8f4ff392e2a02cd95da4" />
+ <delta serial="50455" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50455/delta.xml" hash="1b976ee80548f199f0e18600ba4bae12ca3099294c7fbd78f25fe493d550341d" />
+ <delta serial="50454" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50454/delta.xml" hash="9b83636b38eea408454b44d886d42d7b9ff8e531c6630aa733262f8b29955ac0" />
+ <delta serial="50453" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50453/delta.xml" hash="bad9175c574653bdd0c89c5d1acec0e8d529613f570787283e81d467c522b581" />
+ <delta serial="50452" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50452/delta.xml" hash="914f4248a268fdec1920bffa407e4473c0c81e834d4389f07285e8d60d05bae9" />
+ <delta serial="50451" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50451/delta.xml" hash="e968914f508d6e6a36656cd715905e819ff0fa9d35bf5243d7bf884fb1b8818b" />
+ <delta serial="50450" uri="https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50450/delta.xml" hash="968b9b9e4236309c1219bb4dc8a71dcf7492103309c8d28ec95f1904b54fc58c" />
+</notification>
--- /dev/null
+test-rrdp: session_id: 8fe05c2e-047d-49e7-8398-cd4250a572b1, serial: 50550
+test-rrdp: snapshot_uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50550/snapshot.xml
+test-rrdp: snapshot hash: AE52F78BCB1B258A1DA924122971B0FDDFCE4C01B2B2DBA59C9B28EF1D94C02B
+OK
--- /dev/null
+test-rrdp: session_id: 8fe05c2e-047d-49e7-8398-cd4250a572b1, serial: 50550
+test-rrdp: snapshot_uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50550/snapshot.xml
+test-rrdp: snapshot hash: AE52F78BCB1B258A1DA924122971B0FDDFCE4C01B2B2DBA59C9B28EF1D94C02B
+test-rrdp: delta serial 50501 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50501/delta.xml
+test-rrdp: delta hash: 40521FB9995ACA55D39360985C336619E08072A6AFFFCE97753E701A0D65D57B
+test-rrdp: delta serial 50502 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50502/delta.xml
+test-rrdp: delta hash: 1036A71DF3129449E1403F3BEACFA427D59659FAC0B45C9E3DFFDBEBDB17D722
+test-rrdp: delta serial 50503 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50503/delta.xml
+test-rrdp: delta hash: E8DE1E10D05734BB9EFE65202B96023D3770F0B8FD457249676214612F4685B3
+test-rrdp: delta serial 50504 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50504/delta.xml
+test-rrdp: delta hash: CDCD746257A0F35BBCE0B1832C2DF4CF25751C281FDE23CAE8B17F607F1E82E1
+test-rrdp: delta serial 50505 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50505/delta.xml
+test-rrdp: delta hash: 50C95FF4B63C03836FE291AFCA61FDA25C96BC0D280E421DDDC307E591FE8F81
+test-rrdp: delta serial 50506 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50506/delta.xml
+test-rrdp: delta hash: 7C9C62DA4DD109E5151FCC0EA366DB343E35AB7F2A62D81D6C54EEE1E1FD72B1
+test-rrdp: delta serial 50507 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50507/delta.xml
+test-rrdp: delta hash: 20360D8B294E3A6E62DE2AF58955AFE601507231E6937B375DE0C047A69CD9C1
+test-rrdp: delta serial 50508 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50508/delta.xml
+test-rrdp: delta hash: B4AE54C1207EC9A12A5E20091004830FB3D146F62B2396A6C3DE2AB0795ED2E7
+test-rrdp: delta serial 50509 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50509/delta.xml
+test-rrdp: delta hash: FCD7FE3D59F4B8DAA40920C7B3C5C4D149660AFD35DFCA53EDE7671919802CFB
+test-rrdp: delta serial 50510 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50510/delta.xml
+test-rrdp: delta hash: 6D8D296CA28CA390B761D25BDB69EAA0086242911A90965C7436D602B4190B66
+test-rrdp: delta serial 50511 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50511/delta.xml
+test-rrdp: delta hash: 9015620F5B20DBA3DEDC63F90C0CFAB5DD3816217976C6DCC4A68D5555649DC9
+test-rrdp: delta serial 50512 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50512/delta.xml
+test-rrdp: delta hash: 155C0F96DE414AC4CA7D60DE7B1ACBECDF5B192CCAE6AF3C78F06FFF212138F4
+test-rrdp: delta serial 50513 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50513/delta.xml
+test-rrdp: delta hash: 85DAF825C8335D8F59FD6B32B25F9B7152F89038B74ED3366A6EA59BD2F4E600
+test-rrdp: delta serial 50514 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50514/delta.xml
+test-rrdp: delta hash: 70D288EC67C4B47B6DC177BFB735DDD6542B2A9E484BAE770534A83FD515CE8B
+test-rrdp: delta serial 50515 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50515/delta.xml
+test-rrdp: delta hash: BD258657DE4C220AD500CC0ECE87CFFCAD813ECD30A63DEFF28086A5F2DCBB5F
+test-rrdp: delta serial 50516 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50516/delta.xml
+test-rrdp: delta hash: FADEE13B825F713E931EDADEDC79B1F86F4E501EF6C153C0F5FD4401C73B3065
+test-rrdp: delta serial 50517 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50517/delta.xml
+test-rrdp: delta hash: EAC5270A5109E95683EB73153E7F5E081F6DA473048782CE4E0E708AD2264B3A
+test-rrdp: delta serial 50518 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50518/delta.xml
+test-rrdp: delta hash: 30A580DD74F8F5CF1BF83BC8643171A09482FB401E3F2F0443934EE675CA8107
+test-rrdp: delta serial 50519 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50519/delta.xml
+test-rrdp: delta hash: 0C07702BAEE536F54F5A35BC481C422C170974DCC2BD4F99E4F58028901B3A52
+test-rrdp: delta serial 50520 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50520/delta.xml
+test-rrdp: delta hash: AB32D797DFA4D0490888D129BA275F9C4A816F409B5D99DBA76C07AB14BA3A2B
+test-rrdp: delta serial 50521 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50521/delta.xml
+test-rrdp: delta hash: 321D3C439DC175974842A52D936EC13FC6A73912F75E6AE66D99B9EAAC09E84D
+test-rrdp: delta serial 50522 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50522/delta.xml
+test-rrdp: delta hash: AA249C432D2EAEFF266B3A875C1CBF721491C10776A28D62CD5CF0CCE891E834
+test-rrdp: delta serial 50523 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50523/delta.xml
+test-rrdp: delta hash: ABD00B8AEB0555A965F83EA89853E5A8179D5F00E341C7F958E95C3BD6DF8807
+test-rrdp: delta serial 50524 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50524/delta.xml
+test-rrdp: delta hash: 6BD5645CDA5490EB42737ED94F249C9166F626231B5315C1205C4E1D8E7FD409
+test-rrdp: delta serial 50525 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50525/delta.xml
+test-rrdp: delta hash: 2660598AAFB968737D8A81F823D490C7157F5A6EE72EF7F2DEF8176095CB96BE
+test-rrdp: delta serial 50526 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50526/delta.xml
+test-rrdp: delta hash: E615ED42AC32529C7DFE7189F8DECA1E7EC7C4D79C03C50BD51488C7381610BB
+test-rrdp: delta serial 50527 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50527/delta.xml
+test-rrdp: delta hash: FDC9EB4E70A5F55B310015936D65A3878665D9C03631DA4B66069F4F1D812D5F
+test-rrdp: delta serial 50528 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50528/delta.xml
+test-rrdp: delta hash: 7CA7B7BBEAF412C492B4781D23F3CF3DE1CE333EF569377B57719C58195CBA6F
+test-rrdp: delta serial 50529 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50529/delta.xml
+test-rrdp: delta hash: AFBE35FAC90ED1F9FFBC9C00EF9F264E52C3CE5A963CB71D8493FEC0970C6ADE
+test-rrdp: delta serial 50530 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50530/delta.xml
+test-rrdp: delta hash: 99D665BC23A27A011684985A3F986C4A8D99EF2C5AA700DDCCA48C32D68D1DA1
+test-rrdp: delta serial 50531 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50531/delta.xml
+test-rrdp: delta hash: 8E18D6C89B7129C2450EFB4A36FEE9085EE5ABD02F0A9AADBCC2A6F4AFD1369E
+test-rrdp: delta serial 50532 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50532/delta.xml
+test-rrdp: delta hash: 26CB2AF7EF8EF4A6568832FEECCF45193503E2D5AA60EDC36F04928A91448228
+test-rrdp: delta serial 50533 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50533/delta.xml
+test-rrdp: delta hash: E45DCDAB3AC49D0F6AF740B6C42B2C48FAF539BB1BCBE6AC0EAC9E95028D1D7D
+test-rrdp: delta serial 50534 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50534/delta.xml
+test-rrdp: delta hash: 19EFF9063C421788FFA4859842CF05366862A78C9DD40D926091A6E9E6F9BB1B
+test-rrdp: delta serial 50535 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50535/delta.xml
+test-rrdp: delta hash: A749FF4E39B607F65B7D2D2B4BAABABA0198C47EA02C9EF8A8FC36529102BC3C
+test-rrdp: delta serial 50536 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50536/delta.xml
+test-rrdp: delta hash: 59FBB6D36742C51219CD1A4EF064D6A54531B82CB8DB592A4FAD9D89E867353F
+test-rrdp: delta serial 50537 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50537/delta.xml
+test-rrdp: delta hash: 13BE78BA673B89D9D8004A1C39E82F667219610371F4ECD64C3C318636419608
+test-rrdp: delta serial 50538 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50538/delta.xml
+test-rrdp: delta hash: F5B6E9E253597F0FA8C023278D9D77E75B220E1CEBAE597E906A7D6B0AB07398
+test-rrdp: delta serial 50539 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50539/delta.xml
+test-rrdp: delta hash: 397264BFBD7D466F9BDDEFE5139BA9CE392FAFE24C95F80BE00F27F40246919B
+test-rrdp: delta serial 50540 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50540/delta.xml
+test-rrdp: delta hash: A64882D43F76933BFBBA07E96A3982A6B1B15BD261F4F78FFBF19AD4C9FAFDED
+test-rrdp: delta serial 50541 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50541/delta.xml
+test-rrdp: delta hash: D9622F90E5850F38CF2ECBCD5714A9F5F699D8D0BA509F41DAA56DFEEF83CD85
+test-rrdp: delta serial 50542 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50542/delta.xml
+test-rrdp: delta hash: BEE7A540AA6FFF7C2C00D559B7E9DE6973D52FFA7121030BA534DB5F18A23FA6
+test-rrdp: delta serial 50543 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50543/delta.xml
+test-rrdp: delta hash: 7626BD5FE4528B3810806EEDE9698F0C835657024717C116024B010D0239AE58
+test-rrdp: delta serial 50544 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50544/delta.xml
+test-rrdp: delta hash: B4B36D43E649CA7B919AD5754C745A8B50A594F0250E4617C7756B9AE008EAD0
+test-rrdp: delta serial 50545 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50545/delta.xml
+test-rrdp: delta hash: 12985397A67DAED8F64EE8B653A60A02B121632169247BB95A9D3BEB0F897CA1
+test-rrdp: delta serial 50546 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50546/delta.xml
+test-rrdp: delta hash: 67DCB6751E0E31586603244CD90FC2F8A3E7EA8132AF13D95962C59898F11B24
+test-rrdp: delta serial 50547 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50547/delta.xml
+test-rrdp: delta hash: FB94B545FC52CC7CA91A42BC09AE5F89DCF7BCD758FE4BDED47F565CF991DD64
+test-rrdp: delta serial 50548 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50548/delta.xml
+test-rrdp: delta hash: 8F022550ECEE3CD13EE209C1A8FCD5E99E449295AE9D53ADCA1BA3231718B36C
+test-rrdp: delta serial 50549 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50549/delta.xml
+test-rrdp: delta hash: 0F7808520C7D54E6F0CBD37BBF391E9028FDC62BDC0F2E90D986479B3B11F8AA
+test-rrdp: delta serial 50550 uri: https://rpki.example.com/8fe05c2e-047d-49e7-8398-cd4250a572b1/50550/delta.xml
+test-rrdp: delta hash: E99CC80CB36259E73EC1FFED5A0CFBAF27D345800DA18147DBDF8316B28E027C
+OK
--- /dev/null
+test-rrdp: type: delete
+test-rrdp: uri: rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/gSk6an-JyWyxV5LYX0AB2BOJb7I.roa
+test-rrdp: data: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+test-rrdp: hash: 6F19C7760D83B12E259F35924F40BE76C6A9C963DB23A692CE192C2FAEF94271
+test-rrdp: type: update
+test-rrdp: uri: rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/nBETmuVT1txzB4h_Rn5CB4gARes.crl
+test-rrdp: data: 27b240ccb4adefc4438a0b0c94cf995fed9e1a227987e31b7fde9b67209e04c7
+test-rrdp: hash: 9AAF87B277EFB7E47AB00A4A86CAD1CD132D8A06A782D9B54202C4BFFEDE347B
+test-rrdp: type: update
+test-rrdp: uri: rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/nBETmuVT1txzB4h_Rn5CB4gARes.mft
+test-rrdp: data: 9148c46222a49fc9b18607474d549ec126d2f4dbf4fa4fe2007588b9a958d29d
+test-rrdp: hash: B45FA2DAAEEDA2B37BFF1A039ADA2C299DC6ACE28CA16DBC22664E3D89B8D556
+test-rrdp: type: add
+test-rrdp: uri: rsync://rpki.example.com/repository/DEFAULT/95/d58727-d970-44d9-abdc-93b3ad12d2f3/1/x7OkhL6fs-x6CQ4Kqd5jOkkB4pY.roa
+test-rrdp: data: 28b761092849ea963824de57bd8b0bef1de6f467b91af51c2d847fa5ae90c6dc
+test-rrdp: version: 1
+test-rrdp: session_id: 9b3f7e31-4979-ef8c-d818-73e4dadc3e6b serial: 13755
+OK
--- /dev/null
+test-rrdp: type: add
+test-rrdp: uri: rsync://rpki.example.com/rpki/TA/XUJQ4tgdREjYop786R0p_wdeyeI.cer
+test-rrdp: data: 9dbea4222e3b687772763b21da1118d858b1271c989f10adb3b2611945609dbc
+test-rrdp: type: add
+test-rrdp: uri: rsync://rpki.example.com/rpki/Sobornost-RIPE/Sobornost-OP/fxYnc2Mg1Fnou14i_Qm39uMR1bA.crl
+test-rrdp: data: 831c1b054aaff13240df899e5048b67c227689d5e5ecdf7d38f9a8e4603beb4b
+test-rrdp: type: add
+test-rrdp: uri: rsync://rpki.example.com/rpki/uplift/IBfMWA0nPFS6MGTNLNavObgEuIc.mft
+test-rrdp: data: 61bbdc519a39a870f2169d474d957713e611662c44daa7f0b9e3d922f93b0312
+test-rrdp: scope: 3
+test-rrdp: version: 1
+test-rrdp: session_id: 7e7d2563-5bbb-40b0-8723-6a2e90c85d9e serial: 28483
+OK
--- /dev/null
+test-rrdp: parse failed - DOCTYPE not allowed
+test-rrdp: stdin: parse error at line 2: parsing aborted
--- /dev/null
+test-rrdp: parse failed - DOCTYPE not allowed
+test-rrdp: stdin: parse error at line 2: parsing aborted
--- /dev/null
+<snapshot xmlns="http://www.ripe.net/rpki/rrdp" serial="28483" version="1" session_id="7e7d2563-5bbb-40b0-8723-6a2e90c85d9e">
+<publish xmlns="http://www.ripe.net/rpki/rrdp" uri="rsync://rpki.example.com/rpki/TA/XUJQ4tgdREjYop786R0p_wdeyeI.cer">
+MIIDaDCCAlCgAwIBAgICBa8wDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAxMoNkFF
+NTA5NDE3OTBDMTQwN0FCMzdBQ0Y4NzNCQTFCNzA1NDMyMTQwRDAeFw0yMTEwMTEy
+MDQxMzFaFw0yMjEwMTEyMDQxMzFaMC0xGDAWBgNVBAMTD1JPVVRFUi0wMDAwM2Nj
+YTERMA8GA1UEBRMIMDAwMDAwMDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASA
+VyND+D/8sBB6sAfYymn4a5ygMAYFuEioPffA0+xfGcAZv6a1ntdCtU70NDpSUBKG
+2KDn5B8QqlO0WCKp+IAVo4IBVTCCAVEwHQYDVR0OBBYEFF1CUOLYHURI2KKe/Okd
+Kf8HXsniMB8GA1UdIwQYMBaAFGrlCUF5DBQHqzes+HO6G3BUMhQNMBgGA1UdIAEB
+/wQOMAwwCgYIKwYBBQUHDgIwVAYDVR0fBE0wSzBJoEegRYZDcnN5bmM6Ly9jaGxv
+ZS5zb2Jvcm5vc3QubmV0L3Jwa2kvVEEvYXVVSlFYa01GQWVyTjZ6NGM3b2JjRlF5
+RkEwLmNybDBfBggrBgEFBQcBAQRTMFEwTwYIKwYBBQUHMAKGQ3JzeW5jOi8vY2hs
+b2Uuc29ib3Jub3N0Lm5ldC9ycGtpL1RBL2F1VUpRWGtNRkFlck42ejRjN29iY0ZR
+eUZBMC5jZXIwDgYDVR0PAQH/BAQDAgeAMBkGCCsGAQUFBwEIAQH/BAowCKAGMAQC
+AjzKMBMGA1UdJQQMMAoGCCsGAQUFBwMeMA0GCSqGSIb3DQEBCwUAA4IBAQBEMMvm
+OwAmPw081LOBQk5Qvpx6jKQumbdErbyz+UM86wuUpriZv34TQkqOQAg+uSCAeAy8
+LGpyep4fkfUfPjCgmOQHOiVJUcLkYCYmBsgUk9KWHPLR7YmCKEljrOwpNDF2HI/T
+obeYKIrxJIJ+vGs+5st3frftdBWNbCaY7dxjD8NCSjVF3Y3JyCqe4qhot93ghs4/
+SEUmJAdRUIxZcZH1ZAv3N0mxP3PyD0n1jrJ/dMdLC4FmDEJYj6nbxe8Kxu6wXE+O
+3pWHyW37+4ozaVranGlDFn+K31AonRw384RURKEf9ZexTRheS/BqpWEPVOtJjxjH
+l0LnExuGWTxZ6mos
+</publish>
+<publish xmlns="http://www.ripe.net/rpki/rrdp" uri="rsync://rpki.example.com/rpki/Sobornost-RIPE/Sobornost-OP/fxYnc2Mg1Fnou14i_Qm39uMR1bA.crl">
+MIIBrTCBlgIBATANBgkqhkiG9w0BAQsFADAzMTEwLwYDVQQDEyg3RjE2Mjc3MzYz
+MjBENDU5RThCQjVFMjJGRDA5QjdGNkUzMTFENUIwFw0yMDEyMjgyMDAyMjlaFw0y
+MDEyMjkwMjAyMjlaoC8wLTAfBgNVHSMEGDAWgBR/FidzYyDUWei7XiL9Cbf24xHV
+sDAKBgNVHRQEAwIBAzANBgkqhkiG9w0BAQsFAAOCAQEAYSjbe7pERFgmJMdOpHsr
+DbcJIb9xxd/7EtWb6gjcoxCnxiiSx65sOJ4y3Sb51U8eJgFMvrWzEGJx1aOEcQ0e
+CSh1jByVbphyMu4+y4bIUt459dkvrE2msOHcGUGMrqTX/4uKwLwenDArYFD5ar/W
+tWSyyGI6ra3zRRCKGzqbttm91qBNjKBFSRsZzZibxWZKeOlzVRLZPz9tyh0cg7K5
+rdpHQQ2Grf5bVpIUDgN9N01uYb81jQGOZimCMZo2sC3HFfX3tN0KriB4YU5JdUs9
+76z8WV7L0irVxkokxgpxBhodt46JH/PmeIFbQpX23B9aeeGdSWpRHTaU1pYESdIp
+6g==
+</publish>
+<publish xmlns="http://www.ripe.net/rpki/rrdp" uri="rsync://rpki.example.com/rpki/uplift/IBfMWA0nPFS6MGTNLNavObgEuIc.mft">
+MIIH8AYJKoZIhvcNAQcCoIIH4TCCB90CAQMxDTALBglghkgBZQMEAgEwggEfBgsq
+hkiG9w0BCRABGqCCAQ4EggEKMIIBBgICBb8YDzIwMjExMTI0MTAxMjEyWhgPMjAy
+MTExMjQxNjEyMTJaBglghkgBZQMEAgEwgdIwRBYfN2JWbmtaTF96X251ZzNtZUhM
+UnVFdmllNkRFLnJvYQMhAHiD6NgwQsIVGC2zWqIka9ykfLX/ROIAbEaJplrlulMB
+MEQWH0lCZk1XQTBuUEZTNk1HVE5MTmF2T2JnRXVJYy5jcmwDIQCcN0Fc02sS0g4e
+yRbcYwgZsUYzShvz434HCvnXFqxbOjBEFh9OWGNYY3Z1ZnhhejdVS2ozVGVpVG1i
+QXVhbDQucm9hAyEATn49/cJO4lEGWuy166O5hKaAOWvY7uQZgX8Pb914jCOgggT2
+MIIE8jCCA9qgAwIBAgICBcMwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAxMoMjAx
+N2NjNTgwZDI3M2M1NGJhMzA2NGNkMmNkNmFmMzliODA0Yjg4NzAeFw0yMTExMjQx
+MDEyMTJaFw0yMjA3MDEwMDAwMDBaMDMxMTAvBgNVBAMTKDRFMTc3NDdBRkYxOTg2
+QkY3QkJFNzgzMkYzMDE1QzM3MjUwNTdDMjkwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDLBJFoJXpJo0S+F8Lfgdbem5CXRNDP6yrd1oqqZDRiwe5/Az1u
+qx13PrtHvEeyJ0T1JEQfo0O/nRofmGXyNhmCsAOFb2+BlXy/BaKiM28l6DYRZM2v
+AAEn0sJibjtA3npyBfoW+GKC7chNXDTJd0c2AyX8FO8bgZge26weKuyvP2xIgmgR
+LcegEQq7JVls5a8Bl/GdNEIpX/PKsjmxVBhqXuIQ5eJbfLllwT0jkBnaqAWj+Rz0
+0gqTbJ2T8lXhDM43llPkxu3wF2IFLhugIS+oGObo2+fQhkPzwzcHGfUxbKgLgJpx
+ZpgfFjCFLjC61sw+9fyFRnSa/U8zZEDgOMPvAgMBAAGjggIOMIICCjAdBgNVHQ4E
+FgQUThd0ev8Zhr97vngy8wFcNyUFfCkwHwYDVR0jBBgwFoAUIBfMWA0nPFS6MGTN
+LNavObgEuIcwGAYDVR0gAQH/BA4wDDAKBggrBgEFBQcOAjBYBgNVHR8EUTBPME2g
+S6BJhkdyc3luYzovL2NobG9lLnNvYm9ybm9zdC5uZXQvcnBraS91cGxpZnQvSUJm
+TVdBMG5QRlM2TUdUTkxOYXZPYmdFdUljLmNybDBkBggrBgEFBQcBAQRYMFYwVAYI
+KwYBBQUHMAKGSHJzeW5jOi8vcnBraS5yaXBlLm5ldC9yZXBvc2l0b3J5L0RFRkFV
+TFQvSUJmTVdBMG5QRlM2TUdUTkxOYXZPYmdFdUljLmNlcjAOBgNVHQ8BAf8EBAMC
+B4AwgaMGCCsGAQUFBwELBIGWMIGTMFMGCCsGAQUFBzALhkdyc3luYzovL2NobG9l
+LnNvYm9ybm9zdC5uZXQvcnBraS91cGxpZnQvSUJmTVdBMG5QRlM2TUdUTkxOYXZP
+YmdFdUljLm1mdDA8BggrBgEFBQcwDYYwaHR0cHM6Ly9jaGxvZS5zb2Jvcm5vc3Qu
+bmV0L3Jwa2kvbmV3cy1wdWJsaWMueG1sMBUGCCsGAQUFBwEIAQH/BAYwBKACBQAw
+IQYIKwYBBQUHAQcBAf8EEjAQMAYEAgABBQAwBgQCAAIFADANBgkqhkiG9w0BAQsF
+AAOCAQEAjjYeUpH9tIXtkV1f2fN76HLFFaiCEilhMwkNPzmVePs3cRRGJg+qhgSz
+gLP2yngSTKX/zGUM1eQU+BMJHyhi4XOfD3Bdr7rkWq47UZSOn5N7mv/yA2UYx6gb
+dOToFwTgoyGAE0Zjxep8c2v33RUYwBaFZxuPqZYKsm1wbvVKvn+GiroPq3QEFdHr
+welCQ9u1//RN1BgXP56tBDhEI2xXDN6hOfkGs4xz+WqQnGlhU3KFAo0QR3/+EIXZ
+pB/kgkTWBFO7MF2B645GFa4VnQy9t7prwKUfgne8mFis5NmzU8rGNXfSzpSoelyU
+4xsKoY+D7DSE24Kk1vYsMl31VhtbbTGCAaowggGmAgEDgBROF3R6/xmGv3u+eDLz
+AVw3JQV8KTALBglghkgBZQMEAgGgazAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ
+ARowHAYJKoZIhvcNAQkFMQ8XDTIxMTEyNDEwMTIxMlowLwYJKoZIhvcNAQkEMSIE
+IJeKYLhddBj4+sfXo9frzQq8hi7d0FXA+3WR7AAsv2OuMA0GCSqGSIb3DQEBAQUA
+BIIBAJAgvliloHtLKq1cBGWgsxY/sIfjB06P14Ic8nDQkYtZWVXeewXUOxbbPpIG
+PlHMOe2rYV6AaeupErXOepC0DT+gFlKcDPEv+MW8mOU9gxV7i1dq6PHLOiYiKzoh
+R8/CQhKRHgCZHCm3CaaLIdZmQvDOQaXEAIJf2vguGMPqHG7AzVkHOQsWrQsoFWJs
+w5J/PtrCFJMMAc6/5dxKhEUy5yhZdBiJ0TmmyVeHYA2gYZ8UD3p0YyVKB/UZp4wc
+KmpiFkpRuvQmscZDqmOU5C6aDitOkHj3EwEoULx0qMGnBB7VaDhxPDGcL2oFn4bM
+kj4IN2Oc7BuCKj9ruDmULONsAGo=
+</publish>
+</snapshot>
--- /dev/null
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE foo [
+<!ELEMENT foo ANY >
+<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><notification version="1" session_id="9b3f7e31-4979-ef8c-d818-73e4dadc3e6b" serial="13756" xmlns="http://www.ripe.net/rpki/rrdp">&xxe;</notification>
--- /dev/null
+/* $OpenBSD: test-rrdp.c,v 1.1 2021/12/01 09:03:19 claudio Exp $ */
+/*
+ * Copyright (c) 2020 Nils Fisher <nils_fisher@hotmail.com>
+ * Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/queue.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <poll.h>
+#include <string.h>
+#include <unistd.h>
+#include <sha2.h>
+
+#include <expat.h>
+#include <openssl/sha.h>
+
+#include "extern.h"
+#include "rrdp.h"
+
+#define REGRESS_NOTIFY_URI "https://rpki.example.com/notify.xml"
+
+#define MAX_SESSIONS 12
+#define READ_BUF_SIZE (32 * 1024)
+
+#define RRDP_STATE_REQ 0x01
+#define RRDP_STATE_WAIT 0x02
+#define RRDP_STATE_PARSE 0x04
+#define RRDP_STATE_PARSE_ERROR 0x08
+#define RRDP_STATE_PARSE_DONE 0x10
+#define RRDP_STATE_HTTP_DONE 0x20
+#define RRDP_STATE_DONE (RRDP_STATE_PARSE_DONE | RRDP_STATE_HTTP_DONE)
+
+struct rrdp {
+ TAILQ_ENTRY(rrdp) entry;
+ size_t id;
+ char *notifyuri;
+ char *local;
+ char *last_mod;
+
+ struct pollfd *pfd;
+ int infd;
+ int state;
+ unsigned int file_pending;
+ unsigned int file_failed;
+ enum http_result res;
+ enum rrdp_task task;
+
+ char hash[SHA256_DIGEST_LENGTH];
+ SHA256_CTX ctx;
+
+ struct rrdp_session repository;
+ struct rrdp_session current;
+ XML_Parser parser;
+ struct notification_xml *nxml;
+ struct snapshot_xml *sxml;
+ struct delta_xml *dxml;
+};
+
+void
+logx(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vwarnx(fmt, ap);
+ va_end(ap);
+}
+
+char *
+xstrdup(const char *s)
+{
+ char *r;
+ if ((r = strdup(s)) == NULL)
+ err(1, "strdup");
+ return r;
+}
+
+/*
+ * Send a blob of data to the main process to store it in the repository.
+ */
+void
+rrdp_publish_file(struct rrdp *s, struct publish_xml *pxml,
+ unsigned char *data, size_t datasz)
+{
+ char buf[SHA256_DIGEST_STRING_LENGTH];
+ char *hash = NULL;
+
+ switch (pxml->type) {
+ case PUB_ADD:
+ logx("type: %s", "add");
+ break;
+ case PUB_UPD:
+ logx("type: %s", "update");
+ hash = hex_encode(pxml->hash, sizeof(pxml->hash));
+ break;
+ case PUB_DEL:
+ logx("type: %s", "delete");
+ hash = hex_encode(pxml->hash, sizeof(pxml->hash));
+ break;
+ default:
+ errx(1, "unknown publish type");
+ }
+ logx("uri: %s", pxml->uri);
+ SHA256Data(data, datasz, buf);
+ logx("data: %s", buf);
+
+ if (hash)
+ logx("hash: %s", hash);
+ free(hash);
+}
+
+static struct rrdp *
+rrdp_new(size_t id, char *local, char *notify, char *session_id,
+ long long serial, char *last_mod)
+{
+ struct rrdp *s;
+
+ if ((s = calloc(1, sizeof(*s))) == NULL)
+ err(1, NULL);
+
+ s->infd = 0; /* stdin */
+ s->id = id;
+ s->local = local;
+ s->notifyuri = notify;
+ s->repository.session_id = session_id;
+ s->repository.serial = serial;
+ s->repository.last_mod = last_mod;
+
+ s->state = RRDP_STATE_REQ;
+ if ((s->parser = XML_ParserCreate("US-ASCII")) == NULL)
+ err(1, "XML_ParserCreate");
+
+ return s;
+}
+
+static void
+rrdp_free(struct rrdp *s)
+{
+ if (s == NULL)
+ return;
+
+ free_notification_xml(s->nxml);
+ free_snapshot_xml(s->sxml);
+ free_delta_xml(s->dxml);
+
+ if (s->parser)
+ XML_ParserFree(s->parser);
+ if (s->infd != -1)
+ close(s->infd);
+ free(s->notifyuri);
+ free(s->local);
+ free(s->last_mod);
+ free(s->repository.last_mod);
+ free(s->repository.session_id);
+ free(s->current.last_mod);
+ free(s->current.session_id);
+
+ free(s);
+}
+
+static void
+rrdp_finished(struct rrdp *s)
+{
+ XML_Parser p = s->parser;
+ size_t id = s->id;
+
+ if (s->state & RRDP_STATE_PARSE_ERROR)
+ return;
+
+ /*
+ * Finalize parsing on success to be sure that
+ * all of the XML is correct. Needs to be done here
+ * since the call would most probably fail for non
+ * successful data fetches.
+ */
+ if (XML_Parse(p, NULL, 0, 1) != XML_STATUS_OK) {
+ warnx("%s: XML error at line %llu: %s", s->local,
+ (unsigned long long)XML_GetCurrentLineNumber(p),
+ XML_ErrorString(XML_GetErrorCode(p)));
+ return;
+ }
+
+ switch (s->task) {
+ case NOTIFICATION:
+ log_notification_xml(s->nxml);
+ break;
+ case SNAPSHOT:
+ log_snapshot_xml(s->sxml);
+ break;
+ case DELTA:
+ log_delta_xml(s->dxml);
+ break;
+ }
+}
+
+static void
+rrdp_data_handler(struct rrdp *s)
+{
+ char buf[READ_BUF_SIZE];
+ XML_Parser p = s->parser;
+ ssize_t len;
+
+ len = read(s->infd, buf, sizeof(buf));
+ if (len == -1) {
+ s->state |= RRDP_STATE_PARSE_ERROR;
+ warn("%s: read failure", s->local);
+ return;
+ }
+ if ((s->state & RRDP_STATE_PARSE) == 0)
+ errx(1, "%s: bad parser state", s->local);
+ if (len == 0) {
+ /* parser stage finished */
+ close(s->infd);
+ s->infd = -1;
+
+ if (s->task != NOTIFICATION) {
+ char h[SHA256_DIGEST_LENGTH];
+
+ SHA256_Final(h, &s->ctx);
+ if (memcmp(s->hash, h, sizeof(s->hash)) != 0) {
+ s->state |= RRDP_STATE_PARSE_ERROR;
+ warnx("%s: bad message digest", s->local);
+ }
+ }
+
+ s->state |= RRDP_STATE_PARSE_DONE;
+ rrdp_finished(s);
+ return;
+ }
+
+ /* parse and maybe hash the bytes just read */
+ if (s->task != NOTIFICATION)
+ SHA256_Update(&s->ctx, buf, len);
+ if ((s->state & RRDP_STATE_PARSE_ERROR) == 0 &&
+ XML_Parse(p, buf, len, 0) != XML_STATUS_OK) {
+ warnx("%s: parse error at line %llu: %s", s->local,
+ (unsigned long long)XML_GetCurrentLineNumber(p),
+ XML_ErrorString(XML_GetErrorCode(p)));
+ s->state |= RRDP_STATE_PARSE_ERROR;
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ struct rrdp *s = NULL;
+ const char *e;
+ char *session_id = NULL;
+ char hash[SHA256_DIGEST_LENGTH];
+ long long serial = 0;
+ int c;
+
+
+ while ((c = getopt(argc, argv, "dH:N:nS:s")) != -1)
+ switch (c) {
+ case 'd':
+ if (s)
+ goto usage;
+ s = rrdp_new(0, "stdin", REGRESS_NOTIFY_URI,
+ session_id, serial, NULL);
+ s->dxml = new_delta_xml(s->parser,
+ &s->repository, s);
+ s->task = DELTA;
+ SHA256_Init(&s->ctx);
+ memcpy(s->hash, hash, sizeof(s->hash));
+ break;
+ case 'H':
+ if (hex_decode(optarg, hash, sizeof(hash)) == -1)
+ errx(1, "bad hash");
+ break;
+ case 'N':
+ serial = strtonum(optarg, LLONG_MIN, LLONG_MAX, &e);
+ if (e != NULL)
+ errx(1, "serial is %s: %s", e, optarg);
+ break;
+ case 'n':
+ if (s)
+ goto usage;
+ s = rrdp_new(0, "stdin", REGRESS_NOTIFY_URI,
+ session_id, serial, NULL);
+ s->nxml = new_notification_xml(s->parser,
+ &s->repository, &s->current, s->notifyuri);
+ s->task = NOTIFICATION;
+ break;
+ case 'S':
+ session_id = optarg;
+ break;
+ case 's':
+ if (s)
+ goto usage;
+ s = rrdp_new(0, "stdin", REGRESS_NOTIFY_URI,
+ session_id, serial, NULL);
+ s->sxml = new_snapshot_xml(s->parser,
+ &s->repository, s);
+ s->task = SNAPSHOT;
+ SHA256_Init(&s->ctx);
+ memcpy(s->hash, hash, sizeof(s->hash));
+ break;
+ default:
+ goto usage;
+ }
+
+ s->state = RRDP_STATE_PARSE;
+
+ while (!(s->state & RRDP_STATE_PARSE_DONE)) {
+ rrdp_data_handler(s);
+ }
+
+ if ((s->state & RRDP_STATE_PARSE_ERROR) == 0) {
+ printf("OK\n");
+ return 0;
+ } else {
+ return 1;
+ }
+
+usage:
+ fprintf(stderr, "usage: %s [-S session_id] [-N serial] [-H hash] "
+ "-d | -n | -s\n", "test-rrdp");
+ exit(1);
+}