X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/1cce3af8c29cfa691a3e28c79227f358e5a7b3b9..624f33dfeab938e907251e3cc3062aa45353384f:/test/dnszones-src/db.test.ex diff --git a/test/dnszones-src/db.test.ex b/test/dnszones-src/db.test.ex index 8ac35367e..0efd1a28b 100644 --- a/test/dnszones-src/db.test.ex +++ b/test/dnszones-src/db.test.ex @@ -1,7 +1,5 @@ -; $Cambridge: exim/test/dnszones-src/db.test.ex,v 1.4 2006/04/18 11:13:19 ph10 Exp $ - ; This is a testing zone file for use when testing DNS handling in Exim. This -; is a fake zone of no real use - hence no SOA record. The zone name is +; is a fake zone of no real use. The zone name is ; test.ex. This file is passed through the substitution mechanism before being ; used by the fakens auxiliary program. This inserts the actual IP addresses ; of the local host into the zone. @@ -17,8 +15,12 @@ ; NOTE (3): the top-level networks for testing addresses are parameterized by ; the use of V4NET and V6NET. These networks should be such that no real ; host ever uses them. +; +; Several prefixes may be used, see the source in src/fakens.c for a complete list +; and description. test.ex. NS exim.test.ex. +test.ex. SOA exim.test.ex. hostmaster.exim.test.ex 1430683638 1200 120 604800 3600 test.ex. TXT "A TXT record for test.ex." s/lash TXT "A TXT record for s/lash.test.ex." @@ -40,13 +42,19 @@ dontqualify A V4NET.255.255.254 UpperCase A 127.0.0.1 -; A host with UTF-8 characters in its name +; A host with punycoded UTF-8 characters used for its lookup ( mx.π.test.ex ) -mx.π A V4NET.255.255.255 +mx.xn--1xa A V4NET.255.255.255 ; A non-standard name for localhost thishost A 127.0.0.1 +localhost4 A 127.0.0.1 + +; A localhost with short TTL + +TTL=2 shorthost A 127.0.0.1 + ; Something that gives both the IP and the loopback @@ -79,6 +87,7 @@ badloop A V4NET.0.0.1 v6 AAAA V6NET:ffff:836f:0a00:000a:0800:200a:c032 ; Alias A and CNAME records for the local host, under the name "eximtesthost" +; Make the A covered by DNSSEC and add a TLSA for it. eximtesthost A HOSTIPV4 alias-eximtesthost CNAME eximtesthost.test.ex. @@ -153,13 +162,19 @@ testsub.sub A V4NET.99.0.3 recurse.test.ex A V4NET.99.0.2 +; a CNAME pointing to a name with both ipv4 and ipv6 A-records +; and one with only ipv4 + +cname46 CNAME localhost +cname4 CNAME thishost + ; -------- Testing RBL records ------- ; V4NET.11.12.13 is deliberately not reverse-registered 13.12.11.V4NET.rbl A 127.0.0.2 TXT "This is a test blacklisting message" -14.12.11.V4NET.rbl A 127.0.0.2 +TTL=2 14.12.11.V4NET.rbl A 127.0.0.2 TXT "This is a test blacklisting message" 15.12.11.V4NET.rbl A 127.0.0.2 TXT "This is a very long blacklisting message, continuing for ages and ages and certainly being longer than 128 characters which was a previous limit on the length that Exim was prepared to handle." @@ -176,6 +191,11 @@ recurse.test.ex A V4NET.99.0.2 20.12.11.V4NET.rbl4 A 127.0.0.6 21.12.11.V4NET.rbl4 A 127.0.0.7 +22.12.11.V4NET.rbl4 A 127.0.0.128 + TXT "This is a test blacklisting4 message" + +22.12.11.V4NET.rbl5 A 127.0.0.1 + TXT "This is a test blacklisting5 message" 1.13.13.V4NET.rbl CNAME non-exist.test.ex. 2.13.13.V4NET.rbl A 127.0.0.1 @@ -307,6 +327,11 @@ mxt14 MX 4 ten-5-6.test.ex. MX 5 ten-5.test.ex. MX 6 ten-6.test.ex. +; Non-local hosts with different precedence + +mxt15 MX 10 ten-1.test.ex. + MX 20 ten-2.test.ex. + ; Large number of IP addresses at one MX value, and then some ; at another, to check that hosts_max_try tries the MX different ; values if it can. @@ -347,9 +372,13 @@ mxt97 MX 1 ten-1.test.ex. mxt1c MX 1 dontqualify. -; MX with UTF-8 characters in its name +; MX with punycoded UTF-8 characters used for its lookup ( π.test.ex ) + +xn--1xa MX 0 mx.π.test.ex. -π MX 0 mx.π.test.ex. +; MX with actual UTF-8 characters in its name, for allow_utf8_domains mode test + +π MX 0 mx.xn--1xa.test.ex. ; -------- Testing SRV records -------- @@ -374,4 +403,187 @@ _client._smtp.csa2 SRV 1 1 0 csa2.test.ex. csa1 A V4NET.9.8.7 csa2 A V4NET.9.8.8 +; ------- Testing DNSSEC ---------- + +mx-unsec-a-unsec MX 5 a-unsec +mx-unsec-a-sec MX 5 a-sec +DNSSEC mx-sec-a-unsec MX 5 a-unsec +DNSSEC mx-sec-a-sec MX 5 a-sec +DNSSEC mx-sec-a-aa MX 5 a-aa +AA mx-aa-a-sec MX 5 a-sec + +a-unsec A V4NET.0.0.100 +DNSSEC a-sec A V4NET.0.0.100 +DNSSEC l-sec A 127.0.0.1 + +AA a-aa A V4NET.0.0.100 + +; ------- Testing DANE ------------ +; Since these refer to certs in the exim-ca tree, they must be regenerated any time that tree is. +; + +; full suite dns chain, sha512 +; +; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \ +; | openssl pkey -pubin -outform DER \ +; | openssl dgst -sha512 \ +; | awk '{print $2}' +; +DNSSEC mxdane512ee MX 1 dane512ee +DNSSEC dane512ee A HOSTIPV4 +DNSSEC _1225._tcp.dane512ee TLSA 3 1 2 69e8a5ddf24df2c51dc503959d26e621be4ce3853f71890512de3ae3390c5749ef3368dd4d274669b0653da8c3663f12ca092cd98e5e242e4de57ee6aa01cde1 + +; A-only, sha256 +; +; openssl x509 -in aux-fixed/exim-ca/example.com/server1.example.com/server1.example.com.pem -noout -pubkey \ +; | openssl pkey -pubin -outform DER \ +; | openssl dgst -sha256 \ +; | awk '{print $2}' +; +DNSSEC dane256ee A HOSTIPV4 +DNSSEC _1225._tcp.dane256ee TLSA 3 1 1 827664533176a58b3578e0e91d77d79d036d3a97f023d82baeefa8b8e13b44f8 + +; full MX, sha256, TA-mode +; +; openssl x509 -in aux-fixed/exim-ca/example.com/CA/CA.pem -fingerprint -sha256 -noout \ +; | awk -F= '{print $2}' | tr -d : | tr '[A-F]' '[a-f]' +; +DNSSEC mxdane256ta MX 1 dane256ta +DNSSEC dane256ta A HOSTIPV4 +DNSSEC _1225._tcp.dane256ta TLSA 2 0 1 cb0fa6a633e52c787657f5ca0da1030800223cac459577b9b6a55ac9733348e5 + + +; full MX, sha256, TA-mode, cert-key-only +; Indicates a trust-anchor for a chain involving an Authority Key ID extension +; linkage, as this excites a bug in OpenSSL 1.0.2 which the DANE code has to +; work around, while synthesizing a selfsigned parent for it. +; As it happens it is also an intermediate cert in the CA-rooted chain, as this +; was initially thought ot be a factor. +; +; openssl x509 -in aux-fixed/exim-ca/example.com/CA/Signer.pem -noout -pubkey \ +; | openssl pkey -pubin -outform DER \ +; | openssl dgst -sha256 \ +; | awk '{print $2}' +; +DNSSEC mxdane256tak MX 1 dane256tak +DNSSEC dane256tak A HOSTIPV4 +DNSSEC _1225._tcp.dane256tak TLSA 2 1 1 73e279c0f5f5a9ee9851bbbc39023603d7b266acfd0764419c3b07cc380b79f9 + + +; full MX, both TA & EE modes, cert is selfsigned +; for testing an issue in the gnutls impl +; +; tas: +; openssl x509 -in aux-fixed/cert1 -fingerprint -sha256 -noout \ +; | awk -F= '{print $2}' | tr -d : | tr '[A-F]' '[a-f]' +; +DNSSEC mxdane256tas MX 1 dane256tas +DNSSEC dane256tas A HOSTIPV4 +DNSSEC _1225._tcp.dane256tas TLSA 2 0 1 34d3624101b954d667c1a5ac18078b196cd17fbd61e23df73249c1afab747124 +DNSSEC mxdane256task MX 1 dane256task +DNSSEC dane256task A HOSTIPV4 +DNSSEC _1225._tcp.dane256task TLSA 2 1 1 c1241d8cc61401079437240467a47e21db921d3398883cd9bb038cc461d7beab +DNSSEC mxdane256ees MX 1 dane256ees +DNSSEC dane256ees A HOSTIPV4 +DNSSEC _1225._tcp.dane256ees TLSA 3 1 1 c1241d8cc61401079437240467a47e21db921d3398883cd9bb038cc461d7beab + + + +; A multiple-return MX where all TLSA lookups defer +DNSSEC mxdanelazy MX 1 danelazy +DNSSEC MX 2 danelazy2 + +DNSSEC danelazy A HOSTIPV4 +DNSSEC danelazy2 A 127.0.0.1 + +DNSSEC _1225._tcp.danelazy CNAME test.again.dns. +DNSSEC _1225._tcp.danelazy2 CNAME test.again.dns. + +; hosts with no TLSA (just missing here, hence the TLSA NXDMAIN is _insecure_; a broken dane config) +; 1 for dane-required, 2 for merely requested +DNSSEC dane.no.1 A HOSTIPV4 +DNSSEC dane.no.2 A 127.0.0.1 + +; a broken dane config (or under attack) where the TLSA lookup fails (as opposed to there not being one) +DNSSEC danebroken1 A 127.0.0.1 +_1225._tcp.danebroken1 CNAME test.fail.dns. + +; a broken dane config (or under attack) where the TLSA record is wrong +; (127.0.0.1 for merely dane-requested, but having gotten the TLSA it is supposedly definitive) +DNSSEC danebroken2 A 127.0.0.1 +DNSSEC _1225._tcp.danebroken2 TLSA 2 0 1 cb0fa60000000000000000000000000000000000000000000000000000000000 + +; a broken dane config (or under attack) where the TLSA record is correct but not DNSSEC-assured +; (record copied from dane256ee above) +; 3 for dane-requested, 4 for dane-required +DNSSEC danebroken3 A 127.0.0.1 +_1225._tcp.danebroken3 TLSA 2 0 1 827664533176a58b3578e0e91d77d79d036d3a97f023d82baeefa8b8e13b44f8 +DNSSEC danebroken4 A HOSTIPV4 +_1225._tcp.danebroken4 TLSA 2 0 1 827664533176a58b3578e0e91d77d79d036d3a97f023d82baeefa8b8e13b44f8 + +; a broken dane config (or under attack) where the address record is correct but not DNSSEC-assured +; (TLSA record copied from dane256ee above) +; 5 for dane-requested, 6 for dane-required +danebroken5 A 127.0.0.1 +DNSSEC _1225._tcp.danebroken5 TLSA 2 0 1 827664533176a58b3578e0e91d77d79d036d3a97f023d82baeefa8b8e13b44f8 +danebroken6 A HOSTIPV4 +DNSSEC _1225._tcp.danebroken6 TLSA 2 0 1 827664533176a58b3578e0e91d77d79d036d3a97f023d82baeefa8b8e13b44f8 + +; a good dns config saying there is no dane support, by securely returning NOXDOMAIN for TLSA lookups +; 3 for dane-required, 4 for merely requested +; the TLSA data here is dummy; ignored +DNSSEC dane.no.3 A HOSTIPV4 +DNSSEC dane.no.4 A 127.0.0.1 + +DNSSEC NXDOMAIN _1225._tcp.dane.no.3 TLSA 2 0 1 eec923139018c540a344c5191660ecba1ac3708525a98bfc338e17f31d3fa741 +DNSSEC NXDOMAIN _1225._tcp.dane.no.4 TLSA 2 0 1 eec923139018c540a344c5191660ecba1ac3708525a98bfc338e17f31d3fa741 + +; a mixed-usage set of TLSA records, EE one failing. TA one coped from dane256ta. +DNSSEC danemixed A 127.0.0.1 +DNSSEC _1225._tcp.danemixed TLSA 2 0 1 cb0fa6a633e52c787657f5ca0da1030800223cac459577b9b6a55ac9733348e5 +DNSSEC TLSA 3 1 1 8276000000000000000000000000000000000000000000000000000000000000 + +; ------- Testing delays ------------ + +DELAY=500 delay500 A HOSTIPV4 +DELAY=1500 delay1500 A HOSTIPV4 + +; ------- DKIM --------- + +; public key, base64 - matches private key in aux-fixed/dkim/dkim.private +; openssl genrsa -out aux-fixed/dkim/dkim.private 1024 +; openssl rsa -in aux-fixed/dkim/dkim.private -out /dev/stdout -pubout -outform PEM +; +; Deliberate bad version, having extra backslashes +; sha256-hash-only version.... appears to be too long, gets truncated +; +; Another, 512-bit (with a Notes field) +; 512 requiring sha1 hash +; 512 requiring sha256 hash +; +sel._domainkey TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXRFf+VhT+lCgFhhSkinZKcFNeRzjYdW8vT29Rbb3NadvTFwAd+cVLPFwZL8H5tUD/7JbUPqNTCPxmpgIL+V5T4tEZMorHatvvUM2qfcpQ45IfsZ+YdhbIiAslHCpy4xNxIR3zylgqRUF4+Dtsaqy3a5LhwMiKCLrnzhXk1F1hxwIDAQAB" +sel_bad._domainkey TXT "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXRFf+VhT+lCgFhhSkinZKcFNeRzjYdW8vT29Rbb3NadvTFwAd+cVLPFwZL8H5tUD/7JbUPqNTCPxmpgIL+V5T4tEZMorHatvvUM2qfcpQ45IfsZ+YdhbIiAslHCpy4xNxIR3zylgqRUF4+Dtsaqy3a5LhwMiKCLrnzhXk1F1hxwIDAQAB" +sel_sha256._domainkey TXT "v=DKIM1; h=sha256; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXRFf+VhT+lCgFhhSkinZKcFNeRzjYdW8vT29Rbb3NadvTFwAd+cVLPFwZL8H5tUD/7JbUPqNTCPxmpgIL+V5T4tEZMorHatvvUM2qfcpQ45IfsZ+YdhbIiAslHCpy4xNxIR3zylgqRUF4+Dtsaqy3a5LhwMiKCLrnzhXk1F1hxwIDAQAB" + +ses._domainkey TXT "v=DKIM1; n=halfkilo; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL6eAQxd9didJ0/+05iDwJOqT6ly826Vi8aGPecsBiYK5/tAT97fxXk+dPWMZp9kQxtknEzYjYjAydzf+HQ2yJMCAwEAAQ==" +ses_sha1._domainkey TXT "v=DKIM1; h=sha1; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL6eAQxd9didJ0/+05iDwJOqT6ly826Vi8aGPecsBiYK5/tAT97fxXk+dPWMZp9kQxtknEzYjYjAydzf+HQ2yJMCAwEAAQ==" +ses_sha256._domainkey TXT "v=DKIM1; h=sha256; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL6eAQxd9didJ0/+05iDwJOqT6ly826Vi8aGPecsBiYK5/tAT97fxXk+dPWMZp9kQxtknEzYjYjAydzf+HQ2yJMCAwEAAQ==" + +sel2._domainkey TXT "v=spf1 mx a include:spf.nl2go.com -all" +sel2._domainkey TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXRFf+VhT+lCgFhhSkinZKcFNeRzjYdW8vT29Rbb3NadvTFwAd+cVLPFwZL8H5tUD/7JbUPqNTCPxmpgIL+V5T4tEZMorHatvvUM2qfcpQ45IfsZ+YdhbIiAslHCpy4xNxIR3zylgqRUF4+Dtsaqy3a5LhwMiKCLrnzhXk1F1hxwIDAQAB" + +; EC signing, using Ed25519 +; - needs GnuTLS 3.6.0 (fedora rawhide has that) +; certtool --generate-privkey --key-type=ed25519 --outfile=dkim_ed25519.private +; certtool --load_privkey=dkim_ed25519.private --pubkey_info --outder | tail -c +13 | base64 + +sed._domainkey TXT "v=DKIM1; k=ed25519; p=sPs07Vu29FpHT/80UXUcYHFOHifD4o2ZlP2+XUh9g6E=" + +; version of the above wrapped in SubjectPublicKeyInfo, in case the WG plumps in that direction +; certtool --load_privkey=aux-fixed/dkim/dkim_ed25519.private --pubkey_info +; (and grab the b64 content from between the pem headers) + +sedw._domainkey TXT "v=DKIM1; k=ed25519; p=MCowBQYDK2VwAyEAsPs07Vu29FpHT/80UXUcYHFOHifD4o2ZlP2+XUh9g6E=" + + ; End