diff --git a/data/aut-num/AS140936 b/data/aut-num/AS140936 new file mode 100644 index 000000000..b01277423 --- /dev/null +++ b/data/aut-num/AS140936 @@ -0,0 +1,6 @@ +aut-num: AS140936 +as-name: SUNNET +admin-c: SUNNET-DN42 +tech-c: SUNNET-DN42 +mnt-by: SUNNET-MNT +source: APNIC diff --git a/data/aut-num/AS4201270002 b/data/aut-num/AS4201270002 index c26b34a6a..4a14eb2e2 100644 --- a/data/aut-num/AS4201270002 +++ b/data/aut-num/AS4201270002 @@ -1,5 +1,5 @@ aut-num: AS4201270002 -as-name: Septs HomeLabs +as-name: [transferable] admin-c: SEPTS-NEONETWORK tech-c: SEPTS-NEONETWORK remarks: Imported from neonetwork, do not edit! diff --git a/data/aut-num/AS4201270008 b/data/aut-num/AS4201270008 index f56897d7b..0d036609a 100644 --- a/data/aut-num/AS4201270008 +++ b/data/aut-num/AS4201270008 @@ -1,6 +1,6 @@ aut-num: AS4201270008 -as-name: MagicNeko -descr: MagicNeko Network Internet exchange +as-name: MagicNeko Experimental Network +descr: MagicNeko Network admin-c: ICECAT-NEONETWORK tech-c: ICECAT-NEONETWORK remarks: Imported from neonetwork, do not edit! diff --git a/data/aut-num/AS4242421080 b/data/aut-num/AS4242421080 index fcf4c5bcf..0e0b44cd4 100644 --- a/data/aut-num/AS4242421080 +++ b/data/aut-num/AS4242421080 @@ -3,4 +3,6 @@ as-name: JLU5-AS admin-c: JLU5-DN42 tech-c: JLU5-DN42 mnt-by: JLU5-MNT +remarks: Open peering with Wireguard, see https://jlu5.com/dn42 for +remarks: details and contact info source: DN42 diff --git a/data/aut-num/AS4242421130 b/data/aut-num/AS4242421130 new file mode 100644 index 000000000..45481f75b --- /dev/null +++ b/data/aut-num/AS4242421130 @@ -0,0 +1,7 @@ +aut-num: AS4242421130 +as-name: BONJOU2333-AS +descr: Peer with me at bonjou2333@gmail.com +admin-c: BONJOU2333-DN42 +tech-c: BONJOU2333-DN42 +mnt-by: BONJOU2333-MNT +source: DN42 diff --git a/data/aut-num/AS4242422131 b/data/aut-num/AS4242422131 new file mode 100644 index 000000000..4e0779b74 --- /dev/null +++ b/data/aut-num/AS4242422131 @@ -0,0 +1,6 @@ +aut-num: AS4242422131 +as-name: AS for Julia's network +admin-c: JULIA-DN42 +tech-c: JULIA-DN42 +mnt-by: JULIA-MNT +source: DN42 diff --git a/data/aut-num/AS4242422761 b/data/aut-num/AS4242422761 new file mode 100644 index 000000000..2ddd444f0 --- /dev/null +++ b/data/aut-num/AS4242422761 @@ -0,0 +1,6 @@ +aut-num: AS4242422761 +as-name: Arg Network +admin-c: ARG-DN42 +tech-c: ARG-DN42 +mnt-by: ARG-MNT +source: DN42 diff --git a/data/aut-num/AS4242423266 b/data/aut-num/AS4242423266 new file mode 100644 index 000000000..81c21a9a2 --- /dev/null +++ b/data/aut-num/AS4242423266 @@ -0,0 +1,6 @@ +aut-num: AS4242423266 +as-name: AS for DANN Network +admin-c: DANN-DN42 +tech-c: DANN-DN42 +mnt-by: DANN-MNT +source: DN42 diff --git a/data/aut-num/AS4242423267 b/data/aut-num/AS4242423267 new file mode 100644 index 000000000..0bcc3bbeb --- /dev/null +++ b/data/aut-num/AS4242423267 @@ -0,0 +1,6 @@ +aut-num: AS4242423267 +as-name: AS for CHILLONETWORK +admin-c: CHILLONETWORK-DN42 +tech-c: CHILLONETWORK-DN42 +mnt-by: CHILLONETWORK-MNT +source: DN42 diff --git a/data/aut-num/AS4242423878 b/data/aut-num/AS4242423878 new file mode 100644 index 000000000..a170128a7 --- /dev/null +++ b/data/aut-num/AS4242423878 @@ -0,0 +1,7 @@ +aut-num: AS4242423878 +as-name: JELLYCHOU-AS +descr: Jelly Chou's Main network, open to peering. +admin-c: JELLYCHOU-DN42 +tech-c: JELLYCHOU-DN42 +mnt-by: JELLYCHOU-MNT +source: DN42 diff --git a/data/dns/arg.dn42 b/data/dns/arg.dn42 new file mode 100644 index 000000000..35b70b11d --- /dev/null +++ b/data/dns/arg.dn42 @@ -0,0 +1,6 @@ +domain: arg.dn42 +admin-c: ARG-DN42 +tech-c: ARG-DN42 +mnt-by: ARG-MNT +nserver: ns.nia.dn42 +source: DN42 diff --git a/data/dns/chillo.dn42 b/data/dns/chillo.dn42 new file mode 100644 index 000000000..7f0e39a22 --- /dev/null +++ b/data/dns/chillo.dn42 @@ -0,0 +1,7 @@ +domain: chillo.dn42 +admin-c: CHILLONETWORK-DN42 +tech-c: CHILLONETWORK-DN42 +mnt-by: CHILLONETWORK-MNT +nserver: ns1.chillo.dn42 172.23.178.93 +nserver: ns2.chillo.dn42 172.23.178.94 +source: DN42 diff --git a/data/dns/julia.dn42 b/data/dns/julia.dn42 new file mode 100644 index 000000000..9cba4c860 --- /dev/null +++ b/data/dns/julia.dn42 @@ -0,0 +1,7 @@ +domain: julia.dn42 +admin-c: JULIA-DN42 +tech-c: JULIA-DN42 +mnt-by: JULIA-MNT +nserver: ns1.julia.dn42 fdb4:acab:1312::2 +nserver: ns1.julia.dn42 172.20.15.40 +source: DN42 diff --git a/data/inet6num/fd00:1953:615::_48 b/data/inet6num/fd00:1953:615::_48 new file mode 100644 index 000000000..f95328aa1 --- /dev/null +++ b/data/inet6num/fd00:1953:615::_48 @@ -0,0 +1,11 @@ +inet6num: fd00:1953:0615:0000:0000:0000:0000:0000 - fd00:1953:0615:ffff:ffff:ffff:ffff:ffff +cidr: fd00:1953:615::/48 +netname: ARG-IPV6 +descr: Core IPv6 Network of Arg Network +country: CN +admin-c: ARG-DN42 +tech-c: ARG-DN42 +mnt-by: ARG-MNT +nserver: ns.nia.dn42 +status: ASSIGNED +source: DN42 diff --git a/data/inet6num/fd10:127:233:1c3a::_64 b/data/inet6num/fd10:127:233:1c3a::_64 new file mode 100644 index 000000000..0aac50356 --- /dev/null +++ b/data/inet6num/fd10:127:233:1c3a::_64 @@ -0,0 +1,8 @@ +inet6num: fd10:0127:0233:1c3a:0000:0000:0000:0000 - fd10:0127:0233:1c3a:ffff:ffff:ffff:ffff +cidr: fd10:127:233:1c3a::/64 +netname: MagicNeko VPN +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/inet6num/fd42:1130::_48 b/data/inet6num/fd42:1130::_48 new file mode 100644 index 000000000..88fb6720f --- /dev/null +++ b/data/inet6num/fd42:1130::_48 @@ -0,0 +1,10 @@ +inet6num: fd42:1130:0000:0000:0000:0000:0000:0000 - fd42:1130:0000:ffff:ffff:ffff:ffff:ffff +netname: BONJOU2333-IPV6 +descr: Peer with me at bonjou2333@gmail.com +country: CN +admin-c: BONJOU2333-DN42 +tech-c: BONJOU2333-DN42 +mnt-by: BONJOU2333-MNT +status: ASSIGNED +cidr: fd42:1130::/48 +source: DN42 diff --git a/data/inet6num/fd6d:3f59:4c68::_48 b/data/inet6num/fd6d:3f59:4c68::_48 new file mode 100644 index 000000000..94b5f528e --- /dev/null +++ b/data/inet6num/fd6d:3f59:4c68::_48 @@ -0,0 +1,10 @@ +inet6num: fd6d:3f59:4c68:0000:0000:0000:0000:0000 - fd6d:3f59:4c68:ffff:ffff:ffff:ffff:ffff +netname: JELLYCHOU-IPV6 +descr: Jelly Chou's IP space +country: CN +admin-c: JELLYCHOU-DN42 +tech-c: JELLYCHOU-DN42 +mnt-by: JELLYCHOU-MNT +status: ASSIGNED +cidr: fd6d:3f59:4c68::/48 +source: DN42 diff --git a/data/inet6num/fd8e:1889:b440::_48 b/data/inet6num/fd8e:1889:b440::_48 new file mode 100644 index 000000000..aa57fe8d4 --- /dev/null +++ b/data/inet6num/fd8e:1889:b440::_48 @@ -0,0 +1,10 @@ +inet6num: fd8e:1889:b440:0000:0000:0000:0000:0000 - fd8e:1889:b440:ffff:ffff:ffff:ffff:ffff +cidr: fd8e:1889:b440::/48 +netname: DANN-NETWORK +descr: Network of DANN +country: SG +admin-c: DANN-DN42 +tech-c: DANN-DN42 +mnt-by: DANN-MNT +status: ASSIGNED +source: DN42 diff --git a/data/inet6num/fdaa:d0e:147f::_48 b/data/inet6num/fdaa:d0e:147f::_48 index 83d8c721c..53d2d7961 100644 --- a/data/inet6num/fdaa:d0e:147f::_48 +++ b/data/inet6num/fdaa:d0e:147f::_48 @@ -5,5 +5,6 @@ country: FI admin-c: SM-DN42 tech-c: SM-DN42 mnt-by: SM-MNT +nserver: ns1.sm.dn42 status: ASSIGNED source: DN42 diff --git a/data/inet6num/fdb4:acab:1312::_48 b/data/inet6num/fdb4:acab:1312::_48 new file mode 100644 index 000000000..9b2e77499 --- /dev/null +++ b/data/inet6num/fdb4:acab:1312::_48 @@ -0,0 +1,10 @@ +inet6num: fdb4:acab:1312:0000:0000:0000:0000:0000 - fdb4:acab:1312:ffff:ffff:ffff:ffff:ffff +cidr: fdb4:acab:1312::/48 +netname: JULIA-NETWORK +descr: Julia's network +admin-c: JULIA-DN42 +tech-c: JULIA-DN42 +mnt-by: JULIA-MNT +status: ASSIGNED +nserver: ns1.julia.dn42 +source: DN42 diff --git a/data/inetnum/10.127.233.0_24 b/data/inetnum/10.127.233.0_24 index fc2d3be45..f120469fb 100644 --- a/data/inetnum/10.127.233.0_24 +++ b/data/inetnum/10.127.233.0_24 @@ -1,6 +1,6 @@ inetnum: 10.127.233.0 - 10.127.233.255 cidr: 10.127.233.0/24 -netname: Icecat-Mobile-devices +netname: Icecat Residential network occupation address admin-c: ICECAT-NEONETWORK tech-c: ICECAT-NEONETWORK remarks: Imported from neonetwork, do not edit! diff --git a/data/inetnum/10.127.235.0_24 b/data/inetnum/10.127.235.0_24 new file mode 100644 index 000000000..898ba1878 --- /dev/null +++ b/data/inetnum/10.127.235.0_24 @@ -0,0 +1,8 @@ +inetnum: 10.127.235.0 - 10.127.235.255 +cidr: 10.127.235.0/24 +netname: Icecat Global Tunnel Address (OpenVPN) +admin-c: CAINSAKURA-NEONETWORK +tech-c: CAINSAKURA-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/inetnum/10.127.236.0_24 b/data/inetnum/10.127.236.0_24 new file mode 100644 index 000000000..b445cc909 --- /dev/null +++ b/data/inetnum/10.127.236.0_24 @@ -0,0 +1,8 @@ +inetnum: 10.127.236.0 - 10.127.236.255 +cidr: 10.127.236.0/24 +netname: MagicNeko VPN +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/inetnum/10.127.237.0_24 b/data/inetnum/10.127.237.0_24 new file mode 100644 index 000000000..9c2fab438 --- /dev/null +++ b/data/inetnum/10.127.237.0_24 @@ -0,0 +1,8 @@ +inetnum: 10.127.237.0 - 10.127.237.255 +cidr: 10.127.237.0/24 +netname: MagicNeko IX (Will not broadcast) +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/inetnum/172.20.15.40_29 b/data/inetnum/172.20.15.40_29 new file mode 100644 index 000000000..e1bbafa36 --- /dev/null +++ b/data/inetnum/172.20.15.40_29 @@ -0,0 +1,9 @@ +inetnum: 172.20.15.40 - 172.20.15.47 +cidr: 172.20.15.40/29 +netname: JULIA-NETWORK +admin-c: JULIA-DN42 +tech-c: JULIA-DN42 +mnt-by: JULIA-MNT +status: ASSIGNED +nserver: ns1.julia.dn42 +source: DN42 diff --git a/data/inetnum/172.20.229.112_29 b/data/inetnum/172.20.229.112_28 similarity index 74% rename from data/inetnum/172.20.229.112_29 rename to data/inetnum/172.20.229.112_28 index 43291109f..d819b0be0 100644 --- a/data/inetnum/172.20.229.112_29 +++ b/data/inetnum/172.20.229.112_28 @@ -1,5 +1,5 @@ -inetnum: 172.20.229.112 - 172.20.229.119 -cidr: 172.20.229.112/29 +inetnum: 172.20.229.112 - 172.20.229.127 +cidr: 172.20.229.112/28 netname: JLU5-NET descr: jlu5 R&D network country: CA diff --git a/data/inetnum/172.20.233.64_26 b/data/inetnum/172.20.233.64_26 new file mode 100644 index 000000000..5252063b1 --- /dev/null +++ b/data/inetnum/172.20.233.64_26 @@ -0,0 +1,11 @@ +inetnum: 172.20.233.64 - 172.20.233.127 +netname: BONJOU2333-IPV4 +remarks: Peer with me at bonjou2333@gmail.com +descr: Peer with me at bonjou2333@gmail.com +country: CN +admin-c: BONJOU2333-DN42 +tech-c: BONJOU2333-DN42 +mnt-by: BONJOU2333-MNT +status: ASSIGNED +cidr: 172.20.233.64/26 +source: DN42 diff --git a/data/inetnum/172.20.238.128_27 b/data/inetnum/172.20.238.128_27 new file mode 100644 index 000000000..e945bc1a9 --- /dev/null +++ b/data/inetnum/172.20.238.128_27 @@ -0,0 +1,9 @@ +inetnum: 172.20.238.128 - 172.20.238.159 +netname: JELLYCHOU-IPV4 +country: CN +admin-c: JELLYCHOU-DN42 +tech-c: JELLYCHOU-DN42 +mnt-by: JELLYCHOU-MNT +status: ASSIGNED +cidr: 172.20.238.128/27 +source: DN42 diff --git a/data/inetnum/172.22.114.96_27 b/data/inetnum/172.22.114.96_27 index b05d0d529..6c35ce7bc 100644 --- a/data/inetnum/172.22.114.96_27 +++ b/data/inetnum/172.22.114.96_27 @@ -4,6 +4,7 @@ country: FI admin-c: SM-DN42 tech-c: SM-DN42 mnt-by: SM-MNT +nserver: ns1.sm.dn42 status: ASSIGNED cidr: 172.22.114.96/27 source: DN42 diff --git a/data/inetnum/172.22.128.32_28 b/data/inetnum/172.22.128.32_28 new file mode 100644 index 000000000..6b4458ccb --- /dev/null +++ b/data/inetnum/172.22.128.32_28 @@ -0,0 +1,8 @@ +inetnum: 172.22.128.32 - 172.22.128.47 +cidr: 172.22.128.32/28 +netname: DANN-NETWORK +admin-c: DANN-DN42 +tech-c: DANN-DN42 +mnt-by: DANN-MNT +status: ASSIGNED +source: DN42 diff --git a/data/inetnum/172.23.104.64_27 b/data/inetnum/172.23.104.64_27 new file mode 100644 index 000000000..9d9b899a1 --- /dev/null +++ b/data/inetnum/172.23.104.64_27 @@ -0,0 +1,9 @@ +inetnum: 172.23.104.64 - 172.23.104.95 +cidr: 172.23.104.64/27 +netname: Arg Network Core +admin-c: ARG-DN42 +tech-c: ARG-DN42 +nserver: ns.nia.dn42 +mnt-by: ARG-MNT +status: ASSIGNED +source: DN42 diff --git a/data/inetnum/172.23.178.64_27 b/data/inetnum/172.23.178.64_27 new file mode 100644 index 000000000..d92fb2005 --- /dev/null +++ b/data/inetnum/172.23.178.64_27 @@ -0,0 +1,8 @@ +inetnum: 172.23.178.64 - 172.23.178.95 +cidr: 172.23.178.64/27 +netname: CHILLONETWORK-NETWORK +admin-c: CHILLONETWORK-DN42 +tech-c: CHILLONETWORK-DN42 +mnt-by: CHILLONETWORK-MNT +status: ASSIGNED +source: DN42 diff --git a/data/key-cert/PGPKEY-0EBA4577 b/data/key-cert/PGPKEY-0EBA4577 new file mode 100644 index 000000000..93353326f --- /dev/null +++ b/data/key-cert/PGPKEY-0EBA4577 @@ -0,0 +1,58 @@ +key-cert: PGPKEY-0EBA4577 +method: PGP +owner: CHILLONETWORK +fingerpr: 6428 72C0 2600 A5B7 3DFA BD7D A466 006B 0EBA 4577 +mnt-by: CHILLONETWORK-MNT +source: DN42 +certif: -----BEGIN PGP PUBLIC KEY BLOCK----- +certif: +certif: mQINBF8ZyQUBEADAW4e5EqwzqcRgHU8jcNhNXWd5PDLAeLoqY7oSy8d3Y3PZ4e1k +certif: GwtHzS400WSjDeQ+Uy4+cBqdujQ0FlwOxc64W1LKA+Eu2Tzj9DiswgPIW87rOR5w +certif: wN5yVSdY60k8KL8nLXEGQyNxaqJizJCcoSTimnor+ZPSUdbdVXFW3S60qYQNNgoZ +certif: opM0swhW9s1M4ZM6J3hAtPWTsTuuY/Db9hZwD1AGjDJRPKn6KNx/KVUOui89UIvE +certif: dgS0/Vj11njaAsf8Mwx+OTeofQOcFP0QMXlAwIE9bE5bPv86VS8tHZnPNEJWxQCe +certif: s+pnZI5N4cA8NPJzNJSN+B/uzMdvHs/su+danCtFRX6HjJOccVeXkF2vGW8FZAEw +certif: MqcvYGrTeVf1deS7oHMLpoO1p3BZ0ydceBXhsQoJEViFhxdLwUbeJj1xubGykiUl +certif: MEa5/+4NvzPMfk/SvYtJDDW1B4Zu6SmuE2mn1mXyL4AzKY0V8yRQnswZ5CzALK8x +certif: fPN2FVd6NsF1jA7nsA33bS79aF0625k4R5I1K9QNtaMEgVKGUd9/hy0c/mJyQKMi +certif: 4wK/rx3iyZy5Gj4xF2vAkdexoz27NmD7yWz9cpNY3D9FhnRyNucOkfqquKGl/BxD +certif: Syc4gIxdsGGUo7kR0KVjG50lBlVAEE24sVG16D3W7BY3GDs0EYMhzd+kYQARAQAB +certif: tCxDSElMTE9ORVRXT1JLIDxDSElMTE9ORVRXT1JLQFBST1RPTk1BSUwuQ09NPokC +certif: TgQTAQoAOBYhBGQocsAmAKW3Pfq9faRmAGsOukV3BQJfGckFAhsDBQsJCAcCBhUK +certif: CQgLAgQWAgMBAh4BAheAAAoJEKRmAGsOukV3Y6oQAJMSlNpREoiz3cM/ZFkz3S8p +certif: N1YjgkMIeomIuwEcJzN4aV9bwzNabosjtQZ4EPvtEYREV8ebUNcbYH0QqMhk7sFM +certif: 4TmdwYYU3Brmk07T/96ExD7eind22+kun+7CORd4OXtv7Jtz8nzUTUeJRJNURKUh +certif: LT7UUdpGVdIMahlmkDqZWQH1oQuFue4Iosdk82fn0wq826ZX8EfRQZdcFgqYfC4E +certif: Hn+oXp4bktuXJoGfygKsj/t0I0FxO20M61yo2gQFKIrNxFGkzbLPbuG7oADv7qEy +certif: Fj9H80VSYUIWvUmIN/r7dk/F7TyaiQDTtI1LdZoBuqDJz5LrahW8dGpgq9y/ZXbR +certif: T/0iBwS0Zrs9e3ul1djdmY0wLuuBIQltqSvqycV1Bp+SLEaKGkjVXtg3C1SZe7Fe +certif: YfHTaBds/VxibrQREE2AT1eGcQZyxF4mdV/znciAwF9jiS20U+QZQSHdsdO3pmvP +certif: KxfL9dLqLszSd0PC1AmVj1r7Gnx4bEig+guutOJkxTQDXJ/LhJsmAj62QgY2N9Us +certif: JkLlzr/HUWxqa9bRer0aUYNNy3o1JvIf8gQeqK8Wj4e3q87jWm5g7R6+uiwOaTIR +certif: E7COC4+h+6j/zwcwpYjX22xoYG6yTRucFTi88UMHxePa3NqIzc9i5JYzSvwa4WlI +certif: VNuMzUO29fhTe5CtLWjUuQINBF8ZyQUBEADMXAlrrsBuY9tG8TDogo4BvLtoIwFS +certif: oPpGfLITJ4XEZJCCpY9CjBZNGyIafaWMtaLy9jGXeU77cs/SXEmLqHlvk+cU7b84 +certif: 8BQ7jjT0iDmw/Obo7za/SNwWxQ2P1kfrwO7emhJm+9337AKo5VBIvpEGgzxCEnLg +certif: eLY4A+y6qfHsOwlq00lKZ67uUOpbWhFwuNi20TdFgLeg19IewZ+seCKudAxbNerC +certif: 7HinNFyH+EHfJqiADZjs9bnkn+I208nG46QR3oQ8Nr+KoKMljtB0nd89cuSKnU4N +certif: 3N6k2PwHStpJHbtth+BYdow2ocnhxQ1fBNCTp9NsDyGMhs0E3phsdOOk59NN0EFB +certif: 3Bi+3pXEvMrIdWI6BbQGrzMxa9N/P/laVpfGJnUazIc3uzIBGUHxpA7V4eMfYNvK +certif: e2sN4sFsQ1ZCrCqj5tykZfaWL/wgw1yWN9veUh1Z2dQzYr1tm477hDJqiGzts+rY +certif: uBofoUr1PTw4GF3WLLndIfitDyB5ZZUP8C18CDNcq8MUU1NbtY/KZamtW1OqKUqi +certif: UYXh0alVjO2RtZwjhab5Ajja/GNJ73T10RE9ozd9HDJZCLyYe5CkTshOkhNp2LYD +certif: qUbut7T5/N7rfcwr8sTBr09Acqzkszs7zhSqaizM7P8ANeXfhqdZcQ6CQcqnjqwI +certif: 3JNosJ3eUQgxawARAQABiQI2BBgBCgAgFiEEZChywCYApbc9+r19pGYAaw66RXcF +certif: Al8ZyQUCGwwACgkQpGYAaw66RXcd+RAAqMC7UfXdcuIJz9OF8W/o4bd55KRV8C+R +certif: l8s1niUKwIWnWpge4GoAnlDvcFdQ3HFsn/BJVHr3sxcjXQOFiGkbyLXl7PrESxvK +certif: DlmU17MPE1kRoGcdBrnSbmsFxll9x/tatV9AsZPTel5oWb0HOSSpUz5A2rSz1G0Q +certif: MqUqkwoBaDis3CE6dAl/GA5iT5fpGRWnM6db6IsEQ1b2dDzu0Re/RpBhLNYHzT6d +certif: TOD4+fkmJfAiuBLFzjYGUyuvhpxppzEqKBZEkxndK3zqPCHWvwxrPCXnEWLGYROS +certif: EZMWLOpo4ZUDjsseJpW37Cyumireyjw7Guyp/DKRpOKu+uWvdwhsaZIZjBi1BLVR +certif: khHgzOVRcK2Wup+MIoaW4Fv8LQCcN1Rj19hrUjQ367P9Vx36FbcW5+Xs9Tup+0Y1 +certif: /FS5n6m5eM6lVRbEzSmr14v4fz5bVKT0Ligyot1BXYunHDiBAOjGi5Ff81afLBrt +certif: 2HdM2iOJ8zGGi3YSj1Q8IAlHNzQR+9cDN6biv6TubtvWxiqNvaTGlRJgLmfifmkL +certif: gLSe15F9ypr/imzqp83cDDEiG42dsx5JaNSWwr7oC6bNpjVrVyiTUSsQE77GcJ5m +certif: QKSNkzcm2D1tZs1+Ve92yp/nBFAFfDkfs4Q48q0NUqF/oB07fvA3jXbW6F9PFUwM +certif: DbvEszN8aLk= +certif: =0/7N +certif: -----END PGP PUBLIC KEY BLOCK----- diff --git a/data/key-cert/PGPKEY-9ADEBB91 b/data/key-cert/PGPKEY-9ADEBB91 deleted file mode 100644 index 829c67924..000000000 --- a/data/key-cert/PGPKEY-9ADEBB91 +++ /dev/null @@ -1,185 +0,0 @@ -key-cert: PGPKEY-9ADEBB91 -method: PGP -fingerpr: 7827 7EB9 1089 1802 E321 4560 809B 84B6 9ADE BB91 -owner: jrb0001@692b8c32.de -certif: -----BEGIN PGP PUBLIC KEY BLOCK----- -certif: -certif: mQINBF8XKMgBEACzEhkes3kuWk6TjYH9792PN4Dxci/JBtYmgBui+xuxNpRF3bjV -certif: K0wlJKTcGzDGtUkb2v5I85Sztf31HxC2aKP91rsx+jsDu9ywb52hN1UBxnOPOFjK -certif: kVVr7CdyZfpHFnjmGM4rDJxy2Dv7W2s4TPgD9G7njVYZfpDQdIiEc3+DBaZ6GIq5 -certif: SrjPIFxi99iK3zjMF1O+LNue7Db7VthtMcR/ywTnAvJjgo45ZwlWMedSWGAse9jv -certif: PCJD+H61cOO33wBjyKGjDA7mfJrk3MkztEXqTlY3OGZaSrr7ENa85TrXu81eITC2 -certif: qltce1HfrSKR2xO7r6C5kVaokoHcn6IwHaDH9S14WvS/qparN8JVVED89fggdOLi -certif: 8cGi6AkAIvGjHX+LZpGq8uvkq0A1xqlGwmfySlEwMHvnjd0RaBsKix23bgzO8zs4 -certif: MRH95BNrYalwyfVFQKRAWRW6DOqIXY42iAutkB3HM6iae09qH4p4nXWPfCY6sPKS -certif: XIaWt/IjhZ2Wcda0s0Wz26Vp7Fc0OB0SO8XihAQvg+iNNIsKoAQaULlObYARQh1I -certif: huanKQE1WjAa8zDEeiZVs6s4If7ETrSiiLXKkZA09psqdCXTUxFcT2LAQb5quC9Y -certif: fE9jImPkuFOrMAnRIMzP3UM5c9o8Dwxokv0aPPE/dY+PItEUKvk8FjVolQARAQAB -certif: tB1qcmIwMDAxIDxqcmIwMDAxQDY5MmI4YzMyLmRlPokCPwQTAQoAKRYhBHgnfrkQ -certif: iRgC4yFFYICbhLaa3ruRBQJfFyjyAhsBAhUKAh4BAheAAAoJEICbhLaa3ruRYiEP -certif: /3eVHgrkpV8nCtIQi7cSs5y4kOzELKQdATNWkBC2OMreafWcgsRI0GeeWH6P+Jtw -certif: D42i98TtQUNbfhIwUaGUo0KvcfmwvyoytP8ZdIvw2rKHg9rG6v9H85uGWu4knjHG -certif: FR6cZ2vZoQC0EX6hAdi3EKffiSS7BmfiONmlMjTwh5yg1SLO5gp4wQDP+KjStAzJ -certif: naPls34BDEtYGfm45px90ewkChQqnI/EWs5E/ttUSj+WFMZImdh+hu3tMuiq7a3+ -certif: Euz5+BjH579lvK3qTvZ8zDKsXfCydztmjpmczsS4xW2E7pPSR782Xm1YNe9nIZIm -certif: JAlNeU/zHXqyoNFPG8SiRwpfSRw7BZK2RR4YerVAVI0zzhBsyqa9ONYruJJsXc74 -certif: lxCbWsXVJLRsXYKEr+Sxy3reF1twkFBPHG2Ip/w47sY1AvcFluM4LMW0Tvw+Zrtl -certif: Akoxn0Q/y4AAheQn1JP6eas3eUfGtlXrb1r5wrvXpDBIS2LVPpTFzajCvBginQ1x -certif: r9Ji4dNUkzfu2xJOUc0nntecKnbqVQYwdzZbzoMwdhjgs/ENl7IV1vZZ/8WMFPa6 -certif: ae3ZTJZqyhuC+j98o3TTqkxSDSSMseZg3NLb7puScrB7QokqIPpshTm5f5++7fsl -certif: sjnakC/1Dmp36K1Ro8SiI9TIsOvZt4ZsmUWn4R+35RN4tCNKZWFuLVLDqW15IEJ1 -certif: Y2hzIDxqZWFuLXJlbXlAZ214LmNoPokCPwQTAQoAKRYhBHgnfrkQiRgC4yFFYICb -certif: hLaa3ruRBQJfFyjIAhsBAhUKAh4BAheAAAoJEICbhLaa3ruRFXsP/RHYvanEWQTY -certif: uSnO2iYAysiP78VOJi/9VJVrsC2ZC5iCCeDG0X2Z3uB6CSXpEcUurMBDyGTIty/e -certif: pzzVlRMsQz9w4UOBkQ7yoRA5P5C86D2yu/7SG0/eXeCe5v5Rm0jEh499YXPaTJHU -certif: /2CO6bMUiY4oaKxZTXSRMJo/PpVj89oxIwQdA8h3l85F1XKd9sovkjkqDZwU/xKs -certif: Wr2j34N8YWjZlipg45jFZ1U+g326+1q5IoGp/3JjdyAi/pctVDfDRZOuTxzhrUxb -certif: tzQCuaTyzO+c/KObKlfKT5euKYeG8sjPXXjcRrQoWcrP6Bx2TWOsmcffF8DIWBTw -certif: a8pG6tqDK2bLjYDSns5Xa3l7EEJg1Py9nObOV7tTt8ilsWkfM7jFlGizpweIg6qv -certif: NzZ6k4xqJQpXPTKOUZFuCho3Avy6oRPUjIAiSnL+Q9BmTMfC/Bf37wA5LMTvzZ3X -certif: NwqouAoIiqzl7drsYpodt7gLZM2s+8dGWI4a62yJx5kwyKpbkZUuET0UaDtJ3vdM -certif: TQgKUsSy0qct/va5eXVrsWo39eNtclkDzGfG2aShFEmZP75C9kLLtIfPKfkDaVfn -certif: F7A5khHP26wzh+DXS6KzNF8csuc9wDb7a1+fluQ9BBIbfcZN4woxdQsDWT3puNOn -certif: riCwYViCvXdq/oJ5Sf6p1doBT+RIdo4vuQINBF8XKUoBEACmVdsqq/xtxu5fDPbL -certif: iBiVv2OSWwbKBixE4YurZBSmITp518Ob+12xJP8UDWtRPzKLATDJho0pqVBdoPvX -certif: no2DeX7DqsyJh2HnICsPPuQ5KUSGiNhYSVOuY1HUzqKM7Gwf+DkjXXx3xWDRcmIX -certif: F6VTOvYTxcKMjvM3i9dGoVchIl68sS+AAbKTn7LUpgoX3vaCUxK5pM+KmMYMa/ax -certif: eIptMJoYO+QzBLBhh1/eCvfQTG12mbWfeE03AkF8s06011sbzKxz/0s9YRnOl2QX -certif: aZrfyqJ7UHFBlMMXZda1QuVw8Upk6lCfbIcPpl2PL+y10SyB2HJ7loJQC+mxBbdO -certif: nKprsAraKLKEUlWc/C0xtHNyIoRtbRI2LR6y+O4mecN5Sferus7mBgh1Gj8guqAi -certif: wZ53YEtAqSjoUzRrWr/Iv36iprAjHsMv6PCMU+92v3ZrupqPZ1SNDoY/26oUcWJO -certif: JDbNfDgHpoKulMTLDHu2CTkbXoxZu5eTRNHU52W1vloLgQrjQpVX4Mq+K7U3Nbz5 -certif: kRFRIhhrQB2CTYVqSh2aD3lIHQw6vNctjb/Hq/M1w6DJWya/phD3+I1LUsXfVZjm -certif: fZUf1IOhBAeHZxcZQEfkT3q4s0wjet0dPsLx411AcDWSPD4BH4q5PHhtcrroSLKd -certif: 6a2aFuHBgyTEmuABihATnk5RjQARAQABiQI2BBgBCgAgFiEEeCd+uRCJGALjIUVg -certif: gJuEtpreu5EFAl8XKUoCGwwACgkQgJuEtpreu5FRIA/9HxdFCHsg0iFwT/8XFAJM -certif: B6p6C3bdBq2m+dKoLBKK76XhY66/Pn2w9LoCqixU1bUwItkfkUTvgE6DL1N6BRd3 -certif: d0iB6wsgmQftp3lEl98h2Wk/2gZ4nLGmBio+6eTD2m93NgXs1jPNJ880Xih/IqUO -certif: WzmqwLGD5EYP7Dx35ZHhzjCQzkHQQfhVPR/KjRhh+MrrxXL9bvWnGqsXVUD8KYe4 -certif: Dg+sV+x7NrPBLZKd93DUEUp6TPQP0W416rXVpvxCoAfNenchvlq/SLKDC7wi9Ak1 -certif: ZnbUyNWRBRB+pbgTkRwAQ1AsPGIYg+csn4VgXTUfNJ6QD26Xj3KBvAAVJQ4x1EqK -certif: QUR85PaEdraUIuHTYIsuOIYEHdoeqQuz60eRrf9BQuql2bWS/zS7aoszn4WLvpJo -certif: UL+omcszUKbkWYz4lTM6vW+gjLxA+EBwjwdsFClABYHqUM6eWYK3fgq2Jop0HWOY -certif: bQGk5VY+5hYSQXUOfKEUMxOA6KgZRU8mV7gsJBTfQeLmjN769D4n0RMsNeHpXxD6 -certif: rqecXtBwiU76E0aPU5wlm0P3Y4ZJn1RwqHpntvv9zAf4xKWNe0nihTbrknBCrT5b -certif: cGfLSsuzEpUpY0QK9oanMPdLbyi//6sQNkBNS467+kPH6MKNICv3QC7V+6gKHf6l -certif: +agAJ7ol9HZAXFhx6XjKrj+5Ag0EXxcpYgEQAOJRaoXSUMC5gPr5Io/BVp7ZDPfo -certif: tkEAV0VeVQ57louk6u4cwGX6ajdNOwHsVJwJtw1aldKYe0vaPVvgI6QFQNhfEIlh -certif: Lwi2f7eDSoc4SpTjDRCNzDMTI7scbFcMjxyVWWgDzFJv217ZPDPG6Rhd42xvggTY -certif: tK6T1xnmT3qD0CmCoWRnEDaWI6Dq42Nt+9C2X1Xlqtfxo2WjXTll9+UoULTvRzhJ -certif: D35l8aodNTwcl86w8FB+Iz5hCs87PPCNL9UHp6cG4rVT3j5ZVYXpStbZ86FTN7fJ -certif: L8hpkyvc1RSJ+FMQ7SRQ/qkuZNwWps0XQpf8aJhfvSO6ETMsY2g+zz2RH3s7pQp9 -certif: pBlTEcoUErROCPb5wJ7WF8gLt3hdaxbMoqeG/XtcrqSiT/SOVeIKNJpjHQghXF4/ -certif: kmvA5ZGVheW2n/aTMqH5250kb9VVQCg1KVvbunxUp8c4XingkPyV9zLnnlQBUFGx -certif: obLDjd6/PaV5HIkbRgay4n0djrhtHB2KN69Zk8kgdzB1+NfkHcpowa8bDt2Ai9j4 -certif: Alnu6TpVQ+F11zzfJ/87JCfDMdVC9fNh6f4qFBhBXAA+R3WW/FamjbCOIoe5EZzQ -certif: kSO7cILOpfW82Kgom/ZMDWHl/vDi5obgswUq8LgmPgplu7XBMLsIGxkpTaRh5mH/ -certif: mFL4gHCzxzzYD9LBABEBAAGJBGwEGAEKACAWIQR4J365EIkYAuMhRWCAm4S2mt67 -certif: kQUCXxcpYgIbAgJACRCAm4S2mt67kcF0IAQZAQoAHRYhBI/yQkl2Yg9kY1+4ayi8 -certif: exuNBj5qBQJfFyliAAoJECi8exuNBj5qN9QQALjcmdn/1j4MUe4XB0YdO+wck9lO -certif: HDpQ6y2r/eaVu2PBbaJe3sOUNjb/crpajyqPH6hjcX882u5tnijhb69nD79jeAHM -certif: /VWoTWkW8kiFNdyHfyOEow8PuNUZnh2uyzG4R0IWbPYTeD3Mj/r8ONKPpdkyamC8 -certif: dJwBnMLl0hCqWRyR7qnRTecgGE7B++1dKeeQb+TZXfPs4gAmbLapKoIhBtipEJfg -certif: nLJpS+56zNo7dLAJr4dIiYBnxGVCdOqKYg50MORFKvAX4do3aMmZw76qc5qi5DCe -certif: WWT5iW0HXABPHFC+LFJ2CiWt+t6nqPXYWVaPjoZzOo3kiiEivCEkgdQnI+0lTHgh -certif: WPoSvpeRKCcp/By9mtdoRJOZnGO2XHxxIjMqyvbuwd1I2it6/67OjtzMz4FaAFaC -certif: 3+ksFb5gOUHuXunupjTFL8G66D8e9O9Fe3qJ320YpfWSRjLOhea3JkHF8rxYjuqB -certif: zCyRWCa9W/whe2Ch64QWhnwJmC4gyUJMi9m/VcLeny6oEJNw915lh/0zMHZOHTkE -certif: o6MS5K0JCn5w58EYZolNucS8H1MXo6w0fYvgU20XV48p6Okco73rEGrvOdSYq/pF -certif: hiVhMDd1UgrmcEWcJzdtezBzeSQkbUH/GhDKsXwEFr17wu3W4lzfeam9EEPK/VYh -certif: FRIcWy3HVv/jwHWNKWMQAIu5KYZd0pITqiShjAazT6ZLPbta4/n9yX8FTRIidKu4 -certif: ORyzjiSbONGwhZJKx4p5yVYKZGhPw2ALg+CbSvaQ/LsOQWSqIu8sXFyWrtZ5JjZX -certif: 4KVE4Geuq630cYHTUntxpR187TfYZqYF6sWUsFjpxtmdczLtEwbopyspOoMcCAQl -certif: gopMiaEo9HgCz0uPALHx4tQO6bMsxb7BYweUHGaEfxTVyt62hX5z7E3blUGCYx6R -certif: MlHdE4opXH1m6WFNZvMZ9QXhF+s6qQxn7+hoxVUa99WVvJGKYRa1HADaQkiZwx2t -certif: odLeEuH5oM+jyc3Uq5llH87gdQee3xTmktjLYUizNh3cFx4s2/VbQ+05H+2GvjKM -certif: LYkz2Nw/UYvYoHOlqUummjKaQ+B25ZS2EfAd3uHClHX71+jmCycWGW0lpjPYT0Tk -certif: HRx4E3dxRPszB840OQhuKQ39gjIp0KFfsiiKw8CoX726iNq5l2VxaQrDNaqSf8LR -certif: sick3nBXyT183dgc8XJw1Xy6Jt6y3P2d6fAcFU0Yz9SiybEjUwYkYXMOruy6Z4i8 -certif: IfESBb/6W3sEbKBBD/reQOqyLSO4I9TZ6mezwlV+7hab8ON5q8w6adD4dJo8qudF -certif: 4SXjbKKPHO5p5Chn0tfE5CGytp682e/Wx0qzaTe2h2FFw4G/jdCxD68Y2zJ85aAE -certif: uQINBF8XKYYBEADon55wUH+2aK4LPK2IoxonJiTK+AA9bw3viDcqvkT8O4qXodr9 -certif: ITRGvBIO36LAraUb/ubw6ji9UfAt5h4iwhoiMBrGuKRyq3pN/cqycFVkqdW5mSnX -certif: lLzbMVsMotlTPE7UWzqotGFeL5kL0Hq4am+1LIktp14OdvuAvwDmMAfAzFBEcY7S -certif: qc2Quq6EGyigBo9hNc3K2DpUxgb4IZ1q7FCw7FHs+bAMObolRG1C9EMXQvwuMR9N -certif: JrezjBYfu6azwc68od5XEsu0jhnSZNSPEVRyapEHIurqUp+cvaxdXQ22962+AW6y -certif: e+LShg47v9zeTdncCa9DMRjDZoOPt/W8hbO0UpHAUrE0av/8AUB3FLFblbLvDNdG -certif: HH5V/PwUgtv45blf9OYABg/up5lw1K4DuhwaA/prBIuIjoiT/eC8kdNrLIa7WqhA -certif: C7tolc6E4qRCQoSTlCZVIN1Y3Vsb+cJvc1YM2uCquNxumT9pYnyA4tTNhveNs+WR -certif: pP3J+JRKZdpSytXqHwecyNV1Xnym4PhCTjQm4BOp0PdhjpSyZjtvaTFEBIhamKs6 -certif: YB7Q5tD4FeqjeW94ppmtZMNzCA2I870M7ltLuoqF4xcGT2hDPj0JNVPcOx/4G5tp -certif: Et0Ail/lAb9iOjTRCF1scEupZ5k/V3V14fVwFpD7YVH/9pMrDBuud8x9ZwARAQAB -certif: iQI2BBgBCgAgFiEEeCd+uRCJGALjIUVggJuEtpreu5EFAl8XKYYCGyAACgkQgJuE -certif: tpreu5EA1Q//UNB82QemOy/1tEyW8UyWE+JU/gMa6yUnEfl9PFhVaDhyeLw1GYKu -certif: MRkAOhB+jfOioh3xCvgjTHGMtd7h+I2FHFcWS9Ak7p/yFGMTZwHqOjK6RWopjzIz -certif: OtBFIQ4pDssIrpZqJCUDrjsgKw+TJn6zEhBJXu4atGD+4XUS9VCxhpBqtSmsAAU/ -certif: cxe7BjfrwjQ7C+2ZfiRU0LZS8sCCedjBxu8PCAcBG3Ay+t0Itss7Y+Bb68UperwJ -certif: uzYOk/Of+ZDS1u+D7AbIUR3TNxknFVeYKVLju/U5v8kvBymN9hY4iO3vx/Kq4dDn -certif: zA5ojTnQAwJnGInws8pT3nQQIjIM6mQ4/6rpNjDLZXVThFuycp391XI/M+gU9qeU -certif: V8pp47ZrRErkSyy873xTIiX8n1AgcGY2BPsFmR+R1KFzNzIvyLNv4qnRe4pF8onX -certif: V8WItxaALe7qTIEedQ8RZmUbcqRW9wd9vGVPmxDiG4leghQ0q8/RypIydfqdOXtI -certif: z9vXYHTfP2Hm3vpBxAj9Zad1MvUrhMwUCGwRh7aAP0oGx7rWz+nEe/FK0UJMB6Dj -certif: 5GZQnWyA2oqSS8neL8pUg/WKCu3qt79lhCYpRpBhOtp5v6bo4EJHMibu0RJ8nh81 -certif: TCTtGMTrGdgeAeUWSoMVhoMFV/xN8lyHGcWVkNJDvB2+cKT3SkHF0m+5Ag0EXxcp -certif: 0gEQAN2GigCkh+ugbMzGALQ9mfS7m+NHQIRdyNjIzn1uTs1I+yg4U6R5gLMymJVN -certif: Img5zzTpSekQz19fjs0TmMoJoz8/RfDoIleygAFBkCfppVPDPKJd4piwTpAMK8Fd -certif: zEUN5YbSCUYgyzWnNTov/V+MlriSZzt3GbhOS+9a5B+2Us4+B5/mGBM0q2DFzIpo -certif: nYm4fU6P9MGNE+ul4CSSCxxYK4xFAoRYzxjRl0kwZc8dBxZnaEMTXyVDZhtKGatC -certif: hKlGIbhZ9gTvY5ysEdHMMsoi9MkVPf/4G+EC0AytzfHykQjX4mvTjOas1dOxoTP/ -certif: o8CrSJfLOq5x4EJd5Roy6BqB0/Y+8KIQjzDFjwG/E7HjWFs7SKv+pSs65FktjlyE -certif: H7FvEuYZh7/v8vstx+kyqf67GqUsqvyUZhC++mFDwfH8Ng3GGgqm+Bdvi9oDT7yL -certif: jQryqOGyhCb24R45DAcBPWW5ZZIM+VEIjTh95hlgPg81tvbjnjrbilqQyE6H1a9v -certif: Suysx2ALUsYPGjdc09Sv/oayWODecrLtpIxsoZrkTijzWbEgvg1PazPu9uT21Cps -certif: y9NTJawQ5FZdUUs+CwmJZdVtU0x/1fNQu0gFwM3h1K3vg1MZT86oWuyndZfpvbQe -certif: j8+WGtgwuciNxTIQRglxVNKkgRdKlTcsEwf4g4YUT251/c8BABEBAAGJBGwEGAEK -certif: ACAWIQR4J365EIkYAuMhRWCAm4S2mt67kQUCXxcp0gIbAgJACRCAm4S2mt67kcF0 -certif: IAQZAQoAHRYhBPrb27CTambmfEsH791SCYajkPn4BQJfFynSAAoJEN1SCYajkPn4 -certif: kT0QAJP/1HNz/DXeuNeTlr9Cpd2SdwTwiqFPH8mGdptJJndpph1mrzCXFe0kBOOn -certif: mQdcBLzHHQB5EKSu8W+y3fEZDKCmC/BXusjuZ4az9hxDluKE/649JExwWaJ/YCLr -certif: Vy/jDv4z0Lz0I3D6hDVTDPjZTodttCjr3X3lilkEnGgAmRSmgSt4BqGAtFMQJZNc -certif: xxJoY/KwbYjw95+HQASQyt/zVJG9J7axlFOoaXXmuK+x5v4GCcjH1weKP3WPIfRG -certif: MAqhIjdc20XGZDNsByKRJDj7UUqr4g9ChwSI7NQUbGNn+3sO7vH6La/KcH2CNoYh -certif: Ne+fZA7SENXX5bD+aCa/308EB0YxrNFRK+dyWfQPfAWhC7e2PUxdu7VTNdwgaSKQ -certif: Nz53TtKdzyo72L9LIVZov4GD4HufVsKeI0SLLyfDgb43E6uUKhI9lsvq/WjC24e3 -certif: trP1ZFgYUrmV+K/9IFB7PHO1IyT5hoCg1MSjmrAJpchmBBAXQU+BV4FgvkEs809d -certif: uc8B4tH0zaTBblUCLD2GxXX+8oNz7GZ3FTOJ4ZUzLcoBzQgZ7/4jEdsvbLVwrgVd -certif: 6tML4h+24Ua3l3fGeQlMtAsCes3Me4g9G/Jaw5/3cBrb5QJMgOrO9JCOXLooLfX2 -certif: ZP6+RkgKxcx5O2Uj9QNL67RfUnFHOTUuuP2V1sRJpnliKeDFkfQP+gJMF8MsURFh -certif: pfIia3a4cQfLPZnbowwUEgihVI3o0kenBQWlLAqraHK59+pZLBnH0goLcV/eT2DV -certif: uXMd0+fD418E5YPu5vie82Va1gr9e88JCdpIVoCMFfRnJYHjeSJLPh2MLbbXdthc -certif: VAt1Mo/VxKenO4CQ2cS+zMOjltVRorE+I9tIgNzqYneEe2pYhHzFD1+FrUDPAKxA -certif: UosX3LSyfJxJA6kLNwwAz1U2ohYVKbMdtXB8v5glzGD/rBrR6yOsDi5EKdrFPzEy -certif: gmEX9Gg+5JrQi2a96nDt8jeZJJs79LNJPNFiKVbU7m2igfGaBqw0ou810osrSsEA -certif: aT4B8LVqDKUqdp/DssKJVSlH2JKKxBnwiIDi/zicQ6UH8/SGREdknQDoeeQqO/KC -certif: p9z0MpLNatqj8pPhPM+Ps96T5OYK6ihnsRxvK6Z37rrnU+lipRabG6NEcg8GILsX -certif: u2NTCtE6tjWoQNtbNQoT9rW/WjB9wzF13O8knBXVnl8aV12f4EUgtYpBKaM8DP4W -certif: 2/sbX792tot6UA6rVXJ//M0CQzLQfn7oNXXmDnFlXF/3F2TffEFHjCpifLZ7OcZ4 -certif: Mv0A9x/qg1vmcOF/0m3bf5ONbh9Bbw3+eA7DOcsRw4OLJUd8XM2HMuC+gzlp3LLI -certif: o1JIYdhsBAPiLuRatfkCyT2bPXR/Faw2uQINBF8XKeYBEADDlS5wIvtlT4sN24q1 -certif: fHBPMHeudIxGzaJhbWRpwDxG/nCqulAb8oqXhFiw9E7WM3kayzy5tT35eac93q9F -certif: v2igEK2BDrTakcyKbpZ5TSpPTtUTySR85yGzeXJ5Hligov/IQKX3PGvAUru0UCWj -certif: 7DYsA7/k+EiRdj+abPGU+K0jSWVjPMvf04biOqKKZrmIhU7juANi1dHz4SNBTQQ7 -certif: 0XFs1qTwZp3RE32IF/O6GVIBlQYraX3pZCkDjgxEU0LW4HqYB0pBIw0ajjk4VQxh -certif: 2Sry6Nn7DRr+ydn4kq0242Y0UX1TtWZ6jgdBYYz0ozP4yrgcbmuilgA2bm7GJXVY -certif: LXqA0redy6b9C8TOWaO7N9+Kp+R4KVjZVGlqBNK5ywsP5BnOhaOGrsj8u5WrAs9Q -certif: scSy/jt0cvQmgt/Owor6HDkmGNJh2p8hWtOw2ItptN9zOaxwhj/gTp/rDCUTj+oi -certif: IwR+F4hLZfjD3+w9yN2fbaZE4Q5nd85FEhs9KQACOmZuLXiKSqa5K7of0FZpTSiA -certif: ySNDfSQ4Vk4BcUcR7EiolgI8+3fB+zWo5u0w7bj3wt3rPxB0NIWbb7CX7HFNPA0i -certif: QTj2o/Ymu2ZU3AXuytce9PDfLM8Q23No/ERSEnmny5yj7vVqBT/eimmpZN4SxyX0 -certif: GCY95gq9CRI9wzWPxGJGeY6sDQARAQABiQI2BBgBCgAgFiEEeCd+uRCJGALjIUVg -certif: gJuEtpreu5EFAl8XKeYCGyAACgkQgJuEtpreu5FE4Q//T2DUT0rCDwreuqqE3Cxs -certif: 0mc6F7rOTXpiqt9+s9vDP45MvEkRiakaPMAzieadXTsrDJLMQh4NmYii9F2Urejt -certif: dRr2gauLyDr26yNmmJZwodiGdrQwiKBdxEQ6GhItAjk0LVQ6f7RphsCjcr9NEwo8 -certif: uK7ZiQD98XOl26adFoZSY95S5iwf5mR54gWoyw6U/5k4Xdi82KEIbEc6E+YKKvH2 -certif: TCPQTrAUEVikuu72BHO4lt2z7oU1ZEQTNtPIFrjl9ZUr/a7jRGNeGPxeul61mgpT -certif: Mmj67dyC8ukNX2biO14EpU+2PycD55W0kt4K2QSvK7+CVuFS3cJVDkyrjYICb2ps -certif: HT5H1Ywx9hlBeyZgFKbyxR16bvuJ24wHsxFWy0qPb3WHTjmbjScdOzCdVuEbep4N -certif: i9WvoYIEQoO37p7otAKrSQ/BfyS44O1mT7ZywbrOy1Ib2QaYlXL/narxm229dra4 -certif: 1W/OzUCcuoeFvXrORqEI3FpTryBf7LcTaDAuTSVLiPUaV+TWKDq9e+YNNnFQKC1a -certif: 2x1qlfzsUIJibm+T0rKZOMoSPekGOBcHdS1pETdgWjA4U2b/75AEJlKbT2CxYUA1 -certif: ksZ+/irxD4pmBSaN5be1fdk830Je29NvHv7hIK7V9IoYWXWw9T7nFP6NLwu7z1Rq -certif: D84kwEHzy2aPw5Ph+vFWJ/k= -certif: =Sdzm -certif: -----END PGP PUBLIC KEY BLOCK----- -mnt-by: JRB0001-MNT -source: DN42 diff --git a/data/key-cert/PGPKEY-A3005DD1 b/data/key-cert/PGPKEY-A3005DD1 new file mode 100644 index 000000000..ff9206a2e --- /dev/null +++ b/data/key-cert/PGPKEY-A3005DD1 @@ -0,0 +1,186 @@ +key-cert: PGPKEY-A3005DD1 +method: PGP +fingerpr: B5B2 BC06 0335 03F7 62A0 BEEA A75E AF21 A300 5DD1 +owner: jrb0001@692b8c32.de +certif: -----BEGIN PGP PUBLIC KEY BLOCK----- +certif: +certif: mQINBAAAAAEBEADAecrDKPYmRe9LErUbXFIZO3ZAnXVYoNBrZfqoHiReiF1czmXd +certif: nKSp56oMA1tskbNNZU2050xxF0OSzi2yU8r74609VULPCLCPWD1AarknHm1470fl +certif: hX/kik4yp1gh5elNL+S+YDdzM74ySx9FlqYJMavftaAt3S8Oxw4nk3o2WUz84VRA +certif: mmIWPkQn7NcdI1j8Ujq7+yzWbA6+D6M8P65YM4dObgk1WW8v04qkcGTZKb7XkHZT +certif: xKlHK9LPQ4alZn1yHqf+Ir+v5IazH6ewPd2k9+ynizZsfZpO/eqUhEkOa9RjgqvC +certif: deu7N9R5QJgHSdDWW+nfmsmQZdUf5QB6Z+7xGbJYwyrAtuKK2hdThxpPiuPpFLuZ +certif: FMyWREQebLuvt9NINJnnL4JPfFoXaFL0JeM7P9D0TtoP24+o1viCZtiwvKOd0BGT +certif: PHb7kE+iHURrqTab087KvIZRPwSWVBa9lL6rbG4ZEoCwMTBXhySbBx/EUn9fPLdz +certif: x+2u/rVoeFq/1RAxeyTsCqJaRmb8pJPAEIfSQpudffwQ2oCmANx1PvawfgSg8LAZ +certif: FUzF/IO9jQfP+9/TO+GvgT0u+l9KKhJ2n8jkcuSGX9Gv3YG/nApbi/1U7ICHdTZl +certif: Nnd4odjaMzs2oYnURohpa6tI/a3PaKrs/dsSzInO5MQ1Bnxti1UJe5ZGvwARAQAB +certif: tB1qcmIwMDAxIDxqcmIwMDAxQDY5MmI4YzMyLmRlPokCUQQTAQoAOwIbAQULCQgH +certif: AgYVCgkICwIEFgIDAQIeAQIXgBYhBLWyvAYDNQP3YqC+6qderyGjAF3RBQIAAAAC +certif: AhkBAAoJEKderyGjAF3R0TAP/2S/1gIkiQpKkwTZp18r+YmQsXVVJBjOnT40GM0j +certif: NtC2qTa6XQiEi0bC85tNw5opvEwQefD/tkHQBBNuS87/1Qb7QslK758oqqgh2Cy5 +certif: d/pcB4p1rlcY9Z5S6NvChbo8k3N1cibrgDeLqD2ElqIXjxR+cWJn4jV9pi9ZAA1W +certif: 6ONzWipVeap+NtOlHnBptK7PnKNScC4qm5+nX090Sk9JdGfweapqtOH3CdHP0ImZ +certif: I/RAjptF4x/uJUiu7McG1wMLOKrieIQOki39qK2/lKu0srl1Vei2Co9dPJYVnRhT +certif: oN6Z4ia6TEbTbcAKFvyUa4aNZ0Rlt6L5DIB3MQjzJ/oB6/tIe7YFLb0aJrMMjUt7 +certif: tVZnOOZuBTi7Y6hxlrWPXt4iVx1MUFj9jDnDjOjZyfeXIKBoXXjcdvewQf9IzOBe +certif: e+0OW/Vsn9nEl+b/QbS0dcG0qry7mmoQyQV32Hcp5ZJ6ErFdhhVzqV9pYWPiwmGc +certif: aVKPD4mxLp+GbC70D5h88+vm6XMX3K2JWOOa3P+T7lwlyQGmPsuIXsISismTBDnP +certif: OGWPkz5T4rZfOO3mrzxzrw+VMH77D4xx6PWT+vRBKVZXXgc+LSR2zVCj53svN4DR +certif: HnyEgKpxlCqyvB1jQfmmrtTCRbfxwOJWmeG1x6ql8CamL9I4HRJNz7R5pRZVuiXa +certif: GRi3tCNKZWFuLVLDqW15IEJ1Y2hzIDxqZWFuLXJlbXlAZ214LmNoPokCTgQTAQoA +certif: OBYhBLWyvAYDNQP3YqC+6qderyGjAF3RBQIAAAABAhsBBQsJCAcCBhUKCQgLAgQW +certif: AgMBAh4BAheAAAoJEKderyGjAF3RbLcP/0rW2gsXKw/PPfPe/Iv3bIUg+9wv/y7k +certif: 4yzFJ7wvBuUXXaK2uyO1Z3cBmWH/CbV1W5cuTf5x8QpTQ4v5ILScSbxHWHuDLg8m +certif: PNUwLIBNKX0s53xMZnim5VT49WwyKKHBsRV7WZrGZrzOl01JAAla9NHeAnfXPu9W +certif: IZQuIQWDRkc+PmR8os6gsHaieimhxfZnP+occp5plOEKEPB7B+UpCF5VEL/Nfwbu +certif: KAxA1m0j+qFog0NZzO4HSMyW4iU+ulRGEgwN1hg1380wLCAWaMDuBCNolEDbzQKV +certif: LUVe5AEnVvST0QD9YST7D/NWzBo+93wkYthRFaV3Sz56KKmCW8FAThqargSKGzQw +certif: Jq9XVUCdSmIA6RBAT0JcsCJr+pweosUvxhatgSrIRWDxta+R/Y8QoNb8VzidG++d +certif: R4njmaFyqj8mucKKGHJWhtRX4xC7dcHMNdpCAdWY0jLd7PZqZjM2oUm87fL9Lqqv +certif: 1JxConeWHkPrm2Et88iiw2RmB8iKioD/r33hmFl/wQwNXXijMXxzoo8S5BDJ0NKd +certif: q1GK6ADVlCGqaHJnXQEF91MibhdzKxbIgvhvC/lt5HpByw0NHzzblxyQiQByKvtz +certif: 8iDErKzS6nJEu/yXKzLtG1Nddm1yUjN4SncC8IW+n4TwGPjuSD9sOpiDm3Pw95ZQ +certif: eNYwr12haNdouQINBF0zBI0BEACmVdsqq/xtxu5fDPbLiBiVv2OSWwbKBixE4Yur +certif: ZBSmITp518Ob+12xJP8UDWtRPzKLATDJho0pqVBdoPvXno2DeX7DqsyJh2HnICsP +certif: PuQ5KUSGiNhYSVOuY1HUzqKM7Gwf+DkjXXx3xWDRcmIXF6VTOvYTxcKMjvM3i9dG +certif: oVchIl68sS+AAbKTn7LUpgoX3vaCUxK5pM+KmMYMa/axeIptMJoYO+QzBLBhh1/e +certif: CvfQTG12mbWfeE03AkF8s06011sbzKxz/0s9YRnOl2QXaZrfyqJ7UHFBlMMXZda1 +certif: QuVw8Upk6lCfbIcPpl2PL+y10SyB2HJ7loJQC+mxBbdOnKprsAraKLKEUlWc/C0x +certif: tHNyIoRtbRI2LR6y+O4mecN5Sferus7mBgh1Gj8guqAiwZ53YEtAqSjoUzRrWr/I +certif: v36iprAjHsMv6PCMU+92v3ZrupqPZ1SNDoY/26oUcWJOJDbNfDgHpoKulMTLDHu2 +certif: CTkbXoxZu5eTRNHU52W1vloLgQrjQpVX4Mq+K7U3Nbz5kRFRIhhrQB2CTYVqSh2a +certif: D3lIHQw6vNctjb/Hq/M1w6DJWya/phD3+I1LUsXfVZjmfZUf1IOhBAeHZxcZQEfk +certif: T3q4s0wjet0dPsLx411AcDWSPD4BH4q5PHhtcrroSLKd6a2aFuHBgyTEmuABihAT +certif: nk5RjQARAQABiQI2BBgBCgAgFiEEtbK8BgM1A/dioL7qp16vIaMAXdEFAl0zBI0C +certif: GwwACgkQp16vIaMAXdEBkRAAogS16Bc3UTqf4F0N/MX+7HWbN+MpUR0jJTMRKldY +certif: DOsE9Z0s8yMP3Fdf6SN23klc+hZP0N6TlaZBTuErtrnKY0PqaKTRSvyt3aofX2DK +certif: iHbHYgF8oygrML4LoJTaN+KngMe8ybGdrbSZR9K0VlH9gBp6etKAOSgMv8FePsKN +certif: 9xPjnnjq3TFFOO9s6byVu2Uls5HrF5ksj8dDdkY1QPgFmwPGoAhLcNS4abqapVfz +certif: I+FBbScNofWyqV2qQin/WA+wA5srFRUtaipovlAwVk/0tlcZtv5nnVOL/fwwnwCV +certif: 7wtaJEBwfie4TT4epPlrdfXZcgdataKdMQnhguwpWuiuDJj/V9qxLMv+B+QLdCcO +certif: EnAvMuRD2e+xHZytljxhTUWDzs2NID0+tAGTMVqf+8Igzr5KQXEAkSJHzt2W3IJM +certif: AbQUDBoqyHzmDWEDA1agZ1WSJHaFv4A7QmNrc3nUTyx96eVMdZT9qfMt3rXLn1xa +certif: M2ZxwTcaQ+QOcczAsG0dpQJwlJyo/nOKiMhSdYsxvoOCCBFz/kqsVfEvLtKM2JgA +certif: 3p30iYkdRom1um2dDRdXWIEHyiWPkG8AjeXKIzvdo2JwcfYqAapDQK6g082vwGV6 +certif: PyOPE1j5QLY0X5hXjbxGSwmeyiu4hEEySc4isg5fTviLhbhu8QiF4g6dpea5li/v +certif: A7K5Ag0EXTMA/gEQAOifnnBQf7Zorgs8rYijGicmJMr4AD1vDe+INyq+RPw7ipeh +certif: 2v0hNEa8Eg7fosCtpRv+5vDqOL1R8C3mHiLCGiIwGsa4pHKrek39yrJwVWSp1bmZ +certif: KdeUvNsxWwyi2VM8TtRbOqi0YV4vmQvQerhqb7UsiS2nXg52+4C/AOYwB8DMUERx +certif: jtKpzZC6roQbKKAGj2E1zcrYOlTGBvghnWrsULDsUez5sAw5uiVEbUL0QxdC/C4x +certif: H00mt7OMFh+7prPBzryh3lcSy7SOGdJk1I8RVHJqkQci6upSn5y9rF1dDbb3rb4B +certif: brJ74tKGDju/3N5N2dwJr0MxGMNmg4+39byFs7RSkcBSsTRq//wBQHcUsVuVsu8M +certif: 10YcflX8/BSC2/jluV/05gAGD+6nmXDUrgO6HBoD+msEi4iOiJP94LyR02sshrta +certif: qEALu2iVzoTipEJChJOUJlUg3VjdWxv5wm9zVgza4Kq43G6ZP2lifIDi1M2G942z +certif: 5ZGk/cn4lEpl2lLK1eofB5zI1XVefKbg+EJONCbgE6nQ92GOlLJmO29pMUQEiFqY +certif: qzpgHtDm0PgV6qN5b3imma1kw3MIDYjzvQzuW0u6ioXjFwZPaEM+PQk1U9w7H/gb +certif: m2kS3QCKX+UBv2I6NNEIXWxwS6lnmT9XdXXh9XAWkPthUf/2kysMG653zH1nABEB +certif: AAGJAjYEGAEKACAWIQS1srwGAzUD92KgvuqnXq8howBd0QUCXTMA/gIbIAAKCRCn +certif: Xq8howBd0ZLED/99N5AgSp7xPdMV3TDGUz054Ods+ZEaFp6oSLivpwHoPjsV2FAu +certif: zlK2pAd8N7h125MBnxrHsDT97K1j/I2JvUOq0hFk4mCwYcxTRKxKEBsANTkdd1wN +certif: v/050IgSaUes/fvyBdvCGUzHz18Vp4TKR28DNlyJ2Bj1V+M6OaERKed7rpm9WtEX +certif: c9NoAg7jcm8qjoZzQgcluG1bbPkdhfTjwtqya1QKeaM0fYt5ll05iDQuPuyTzU0I +certif: e9ZjTZtuHxpxQ0MFGVV1+SR2uDVQnnvHDSZu8u95p+DE9VfjDqtQk43Y6YyqhadC +certif: yxtz3XXdTOdm9Zjsl8y7QMnHYE7ouziKmTHVPaJ/U3E3xZMOalQH5BFDIQ5rK4aZ +certif: ttd5YpCW5W0d3b1R/Agr9sOL9nClyW3eRu9kJ1DAVBKkg4yxijpxJefwQP+ksbjs +certif: rCRKeH4JBXpB+dvgc+5S2PvRLAnSjU2sai1GaO317ScKiwQhVEIxG+tWzrozK51Y +certif: mT1B5C6fd8A0FXLAbDlcguXn1h9rQ7U4eZDYKTUTzsCLrZ5HvgIlS9wFS3sVYtOa +certif: EG/Tqm8+q+aij/qAJd5gAqC36/GF0mOuXVb+jXGxEP8bTySBIZy1n0XWKsFFKjM5 +certif: Y4JX9zXlNeU1BPNcZQHI+rUZ30R8yHBMDlsB5vc23bPXLIvujt/QrRQ9ObkCDQRd +certif: MwG5ARAAw5UucCL7ZU+LDduKtXxwTzB3rnSMRs2iYW1kacA8Rv5wqrpQG/KKl4RY +certif: sPRO1jN5Gss8ubU9+XmnPd6vRb9ooBCtgQ602pHMim6WeU0qT07VE8kkfOchs3ly +certif: eR5YoKL/yECl9zxrwFK7tFAlo+w2LAO/5PhIkXY/mmzxlPitI0llYzzL39OG4jqi +certif: ima5iIVO47gDYtXR8+EjQU0EO9FxbNak8Gad0RN9iBfzuhlSAZUGK2l96WQpA44M +certif: RFNC1uB6mAdKQSMNGo45OFUMYdkq8ujZ+w0a/snZ+JKtNuNmNFF9U7Vmeo4HQWGM +certif: 9KMz+Mq4HG5ropYANm5uxiV1WC16gNK3ncum/QvEzlmjuzffiqfkeClY2VRpagTS +certif: ucsLD+QZzoWjhq7I/LuVqwLPULHEsv47dHL0JoLfzsKK+hw5JhjSYdqfIVrTsNiL +certif: abTfczmscIY/4E6f6wwlE4/qIiMEfheIS2X4w9/sPcjdn22mROEOZ3fORRIbPSkA +certif: Ajpmbi14ikqmuSu6H9BWaU0ogMkjQ30kOFZOAXFHEexIqJYCPPt3wfs1qObtMO24 +certif: 98Ld6z8QdDSFm2+wl+xxTTwNIkE49qP2JrtmVNwF7srXHvTw3yzPENtzaPxEUhJ5 +certif: p8uco+71agU/3oppqWTeEscl9BgmPeYKvQkSPcM1j8RiRnmOrA0AEQEAAYkCNgQY +certif: AQoAIBYhBLWyvAYDNQP3YqC+6qderyGjAF3RBQJdMwG5AhsgAAoJEKderyGjAF3R +certif: lA4P/0tOV0TomDIp5SmA+PmLWgkWwaRJtF+P6n3KJIxLSdJpBrEPJHVdg3Bu91nO +certif: lI8muKwZOVmQJzMMljBpumKm+i27TtIJ6nlMHYk6FtjSZy3icugcILPCkI7iW3Tc +certif: gr7VLCqzSYLa7TGEmOf86CuusfBF8VYLPQxios38+WqSad4IJPGX6tACd5Fj8B5h +certif: T2yTICB/mZPLSeWQ9eBs1Tn54Fe5wonEjuIvKpvBr/kAeXahwZdl+YNYqnlb9YIN +certif: VWSaUX/KqkJw7v2Yp+YTHptJZTwbOi5yYGDSJtZUhMe0ZkWuRDcqRm+7Rc4+ZAdI +certif: Y5RTuHdWHvsN08cRqOdrK7qnXTrPk+D18swm8ZzMZtd2MmDoWGHEv42CZP0L8j3p +certif: BSWcwX8oSmgBriE6PpaOxOLNZMAx+onylnoSmxN4qRd8wQa1Ba4U6eCaxQB9CpWy +certif: yJ0u4VrP/09NB2ApK7gkk+e4CsPFIpZQ9duuZ3A/NZhkR7M553fLeVEmDX+OqZiW +certif: tRzN/T0oJ3hOgEa3T8KlyshmmHsK84KS/qeQGViCHsyOKOMxNbhqqop87qO6UPLt +certif: /Xi0lSPoG407+06MG+clD4f7nFN7TcfxG5rL04JshhAtGwqE9e4LU/2p0zNj1A3X +certif: Ct62Rgs0gZlE5USZfhc4nqmpjZrrYOiUwwGGIXBwmO/3lQ5zuQINBF8YIXsBEADH +certif: NRpRGXdW1p//6y1U4WBAC3hOp6KBW5IHWoPKKHdkUYJn58x+nlZirXz7HxATbEA2 +certif: CbSyM0Ck8j1bmuN8XuiMdWggfPDblxq7LkgREuV1eiw8sQc2U8M1OGBRDcg0I+DF +certif: fdyya3g4AEcf/UNagZuBW3kv0+x4CRMtD0PGv1zPHpvBkDzNZJF6SWmTj2fGtScT +certif: nXfjZWAtToythugA6HyfvSxt13oGWtMTBkvC4qOTfhAPH67i5VYEmktrT8/vGGwW +certif: FoDNS7tj2c/lF5XiN7K6Wo9+YpZKHoziRj5gOZAFmSeEa0MMwMQ4AfczrxBRPVaB +certif: 1mTr9Vsx0us8vyQpfriYmnlZm9SQXgcsk444al1fEfY+yz3mdO8kWH+3iQzQZOw5 +certif: K0qWrovv+QWJdoVYBDODll3LuKsrpSdoY/zdyY9coE174loyFioSkt57+/X5Y3RP +certif: hiqcTGOOYBEgPcWDVXbpoIlgyd0iQPyhisdc4lWyWCV0MJu/tUr5e+2/Cax//GXW +certif: 40gF+LgAgk8QH9U/clgf2Y6hsXnzmvDbKDFvUNy2VJfjKT1ymBrC+Fe2GWHH+zCu +certif: +8HfMtbYRI0T9ZjaK+zpC7dWOFtrvyqYvUIrJNysJR1ROa13cKtWbrLjpMEk1qxP +certif: N3tS4MM/Ny7t1ueGlsqURM6nr9sUoWaeQy5R0W7VDQARAQABiQRsBBgBCgAgFiEE +certif: tbK8BgM1A/dioL7qp16vIaMAXdEFAl8YIXsCGwICQAkQp16vIaMAXdHBdCAEGQEK +certif: AB0WIQSbNUdYPPJWLO/4jf8puYTeoFhQ0AUCXxghewAKCRApuYTeoFhQ0MKnEACr +certif: CJX3GC3WsYUgOXkEkPeVI8xiCNwjpTBsgb6soi/X9XLsttgq7NFK6iDeXiain5TR +certif: ABR6njO6NDaJMVz/LHDmpMpwEYfm086QPrtQ92fqnGo4aCFzOsqnVi2PNxaGeQj4 +certif: FTwOOyvaCcYrpwlgR9a4OmHTn5ztwjw6v+cDHVnLhVKxXThHaUXgNU/MlIGxkDBl +certif: paKKD5jiLoocX6jSNQlHBLyYag946Zl1x9sQJ8Fu7hxeXeCHNINA/DqIWzIYGs6I +certif: 0Hx4NF1gaTF6DFj8eJEgVE97M1x1L76i1Wwj+3Uf+JzCSzPe6S+0i/CSDlg3W7wS +certif: EMNtPSdieg/s7GZOew7BkobTEK5gsC083lfRIAxOMSWjF2QYzdyXbR2mKlgSHucb +certif: cj6NtwVKXfaWr6tOdhfGjQPinrB5xUYFtXNikH2KFT94PrsKacCMmuqF0MWnJekC +certif: Tg047HrqD+2iTxD0e47qjGU6UEkv2qha3JOypr0gZz9+dibJ0X20FqIkPTbN3ptJ +certif: 292W4oT7AmwhUkOq8FFHRzJUud/WNw9PaUURB2mzRybeB/6+URo6HgTcnjRENpzq +certif: sxCARLqMA8tsa4sSkyKJCUcUucfn5D+wLPGgj6qUv/sndUotTYdScDG0adD8yBxx +certif: 3anZI2Rpxbwav9LSTla/9LUOSKSULKZkGDimTf1+pjhAD/991gkWLKynILczz2yo +certif: IjsbvS8aZDGcjmX5T8QctYwpgmHMOGO+qbBg32GH7+syFXjpOn03glwNNIQOvxux +certif: 7eG3EITZHjcAmIZp1BOGHEFJNRa+Qs5J4DS1ifXoJACeXmFWGj2RM6LJgmcA9QHC +certif: ZTTsQEMMsTUkJsjs4arWcJyfGeR2AuZ10vHUfR3WCLbQ40cW6iLhM4rYlwj4p6gE +certif: wIaCPy/pbj90SfJxD91DwZxEjpGoE0T2Cpn75PL8LS7pGM/Iiq8QyhAOXqUel7p5 +certif: 4sw+AWajuKXxGg2T/HD9lySL0i2GUUSaRyvucqH/RjfW2K62/rTG4NL27MQEgd/h +certif: 60LQaESAgze8D0LEQpaTxg7LepUJ8hO2DfQOJxz5WAIK5sS5BYG7fCTimFrnbC3H +certif: 5iK3BAc8/HSgAZZUfpMOKnUExtMECBH6HnTA7d7uT/fEOhim8hz2K6KsWRWzeYQP +certif: xeIVM5PdMIbGxdG7cqnPd/4lHBeCg7nkO0VLFiMI3CXIgwd2mK2nOSiWOf9XV+H3 +certif: 4o+29IBnYo8ne7tmDHzpRu3zJpwU+Jath5mTgRtIxf9S36s3PbAW5zLCRlxMo+6A +certif: 7N/C0n2GGIUqleCn1nEd79cLvihzUYn6yLhv7Al7vIb4qPw3OBNqaIGzhVT5oRlb +certif: 8rBKBRilarwcZyefK4S4cxqHV7kCDQRfGCK8ARAAtCFo+PJwv3sS75SnHQ8KHMHp +certif: 1ACKdXU8si4s08cXkDDvepcnlE53QgpM9kYxym2EoMVT+FO+6vQH4D32NCHk1rjC +certif: uvozRrhuhVlhduvjlIKZWjKirjyMa4sdSxIQfE/IbwbCOB9wLWoRxyQ+HC1jyRO5 +certif: 5TtSoEGyj66o2ISKaGrLdRc36xVVu8siyLA5lvjHju7r086pV2RF6BHl5sYQvkmO +certif: Vu+1B6frcT253Z2+S6x6iL4pKYceTINThRn4O3O56kAZaWg/c3ZOHinu1DihSVu/ +certif: l1pi1wCnOVTnbr7ilvN3IDWk4Oi3p+3vKZdFnrjeh3za8KX553b/ydaeI2Y/jtyk +certif: 2PXXwdOrXsVd0wXENrlpTUghGMcV5SJiX585sISt8bGfgyKgGO+FtsK/1Qj5Uo3F +certif: 29gpZKD8PTZHRY1HkvWUklUyxBaFiCKqlewRQgS8pyktkpnp5S2lTvFPu8F3QqgZ +certif: BXvwXcmwVyO7LDR4i4BRnr4Zq9hWWSBU546VIV9DTTjVs0+PMUuebv3026Eg41Hc +certif: oLGgjfBDIEitG5qSNYtSuk8zhbo2zltw4Qx7JHP8D01CktaqoEc2qXwoZPBFPrnv +certif: CGgwUUqpW5O42JzZzXfASRcs12XHb2CfDsyGLjC7tkTnW83WMDpyqmMP/uuvjue9 +certif: h45c6eNJs9R8506p2BkAEQEAAYkEbAQYAQoAIBYhBLWyvAYDNQP3YqC+6qderyGj +certif: AF3RBQJfGCK8AhsCAkAJEKderyGjAF3RwXQgBBkBCgAdFiEEKNOtIDxR6doYvM/b +certif: v6Ur1UOPX5gFAl8YIrwACgkQv6Ur1UOPX5hPnhAAn0hru62D6pRPPYL1aS9msAhh +certif: +Zn3kl5xxO8VQP+MjZVeW2NeJHk5HDFU2RphsHIGgmDcn6uixq+aSwaByxGjSM/d +certif: 9QxYc+WBqZMZ5FHWsEHFeVu4gc+UoqEpR25nMDE7PznbVr1x1NkiqRViN/WLNZVX +certif: qxxNZwkhKwhls9YbozCR11CXE++ZP9JI8fnD3CDf+YXQrDpn9y3I26l2BV/LkfGE +certif: JnqfBxNSqFk3Qb+z1wQkhQ8DngiENHcQNOMK/rVUXCVAvLdcfIIfcaQ1CZUIxYwG +certif: rlsaJRcAf20jPHIlHihscXWZ6bCUFSrKeLNjGPmr4Exxz3Rpt9YnvlddiJFYT3Y7 +certif: 85RujblJfrB5WF68mBTTLuJ+W99QtM6f9LbkV3oec18cWAnNCLCyesLch1Xbp3M3 +certif: nrzRljPQXuJ95ltBAfo+8DoslyFdAx033AKSbEJpRo1ijGQacPDqgkjEwTTrhP82 +certif: n23p6irlKuwTHPCC56fGbXy5LayL1VpL+zeqR5lG76plP3YQltdXRNvBFP8yvz1H +certif: R3W6vpmqWAxHmQwqoDgTHj5uynNdYLxQhkaqWF169PvnawcZTe5hek31YdPCKa7R +certif: BQ/9oWYScsZ4VvXSLJ/Q8WRrDm9AbjfguRVD46P9zuQRDL0dVsOhavH3ipMcNWBZ +certif: fpXtknQIVD9Lz/iC8fnJoQ//SQozqK2RJUdY2gz8Fhqp/mMfhYGBbV+3zZCWr25+ +certif: m48tnRwUeoPRnAtJVaCe4MCGuBLN4xQK2th/XVErhYg7guxWpXZR53SNUBjrtrnl +certif: WQzRP6vqg+0GUJYia+qZMS0xYaf+K3bxT4OcwQ9pzVJ2g981FYUMfZ8GcsWdnnSm +certif: BhWgPEpvHGyOaZXkLNQ7Q77Zn+Jr/fvcKtg5s0z08pYQeeZh8ryoO1DVvOaJ1lhY +certif: ydNpZJPVLXWoWGUDYYAbu1OPh9o0WdUhy5eKyNng8W0sPgXt/AHlP8y9S0uBjqkA +certif: zscW65c4Fvi+zukh9cYX8MR81SRgElvqVAoIm6BKc8QCDbf7L/u+LO3pzS5LqnEb +certif: vEk3z2mVmLFh1SwUMeoxRD4vOfswKr1TGwdTjApLBZkF6eqADhKYaHtjfEqJroQl +certif: D1XAT9bulXFNPJhwszVk/yeDq2n6WQUzXUggc50hh96FtxqopThF86uF1OPMjlel +certif: WcTFP+M6AbTkUgA+QKcfGHji2rgLenZC1gjQVuK+ccn/hdz+vTLb4bqPc/JWPsa1 +certif: i10XrvJbp3Ea5TJDw0XPZbJ1kO3Hkff58Oi5Jg9CXWN8E90UHimTRZEjcidL51y0 +certif: XqL2OrJu+vktfjBLnsoYQ4frioFHuuQ7y1hNgqdNYTsU2p0ZIlymDg8k2M3GTDPx +certif: ScQ= +certif: =usC5 +certif: -----END PGP PUBLIC KEY BLOCK----- +mnt-by: JRB0001-MNT +source: DN42 diff --git a/data/mntner/ARG-MNT b/data/mntner/ARG-MNT new file mode 100644 index 000000000..47342d269 --- /dev/null +++ b/data/mntner/ARG-MNT @@ -0,0 +1,7 @@ +mntner: ARG-MNT +descr: Arg Maintainer +admin-c: ARG-DN42 +tech-c: ARG-DN42 +mnt-by: ARG-MNT +source: DN42 +auth: pgp-fingerprint BDF14A59875B117B6FFCD55C8DC6E09C30441D5F diff --git a/data/mntner/BONJOU2333-MNT b/data/mntner/BONJOU2333-MNT new file mode 100644 index 000000000..82cdc0e17 --- /dev/null +++ b/data/mntner/BONJOU2333-MNT @@ -0,0 +1,8 @@ +mntner: BONJOU2333-MNT +admin-c: BONJOU2333-DN42 +tech-c: BONJOU2333-DN42 +mnt-by: BONJOU2333-MNT +source: DN42 +auth: pgp-fingerprint BA301AFDC53780ECE36307F76D41C706AA8F2D18 +auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC9iQEMXo4pYBCiKVA0yznXIhW+VY9sg2SPIjG5ELgniQcbM9Xx+CFPMokTX0dVCxskAK2BWKkUhSyBrPpvr9tMn/0igK+wqpqdOEbvYBD3F6JRF5u6l/915McGQ4ySVVWGiGfnjNU6OlVqxw2aRG0cn8YmspzAmv2yqHCTvXEVommvoLzeTWziRjH+cKSNQCW6V0KcBifvicBBvIaYSwOvN+0rVQ8PtC1MfO0jYeMbshmXNovPO8PO9rGNR+Ti5P7Up3VaceFfhQkoySKGmPWhWP/ozhXF5OQgmJ/0tZCfGNPWV+NKTS40XMgC5LBtjSM3Umd8jMD72K7kpIF/RKQU/Ba3FWKWPn6e4ldWR/OyUTJSyWrXnTJFxUlM96MewKt9/2a5fv3bWag74al3zjtMpb6AJycuNMC4iVpqdBjW585vqKVD2CYz96IN0h+HLQTkt3kR1hJdc2fEZfgSYuWRTxROhCccN8z4PaURizQ4Wd4rYVu1ZBf00lHkRDN+qWdvFjCsjF56fzXBWP1SXH1q23OQbRljviYkzzS/OHaDpYJ73bcFbzLW1BpfAs0C9OhibqgkFgJ1D1S4IF0nAgTm8tuAYz0n1qohdMxG5CEqs7Hwh3fTwB2Cg8batRstotI2SAB6xbLiP/6UaWA1EdPB+pdphQ/I2qdQyN9eOklClQ== +remarks: ouo diff --git a/data/mntner/CHILLONETWORK-MNT b/data/mntner/CHILLONETWORK-MNT new file mode 100644 index 000000000..38970adc1 --- /dev/null +++ b/data/mntner/CHILLONETWORK-MNT @@ -0,0 +1,6 @@ +mntner: CHILLONETWORK-MNT +admin-c: CHILLONETWORK-DN42 +tech-c: CHILLONETWORK-DN42 +mnt-by: CHILLONETWORK-MNT +auth: PGPKEY-0EBA4577 +source: DN42 diff --git a/data/mntner/DANN-MNT b/data/mntner/DANN-MNT new file mode 100644 index 000000000..84dc345ad --- /dev/null +++ b/data/mntner/DANN-MNT @@ -0,0 +1,7 @@ +mntner: DANN-MNT +descr: DANN +tech-c: DANN-DN42 +admin-c: DANN-DN42 +mnt-by: DANN-MNT +auth: pgp-fingerprint 40172DE4A93EAAB1F5490750983F00BC64C8382D +source: DN42 diff --git a/data/mntner/JELLYCHOU-MNT b/data/mntner/JELLYCHOU-MNT new file mode 100644 index 000000000..06307cca6 --- /dev/null +++ b/data/mntner/JELLYCHOU-MNT @@ -0,0 +1,6 @@ +mntner: JELLYCHOU-MNT +admin-c: JELLYCHOU-DN42 +tech-c: JELLYCHOU-DN42 +mnt-by: JELLYCHOU-MNT +source: DN42 +auth: pgp-fingerprint 55D5BE7A3CF2C6297D51DC27D10344E090301733 diff --git a/data/mntner/JRB0001-MNT b/data/mntner/JRB0001-MNT index 6693d6eda..9e6dc33ae 100644 --- a/data/mntner/JRB0001-MNT +++ b/data/mntner/JRB0001-MNT @@ -2,7 +2,7 @@ mntner: JRB0001-MNT admin-c: JRB0001-DN42 tech-c: JRB0001-DN42 mnt-by: JRB0001-MNT -auth: PGPKEY-9ADEBB91 +auth: PGPKEY-A3005DD1 auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDon55wUH+2aK4LPK2IoxonJiTK+AA9bw3viDcqvkT8O4qXodr9ITRGvBIO36LAraUb/ubw6ji9UfAt5h4iwhoiMBrGuKRyq3pN/cqycFVkqdW5mSnXlLzbMVsMotlTPE7UWzqotGFeL5kL0Hq4am+1LIktp14OdvuAvwDmMAfAzFBEcY7Sqc2Quq6EGyigBo9hNc3K2DpUxgb4IZ1q7FCw7FHs+bAMObolRG1C9EMXQvwuMR9NJrezjBYfu6azwc68od5XEsu0jhnSZNSPEVRyapEHIurqUp+cvaxdXQ22962+AW6ye+LShg47v9zeTdncCa9DMRjDZoOPt/W8hbO0UpHAUrE0av/8AUB3FLFblbLvDNdGHH5V/PwUgtv45blf9OYABg/up5lw1K4DuhwaA/prBIuIjoiT/eC8kdNrLIa7WqhAC7tolc6E4qRCQoSTlCZVIN1Y3Vsb+cJvc1YM2uCquNxumT9pYnyA4tTNhveNs+WRpP3J+JRKZdpSytXqHwecyNV1Xnym4PhCTjQm4BOp0PdhjpSyZjtvaTFEBIhamKs6YB7Q5tD4FeqjeW94ppmtZMNzCA2I870M7ltLuoqF4xcGT2hDPj0JNVPcOx/4G5tpEt0Ail/lAb9iOjTRCF1scEupZ5k/V3V14fVwFpD7YVH/9pMrDBuud8x9Zw== primary auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDlS5wIvtlT4sN24q1fHBPMHeudIxGzaJhbWRpwDxG/nCqulAb8oqXhFiw9E7WM3kayzy5tT35eac93q9Fv2igEK2BDrTakcyKbpZ5TSpPTtUTySR85yGzeXJ5Hligov/IQKX3PGvAUru0UCWj7DYsA7/k+EiRdj+abPGU+K0jSWVjPMvf04biOqKKZrmIhU7juANi1dHz4SNBTQQ70XFs1qTwZp3RE32IF/O6GVIBlQYraX3pZCkDjgxEU0LW4HqYB0pBIw0ajjk4VQxh2Sry6Nn7DRr+ydn4kq0242Y0UX1TtWZ6jgdBYYz0ozP4yrgcbmuilgA2bm7GJXVYLXqA0redy6b9C8TOWaO7N9+Kp+R4KVjZVGlqBNK5ywsP5BnOhaOGrsj8u5WrAs9QscSy/jt0cvQmgt/Owor6HDkmGNJh2p8hWtOw2ItptN9zOaxwhj/gTp/rDCUTj+oiIwR+F4hLZfjD3+w9yN2fbaZE4Q5nd85FEhs9KQACOmZuLXiKSqa5K7of0FZpTSiAySNDfSQ4Vk4BcUcR7EiolgI8+3fB+zWo5u0w7bj3wt3rPxB0NIWbb7CX7HFNPA0iQTj2o/Ymu2ZU3AXuytce9PDfLM8Q23No/ERSEnmny5yj7vVqBT/eimmpZN4SxyX0GCY95gq9CRI9wzWPxGJGeY6sDQ== secondary remarks: pin-sha256:0IPBGJ4HCeUmxM5rgVW0I1hjhTr44VeQAk/oY1odR1Y= diff --git a/data/mntner/JULIA-MNT b/data/mntner/JULIA-MNT new file mode 100644 index 000000000..019776f07 --- /dev/null +++ b/data/mntner/JULIA-MNT @@ -0,0 +1,6 @@ +mntner: JULIA-MNT +admin-c: JULIA-DN42 +tech-c: JULIA-DN42 +mnt-by: JULIA-MNT +auth: pgp-fingerprint 249171DF47AA8086D26F14339F7B6CA7B2D2899E +source: DN42 diff --git a/data/person/ARG-DN42 b/data/person/ARG-DN42 new file mode 100644 index 000000000..1572c5532 --- /dev/null +++ b/data/person/ARG-DN42 @@ -0,0 +1,5 @@ +person: Chris Becker +contact: cbecker275@protonmail.com +nic-hdl: ARG-DN42 +mnt-by: ARG-MNT +source: DN42 diff --git a/data/person/BONJOU2333-DN42 b/data/person/BONJOU2333-DN42 new file mode 100644 index 000000000..fe219caaa --- /dev/null +++ b/data/person/BONJOU2333-DN42 @@ -0,0 +1,5 @@ +person: Bonjou2333 +contact: bonjou2333@gmail.com +nic-hdl: BONJOU2333-DN42 +mnt-by: BONJOU2333-MNT +source: DN42 diff --git a/data/person/CHILLONETWORK-DN42 b/data/person/CHILLONETWORK-DN42 new file mode 100644 index 000000000..d2470c409 --- /dev/null +++ b/data/person/CHILLONETWORK-DN42 @@ -0,0 +1,5 @@ +person: ALCHEMIST +contact: CHILLONETWORK@PROTONMAIL.COM +nic-hdl: CHILLONETWORK-DN42 +mnt-by: CHILLONETWORK-MNT +source: DN42 diff --git a/data/person/DANN-DN42 b/data/person/DANN-DN42 new file mode 100644 index 000000000..d603bb7cc --- /dev/null +++ b/data/person/DANN-DN42 @@ -0,0 +1,5 @@ +person: Danni S +e-mail: mail@danni.id +nic-hdl: DANN-DN42 +mnt-by: DANN-MNT +source: DN42 diff --git a/data/person/JELLYCHOU-DN42 b/data/person/JELLYCHOU-DN42 new file mode 100644 index 000000000..585aa6428 --- /dev/null +++ b/data/person/JELLYCHOU-DN42 @@ -0,0 +1,5 @@ +person: Jelly Chou +contact: dvfanzrfo@gmail.com +nic-hdl: JELLYCHOU-DN42 +mnt-by: JELLYCHOU-MNT +source: DN42 diff --git a/data/person/JRB0001-DN42 b/data/person/JRB0001-DN42 index 734958eec..65ae943b2 100644 --- a/data/person/JRB0001-DN42 +++ b/data/person/JRB0001-DN42 @@ -1,7 +1,7 @@ person: jrb0001 e-mail: jrb0001@692b8c32.de contact: irc: jrb0001@hackint -pgp-fingerprint: 78277EB910891802E3214560809B84B69ADEBB91 +pgp-fingerprint: B5B2BC06033503F762A0BEEAA75EAF21A3005DD1 nic-hdl: JRB0001-DN42 mnt-by: JRB0001-MNT source: DN42 diff --git a/data/person/JULIA-DN42 b/data/person/JULIA-DN42 new file mode 100644 index 000000000..e69bce64a --- /dev/null +++ b/data/person/JULIA-DN42 @@ -0,0 +1,5 @@ +person: Julia Luna +e-mail: julia@julialuna.dev +nic-hdl: JULIA-DN42 +mnt-by: JULIA-MNT +source: DN42 diff --git a/data/route/10.127.235.0_24 b/data/route/10.127.235.0_24 new file mode 100644 index 000000000..82569deec --- /dev/null +++ b/data/route/10.127.235.0_24 @@ -0,0 +1,8 @@ +route: 10.127.235.0/24 +origin: AS4201270017 +max-length: 29 +admin-c: CAINSAKURA-NEONETWORK +tech-c: CAINSAKURA-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/route/10.127.236.0_24 b/data/route/10.127.236.0_24 new file mode 100644 index 000000000..0c33860ac --- /dev/null +++ b/data/route/10.127.236.0_24 @@ -0,0 +1,8 @@ +route: 10.127.236.0/24 +origin: AS4201270005 +max-length: 29 +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/route/10.127.237.0_24 b/data/route/10.127.237.0_24 new file mode 100644 index 000000000..ec24bdeed --- /dev/null +++ b/data/route/10.127.237.0_24 @@ -0,0 +1,8 @@ +route: 10.127.237.0/24 +origin: AS4201270008 +max-length: 29 +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/route/172.20.15.40_29 b/data/route/172.20.15.40_29 new file mode 100644 index 000000000..5b748ca97 --- /dev/null +++ b/data/route/172.20.15.40_29 @@ -0,0 +1,4 @@ +route: 172.20.15.40/29 +origin: AS4242422131 +mnt-by: JULIA-MNT +source: DN42 diff --git a/data/route/172.20.229.112_29 b/data/route/172.20.229.112_28 similarity index 69% rename from data/route/172.20.229.112_29 rename to data/route/172.20.229.112_28 index b96f57a01..e01461106 100644 --- a/data/route/172.20.229.112_29 +++ b/data/route/172.20.229.112_28 @@ -1,4 +1,4 @@ -route: 172.20.229.112/29 +route: 172.20.229.112/28 origin: AS4242421080 mnt-by: JLU5-MNT source: DN42 diff --git a/data/route/172.20.233.64_26 b/data/route/172.20.233.64_26 new file mode 100644 index 000000000..5bac1df17 --- /dev/null +++ b/data/route/172.20.233.64_26 @@ -0,0 +1,5 @@ +route: 172.20.233.64/26 +descr: Peer with me at bonjou2333@gmail.com +origin: AS4242421130 +mnt-by: BONJOU2333-MNT +source: DN42 diff --git a/data/route/172.20.238.128_27 b/data/route/172.20.238.128_27 new file mode 100644 index 000000000..fa035271c --- /dev/null +++ b/data/route/172.20.238.128_27 @@ -0,0 +1,4 @@ +route: 172.20.238.128/27 +origin: AS4242423878 +mnt-by: JELLYCHOU-MNT +source: DN42 diff --git a/data/route/172.21.100.128_25 b/data/route/172.21.100.128_25 index 8130f3c69..481ce119e 100644 --- a/data/route/172.21.100.128_25 +++ b/data/route/172.21.100.128_25 @@ -1,4 +1,5 @@ route: 172.21.100.128/25 origin: AS4242423088 +origin: AS140936 mnt-by: SUNNET-MNT source: DN42 diff --git a/data/route/172.22.128.32_28 b/data/route/172.22.128.32_28 new file mode 100644 index 000000000..dc4c9395b --- /dev/null +++ b/data/route/172.22.128.32_28 @@ -0,0 +1,4 @@ +route: 172.22.128.32/28 +origin: AS4242423266 +mnt-by: DANN-MNT +source: DN42 diff --git a/data/route/172.23.104.64_27 b/data/route/172.23.104.64_27 new file mode 100644 index 000000000..a52e0ff07 --- /dev/null +++ b/data/route/172.23.104.64_27 @@ -0,0 +1,4 @@ +route: 172.23.104.64/27 +origin: AS4242422761 +mnt-by: ARG-MNT +source: DN42 diff --git a/data/route/172.23.178.64_27 b/data/route/172.23.178.64_27 new file mode 100644 index 000000000..28c363386 --- /dev/null +++ b/data/route/172.23.178.64_27 @@ -0,0 +1,4 @@ +route: 172.23.178.64/27 +origin: AS4242423267 +mnt-by: CHILLONETWORK-MNT +source: DN42 diff --git a/data/route6/fd00:1953:615::_48 b/data/route6/fd00:1953:615::_48 new file mode 100644 index 000000000..e0a9a131a --- /dev/null +++ b/data/route6/fd00:1953:615::_48 @@ -0,0 +1,4 @@ +route6: fd00:1953:615::/48 +origin: AS4242422761 +mnt-by: ARG-MNT +source: DN42 diff --git a/data/route6/fd07:d34:7969::_48 b/data/route6/fd07:d34:7969::_48 index bb64126c7..f1d10a002 100644 --- a/data/route6/fd07:d34:7969::_48 +++ b/data/route6/fd07:d34:7969::_48 @@ -1,5 +1,5 @@ route6: fd07:d34:7969::/48 origin: AS4242423618 -max-length: 48 +max-length: 64 mnt-by: JERRY-MNT source: DN42 diff --git a/data/route6/fd10:127:233:1c3a::_64 b/data/route6/fd10:127:233:1c3a::_64 new file mode 100644 index 000000000..cbcd200d6 --- /dev/null +++ b/data/route6/fd10:127:233:1c3a::_64 @@ -0,0 +1,8 @@ +route6: fd10:127:233:1c3a::/64 +origin: AS4201270005 +max-length: 64 +admin-c: ICECAT-NEONETWORK +tech-c: ICECAT-NEONETWORK +remarks: Imported from neonetwork, do not edit! +mnt-by: DN42-MNT +source: NEONETWORK diff --git a/data/route6/fd42:1130::_48 b/data/route6/fd42:1130::_48 new file mode 100644 index 000000000..39b8a3212 --- /dev/null +++ b/data/route6/fd42:1130::_48 @@ -0,0 +1,5 @@ +route6: fd42:1130::/48 +descr: Peer with me at bonjou2333@gmail.com +origin: AS4242421130 +mnt-by: BONJOU2333-MNT +source: DN42 diff --git a/data/route6/fd6d:3f59:4c68::_48 b/data/route6/fd6d:3f59:4c68::_48 new file mode 100644 index 000000000..b11f2f207 --- /dev/null +++ b/data/route6/fd6d:3f59:4c68::_48 @@ -0,0 +1,6 @@ +route6: fd6d:3f59:4c68::/48 +descr: Jelly Chou's IP space +origin: AS4242423878 +origin: AS4242423878 +mnt-by: JELLYCHOU-MNT +source: DN42 diff --git a/data/route6/fd8e:1889:b440::_48 b/data/route6/fd8e:1889:b440::_48 new file mode 100644 index 000000000..c1de2b731 --- /dev/null +++ b/data/route6/fd8e:1889:b440::_48 @@ -0,0 +1,5 @@ +route6: fd8e:1889:b440::/48 +origin: AS4242423266 +max-length: 48 +mnt-by: DANN-MNT +source: DN42 diff --git a/data/route6/fdb4:acab:1312::_48 b/data/route6/fdb4:acab:1312::_48 new file mode 100644 index 000000000..ce0d21c85 --- /dev/null +++ b/data/route6/fdb4:acab:1312::_48 @@ -0,0 +1,5 @@ +route6: fdb4:acab:1312::/48 +origin: AS4242422131 +max-length: 48 +mnt-by: JULIA-MNT +source: DN42 diff --git a/data/route6/fdc8:dc88:ee11::_48 b/data/route6/fdc8:dc88:ee11::_48 index 53910c395..2e2721898 100644 --- a/data/route6/fdc8:dc88:ee11::_48 +++ b/data/route6/fdc8:dc88:ee11::_48 @@ -1,4 +1,5 @@ route6: fdc8:dc88:ee11::/48 origin: AS4242423088 +origin: AS140936 mnt-by: SUNNET-MNT source: DN42 diff --git a/utils/schema-check/dn42-schema.py b/utils/schema-check/dn42-schema.py index 1fe098294..acf9cf3b7 100755 --- a/utils/schema-check/dn42-schema.py +++ b/utils/schema-check/dn42-schema.py @@ -1,21 +1,25 @@ #!/usr/bin/env python3 +"DN42 Schema Checker" from __future__ import print_function import re import os import sys +import time import argparse -import log import glob -import random -from pprint import pprint +import urllib.parse +import http.client +import json +import log SCHEMA_NAMESPACE = "dn42." class SchemaDOM: + "schema" def __init__(self, fn): self.name = None self.ref = None @@ -27,30 +31,30 @@ class SchemaDOM: def __parse_schema(self, f): schema = {} - for k, v, l in f.dom: - if k == 'ref': - self.ref = v - elif k == 'schema': - self.name = v + for key, val, _ in f.dom: + if key == "ref": + self.ref = val + elif key == "schema": + self.name = val - if k != 'key': + if key != "key": continue - v = v.split() - key = v.pop(0) + val = val.split() + key = val.pop(0) schema[key] = set() - for i in v: + for i in val: if i == ">": break schema[key].add(i) for k, v in schema.items(): - if 'schema' in v: + if "schema" in v: self.type = k - if 'primary' in v: + if "primary" in v: self.primary = k schema[k].add("oneline") if "multiline" in v: @@ -66,51 +70,63 @@ class SchemaDOM: if "deprecate" in v: schema[k].remove("deprecate") - if 'oneline' not in v: + if "oneline" not in v: schema[k].add("multiline") - if 'single' not in v: + if "single" not in v: schema[k].add("multiple") return schema def check_file(self, f, lookups=None): + "check file" status = "PASS" if not f.valid: - log.error("%s Line 0: File does not parse" % (f.src)) - status = "FAIL" + log.error("%s Line 0: File does not parse" % (f.src)) + status = "FAIL" for k, v in self.schema.items(): - if 'required' in v and k not in f.keys: - log.error( - "%s Line 0: Key [%s] not found and is required." % (f.src, k)) + if "required" in v and k not in f.keys: + log.error("%s Line 0: Key [%s] not found and is required." % (f.src, k)) status = "FAIL" - elif 'recommend' in v and k not in f.keys: + elif "recommend" in v and k not in f.keys: log.notice( - "%s Line 0: Key [%s] not found and is recommended." % (f.src, k)) + "%s Line 0: Key [%s] not found and is recommended." % (f.src, k) + ) status = "NOTE" - if 'schema' in v and SCHEMA_NAMESPACE + f.dom[0][0] != self.ref: + if "schema" in v and SCHEMA_NAMESPACE + f.dom[0][0] != self.ref: log.error( - "%s Line 1: Key [%s] not found and is required as the first line." % (f.src, k)) + "%s Line 1: Key [%s] not found and is required as the first line." + % (f.src, k) + ) status = "FAIL" - if 'single' in v and k in f.keys and len(f.keys[k]) > 1: - log.warning("%s Line %d: Key [%s] first defined here and has repeated keys." % ( - f.src, f.keys[k][0], k)) + if "single" in v and k in f.keys and len(f.keys[k]) > 1: + log.warning( + "%s Line %d: Key [%s] first defined here and has repeated keys." + % (f.src, f.keys[k][0], k) + ) for l in f.keys[k][1:]: log.error( - "%s Line %d: Key [%s] can only appear once." % (f.src, l, k)) + "%s Line %d: Key [%s] can only appear once." % (f.src, l, k) + ) status = "FAIL" - if 'oneline' in v and k in f.multi: + if "oneline" in v and k in f.multi: for l in f.keys[k]: log.error( - "%s Line %d: Key [%s] can not have multiple lines." % (f.src, l, k)) + "%s Line %d: Key [%s] can not have multiple lines." + % (f.src, l, k) + ) status = "FAIL" for k, v, l in f.dom: - if k == self.primary and not f.src.endswith(v.replace("/","_").replace(" ","")): - log.error("%s Line %d: Primary [%s: %s] does not match filename." % (f.src, l, k, v)) + if k == self.primary and not f.src.endswith( + v.replace("/", "_").replace(" ", "")): + log.error( + "%s Line %d: Primary [%s: %s] does not match filename." + % (f.src, l, k, v) + ) status = "FAIL" if k.startswith("x-"): @@ -121,9 +137,11 @@ class SchemaDOM: status = "FAIL" continue else: - if 'deprecate' in self.schema[k]: + if "deprecate" in self.schema[k]: log.info( - "%s Line %d: Key [%s] was found and is deprecated." % (f.src, l, k)) + "%s Line %d: Key [%s] was found and is deprecated." + % (f.src, l, k) + ) status = "INFO" if lookups is not None: @@ -136,20 +154,22 @@ class SchemaDOM: if (ref, val) in lookups: found = True if not found: - log.error("%s Line %d: Key %s references object %s in %s but does not exist." % ( - f.src, l, k, val, refs)) + log.error( + "%s Line %d: Key %s references object %s in %s but does not exist." + % (f.src, l, k, val, refs) + ) status = "FAIL" if status != "FAIL": ck = sanity_check(f) if ck == "FAIL": status = ck - print("CHECK\t%-54s\t%s\tMNTNERS: %s" %(f.src, status, ','.join(f.mntner))) + print("CHECK\t%-54s\t%s\tMNTNERS: %s" % (f.src, status, ",".join(f.mntner))) return status class FileDOM: - + "file" def __init__(self, fn): self.valid = True self.dom = [] @@ -159,7 +179,7 @@ class FileDOM: self.schema = None self.src = fn - with open(fn, mode='r', encoding='utf-8') as f: + with open(fn, mode="r", encoding="utf-8") as f: dom = [] keys = {} multi = {} @@ -167,9 +187,9 @@ class FileDOM: last_multi = None for lineno, i in enumerate(f.readlines(), 1): - if re.match(r'[ \t]', i): + if re.match(r"[ \t]", i): if len(dom) == 0: - log.error("File %s does not parse properly" % (fn) ) + log.error("File %s does not parse properly" % (fn)) self.valid = False return @@ -187,7 +207,7 @@ class FileDOM: if len(i) < 2: continue - dom.append([i[0].strip(), ':'.join(i[1:]).strip(), lineno - 1]) + dom.append([i[0].strip(), ":".join(i[1:]).strip(), lineno - 1]) if i[0].strip() not in keys: keys[i[0].strip()] = [] @@ -196,7 +216,7 @@ class FileDOM: last_multi = None - if dom[-1][0] == 'mnt-by': + if dom[-1][0] == "mnt-by": mntner.append(dom[-1][1]) self.dom = dom @@ -216,11 +236,12 @@ class FileDOM: s += i[0] + ":" + " " * (length - len(i[0])) + l[0] + "\n" for m in l[1:]: - s += " " * (length + 1) + m + "\n" + s += " " * (length + 1) + m + "\n" return s def get(self, key, index=0, default=None): + "get value" if key not in self.keys: return default if index >= len(self.keys[key]) or index <= -len(self.keys[key]): @@ -230,7 +251,7 @@ class FileDOM: def main(infile, schema): - + "main command" log.debug("Check File: %s" % (infile)) f = FileDOM(infile) @@ -248,54 +269,67 @@ def main(infile, schema): s = SchemaDOM(f.schema) return s.check_file(f) + def check_schemas(path): + "check schemas" schemas = {} - for fn in glob.glob(path+"/*"): + for fn in glob.glob(path + "/*"): s = SchemaDOM(fn) log.info("read schema: %s" % (s.name)) schemas[s.ref] = s ok = True c = schemas[SCHEMA_NAMESPACE + "schema"] - for s in schemas.keys(): + for s in schemas: ck = c.check_file(s) if not ck: ok = False return ok + def scan_index(infile, mntner=None): + "scan index" idx = {} schemas = {} - with open(infile, 'r') as f: + with open(infile, "r") as f: for line in f.readlines(): line = line.split() idx[(line[0], line[1])] = line[2:] - if line[0] == SCHEMA_NAMESPACE + 'schema': + if line[0] == SCHEMA_NAMESPACE + "schema": s = SchemaDOM(line[2]) log.info("read schema: %s" % (s.name)) schemas[s.ref] = s return __scan_index(idx, schemas, mntner) + def scan_files(path, mntner=None, use_file=None): + "scan files" arr = __index_files(path, use_file) idx = {} schemas = {} for dom in arr: - line = (dom.schema, dom.src.split("/")[-1].replace("_", "/"), dom.src, ",".join(dom.mntner), dom) + line = ( + dom.schema, + dom.src.split("/")[-1].replace("_", "/"), + dom.src, + ",".join(dom.mntner), + dom, + ) idx[(line[0], line[1])] = line[2:] - if line[0] == SCHEMA_NAMESPACE + 'schema': + if line[0] == SCHEMA_NAMESPACE + "schema": s = SchemaDOM(line[2]) schemas[s.ref] = s return __scan_index(idx, schemas, mntner, use_file) -def __scan_index(idx, schemas, mntner, use_file): + +def __scan_index(idx, schemas, mntner, use_file=None): ok = True for k, v in idx.items(): if use_file is not None and use_file != v[0]: @@ -304,7 +338,7 @@ def __scan_index(idx, schemas, mntner, use_file): s = schemas.get(k[0], None) if s is None: log.error("No schema found for %s" % (k[1])) - print("CHECK\t%-54s\tFAIL\tMNTNERS: UNKNOWN" %(v[2].src)) + print("CHECK\t%-54s\tFAIL\tMNTNERS: UNKNOWN" % (v[2].src)) ok = "FAIL" else: @@ -315,7 +349,6 @@ def __scan_index(idx, schemas, mntner, use_file): if mntner is not None and mntner not in mlist: continue - c = v[2] ck = s.check_file(c, idx.keys()) @@ -325,34 +358,35 @@ def __scan_index(idx, schemas, mntner, use_file): ok = ck return ok -def __index_files(path, use_file): + +def __index_files(path, use_file=None): xlat = { - "dns/": SCHEMA_NAMESPACE + "domain", - "inetnum/": SCHEMA_NAMESPACE + "inetnum", - "inet6num/": SCHEMA_NAMESPACE + "inet6num", - "route/": SCHEMA_NAMESPACE + "route", - "route6/": SCHEMA_NAMESPACE + "route6", - "aut-num/": SCHEMA_NAMESPACE + "aut-num", - "as-set/": SCHEMA_NAMESPACE + "as-set", - "as-block/": SCHEMA_NAMESPACE + "as-block", + "dns/": SCHEMA_NAMESPACE + "domain", + "inetnum/": SCHEMA_NAMESPACE + "inetnum", + "inet6num/": SCHEMA_NAMESPACE + "inet6num", + "route/": SCHEMA_NAMESPACE + "route", + "route6/": SCHEMA_NAMESPACE + "route6", + "aut-num/": SCHEMA_NAMESPACE + "aut-num", + "as-set/": SCHEMA_NAMESPACE + "as-set", + "as-block/": SCHEMA_NAMESPACE + "as-block", "organisation/": SCHEMA_NAMESPACE + "organisation", - "mntner/": SCHEMA_NAMESPACE + "mntner", - "person/": SCHEMA_NAMESPACE + "person", - "role/": SCHEMA_NAMESPACE + "role", - "tinc-key/": SCHEMA_NAMESPACE + "tinc-key", - "tinc-keyset/": SCHEMA_NAMESPACE + "tinc-keyset", - "registry/": SCHEMA_NAMESPACE + "registry", - "schema/": SCHEMA_NAMESPACE + "schema", + "mntner/": SCHEMA_NAMESPACE + "mntner", + "person/": SCHEMA_NAMESPACE + "person", + "role/": SCHEMA_NAMESPACE + "role", + "tinc-key/": SCHEMA_NAMESPACE + "tinc-key", + "tinc-keyset/": SCHEMA_NAMESPACE + "tinc-keyset", + "registry/": SCHEMA_NAMESPACE + "registry", + "schema/": SCHEMA_NAMESPACE + "schema", } - for root, dirs, files in os.walk(path): + for root, _, files in os.walk(path): ignore = True - for t in xlat.keys(): - if root+"/" == os.path.join(path, t): - ignore = False - break + for t in xlat: + if root + "/" == os.path.join(path, t): + ignore = False + break if ignore: - continue + continue for f in files: if f[0] == ".": @@ -361,35 +395,35 @@ def __index_files(path, use_file): yield dom if use_file is not None: - dom = FileDOM(use_file) - yield dom + dom = FileDOM(use_file) + yield dom + def index_files(path): + "index files" idx = __index_files(path) for i in idx: print("%s\t%s\t%s\t%s" % i) -def http_get(server, url, query=None, headers=None): - import urllib.parse - import http.client - import json +def http_get(server, url, query=None, headers=None): + "http get" if headers is None: headers = {} - if 'User-Agent' not in headers: - headers['User-Agent'] = "curl" - if 'Accept' not in headers: - headers['Accept'] = 'application/json' + if "User-Agent" not in headers: + headers["User-Agent"] = "curl" + if "Accept" not in headers: + headers["Accept"] = "application/json" if query is None: query = {} http_client = http.client.HTTPSConnection(server) - full_url = url + '?' + urllib.parse.urlencode(query) + full_url = url + "?" + urllib.parse.urlencode(query) log.debug("GET " + full_url) - http_client.request('GET', full_url, headers=headers) + http_client.request("GET", full_url, headers=headers) req = http_client.getresponse() log.debug("HTTP Response: %d %s" % (req.status, req.reason)) @@ -398,7 +432,7 @@ def http_get(server, url, query=None, headers=None): return {} r = req.read() if not isinstance(r, str): - r = r.decode("utf-8") + r = r.decode("utf-8") return json.loads(r) if req.status > 299: @@ -406,61 +440,73 @@ def http_get(server, url, query=None, headers=None): return req.read() -def find(fields=None, filter=None): + +def find(fields=None, filters=None): + "find" server = "registry.dn42.us" - url = "/v1/reg/reg.objects" + url = "/v1/reg/reg.objects" if fields is None: fields = [] - if filter is None: - filter = {} - query = {"fields": ",".join(fields), "filter": ",".join([k + "=" + v for k, v in filter.items()])} + if filters is None: + filters = {} + query = { + "fields": ",".join(fields), + "filter": ",".join([k + "=" + v for k, v in filters.items()]), + } return http_get(server, url, query) + def to_num(ip): - ip = [int(i) for i in ip.split('.')] + "ip to number" + ip = [int(i) for i in ip.split(".")] return ip[3] + ip[2] * 256 + ip[1] * 256 ** 2 + ip[0] * 256 ** 3 + def to_ip(num): - return '.'.join([str(i) for i in [num >> 24, (num >> 16) & 0xFF, (num >> 8) & 0xFF, num & 0xFF]]) + "number to ip" + return ".".join( + [str(i) for i in [num >> 24, (num >> 16) & 0xFF, (num >> 8) & 0xFF, num & 0xFF]] + ) + def pretty_ip(addr): + "pretty ip" if addr.startswith("00000000000000000000ffff"): addr = addr[-8:] addr = int(addr, 16) return to_ip(addr) - return ":".join([addr[i:i+4] for i in range(0, len(addr), 4)]) + return ":".join([addr[i:i + 4] for i in range(0, len(addr), 4)]) -# addr = ["%x" % (int(addr[i:i+4],16)) for i in range(0, len(addr), 4)] -# -# last_seg = 8 -# for i, seg in enumerate(addr[::-1]): -# if seg == "0": last_seg = 7 - i -# else: break -# -# return ":".join(addr[:last_seg]) + ("::" if last_seg < 8 else "") def expand_ipv6(addr): + "expand ip6" addr = addr.lower() if "::" in addr: - if addr.count('::') > 1: + if addr.count("::") > 1: return False - addr = addr.replace('::', ':' * (9 - addr.count(':'))) - if addr.count(':') != 7: + addr = addr.replace("::", ":" * (9 - addr.count(":"))) + if addr.count(":") != 7: return False - return ''.join((i.zfill(4) for i in addr.split(":"))) + return "".join((i.zfill(4) for i in addr.split(":"))) + def ip4_to_ip6(ip): - return "::ffff:%04x:%04x" % (ip >> 16, ip & 0xffff) + "ip4 to ip6" + return "::ffff:%04x:%04x" % (ip >> 16, ip & 0xFFFF) + def inetrange(inet): - ip, mask = inet.split('/') + "inet range" + ip, mask = inet.split("/") mask = int(mask) ip = to_num(ip) & (0xFFFFFFFF << 32 - mask) ip6 = ip4_to_ip6(ip) return inet6range("%s/%d" % (ip6, mask + 96)) + def inet6range(inet): - ip, mask = inet.split('/') + "inet6 range" + ip, mask = inet.split("/") mask = int(mask) log.debug(ip) @@ -470,81 +516,95 @@ def inet6range(inet): return ip, ip, mask offset = int(ip[mask // 4], 16) - return "%s%x%s" % ( - ip[:mask // 4], - offset & (0xf0 >> mask % 4), - "0" * (31 - mask // 4) - ), "%s%x%s" % ( - ip[:mask // 4], - offset | (0xf >> mask % 4), - "f" * (31 - mask // 4) - ), mask + return ( + "%s%x%s" + % (ip[: mask // 4], offset & (0xF0 >> mask % 4), "0" * (31 - mask // 4)), + "%s%x%s" + % (ip[: mask // 4], offset | (0xF >> mask % 4), "f" * (31 - mask // 4)), + mask, + ) + def test_policy(obj_type, name, mntner): + "test policy" log.debug([obj_type, name, mntner]) - if obj_type in ["organisation", "mntner", "person", "role", "as-set", "schema", "dns"]: + if obj_type in ["organisation", + "mntner", + "person", + "role", + "as-set", + "schema", + "dns", + ]: if obj_type == "organisation" and not name.startswith("ORG-"): - log.error("%s does not start with 'ORG-'" %(name)) + log.error("%s does not start with 'ORG-'" % (name)) return "FAIL" elif obj_type == "mntner" and not name.endswith("-MNT"): - log.error("%s does not end with '-MNT'" %(name)) + log.error("%s does not end with '-MNT'" % (name)) return "FAIL" elif obj_type == "dns" and not name.endswith(".dn42"): - log.error("%s does not end with '.dn42'" %(name)) + log.error("%s does not end with '.dn42'" % (name)) return "FAIL" elif obj_type == "dns" and len(name.strip(".").split(".")) != 2: - log.error("%s is not a second level domain" %(name)) + log.error("%s is not a second level domain" % (name)) return "FAIL" elif obj_type in ["person", "role"] and not name.endswith("-DN42"): - log.error("%s does not end with '-DN42'" %(name)) + log.error("%s does not end with '-DN42'" % (name)) return "FAIL" lis = find(["mnt-by"], {"@type": obj_type, "@name": name}) log.debug(lis) if len(lis) == 0: - log.notice("%s does not currently exist" %(name)) + log.notice("%s does not currently exist" % (name)) return "PASS" - status = 'FAIL' + status = "FAIL" for o in lis: for n in o: log.debug(n) log.debug(mntner) if n[0] == "mnt-by" and n[1] == mntner: - status = 'PASS' + status = "PASS" return status - log.error("%s does not have mnt for object" %(mntner)) + log.error("%s does not have mnt for object" % (mntner)) return status - elif args["type"] in ["inetnum","inet6num"]: + elif obj_type in ["inetnum", "inet6num"]: log.info("Checking inetnum type") lis = find(["mnt-by"], {"@type": "net", "cidr": name}) log.debug(lis) if len(lis) > 0: - status = 'FAIL' + status = "FAIL" for o in lis: for n in o: if n[0] == "mnt-by" and n[1] == mntner: - status = 'PASS' - log.notice("%s has mnt for current object" %(mntner)) + status = "PASS" + log.notice("%s has mnt for current object" % (mntner)) return status - log.error("%s does not have mnt for current object" %(mntner)) + log.error("%s does not have mnt for current object" % (mntner)) return status - if args["type"] == "inetnum": + if obj_type == "inetnum": Lnet, Hnet, mask = inetrange(name) else: Lnet, Hnet, mask = inet6range(name) - mask = "%03d" %(mask) + mask = "%03d" % (mask) log.info([Lnet, Hnet, mask]) - lis = find(["inetnum","inet6num","policy","@netlevel","mnt-by","mnt-lower"], - {"@type": "net", "@netmin": "le=" + Lnet, "@netmax": "ge=" + Hnet, "@netmask": "lt=" + mask}) + lis = find( + ["inetnum", "inet6num", "policy", "@netlevel", "mnt-by", "mnt-lower"], + { + "@type": "net", + "@netmin": "le=" + Lnet, + "@netmax": "ge=" + Hnet, + "@netmask": "lt=" + mask, + }, + ) log.debug(lis) policy = {} @@ -563,46 +623,53 @@ def test_policy(obj_type, name, mntner): if select is None: select = k - elif select<=k: + elif select <= k: select = k - if select == None: + if select is None: pass - elif policy.get(select,{}).get("policy","closed") == "open": + elif policy.get(select, {}).get("policy", "closed") == "open": log.notice("Policy is open for parent object") return "PASS" # 3. Check if mntner or mnt-lower for any as-block in the tree. elif mntner in mntners: - log.notice("%s has mnt in parent object" %(mntner)) + log.notice("%s has mnt in parent object" % (mntner)) return "PASS" - elif args["type"] in ["route","route6"]: + elif obj_type in ["route", "route6"]: log.info("Checking route type") - lis = find(["mnt-by"], {"@type": "route", args["type"]: name}) + lis = find(["mnt-by"], {"@type": "route", obj_type: name}) log.debug(lis) if len(lis) > 0: - status = 'FAIL' + status = "FAIL" for o in lis: for n in o: if n[0] == "mnt-by" and n[1] == mntner: - status = 'PASS' - log.notice("%s has mnt for current object" %(mntner)) + status = "PASS" + log.notice("%s has mnt for current object" % (mntner)) return status - log.error("%s does not have mnt for current object" %(mntner)) + log.error("%s does not have mnt for current object" % (mntner)) return status - if args["type"] == "route": + if obj_type == "route": Lnet, Hnet, mask = inetrange(name) else: Lnet, Hnet, mask = inet6range(name) - mask = "%03d" %(mask) + mask = "%03d" % (mask) log.info([Lnet, Hnet, mask]) - lis = find(["inetnum","inet6num","policy","@netlevel","mnt-by","mnt-lower"], - {"@type": "net", "@netmin": "le=" + Lnet, "@netmax": "ge=" + Hnet, "@netmask": "le=" + mask}) + lis = find( + ["inetnum", "inet6num", "policy", "@netlevel", "mnt-by", "mnt-lower"], + { + "@type": "net", + "@netmin": "le=" + Lnet, + "@netmax": "ge=" + Hnet, + "@netmask": "le=" + mask, + }, + ) log.debug(lis) policy = {} @@ -621,24 +688,24 @@ def test_policy(obj_type, name, mntner): if select is None: select = k - elif select<=k: + elif select <= k: select = k - if select == None: + if select is None: pass - elif policy.get(select,{}).get("policy","closed") == "open": + elif policy.get(select, {}).get("policy", "closed") == "open": log.notice("Policy is open for parent object") return "PASS" # 3. Check if mntner or mnt-lower for any as-block in the tree. elif mntner in mntners: - log.notice("%s has mnt in parent object" %(mntner)) + log.notice("%s has mnt in parent object" % (mntner)) return "PASS" - elif args["type"] == "aut-num": + elif obj_type == "aut-num": if not name.startswith("AS"): - log.error("%s does not start with AS" %(name)) + log.error("%s does not start with AS" % (name)) return "FAIL" # 1. Check if they already have an object @@ -646,20 +713,22 @@ def test_policy(obj_type, name, mntner): log.debug(lis) if len(lis) > 0: - status = 'FAIL' + status = "FAIL" for o in lis: for n in o: if n[0] == "mnt-by" and n[1] == mntner: - status = 'PASS' - log.notice("%s has mnt for current object" %(mntner)) + status = "PASS" + log.notice("%s has mnt for current object" % (mntner)) return status - log.error("%s does not have mnt for current object" %(mntner)) + log.error("%s does not have mnt for current object" % (mntner)) return status # 2. Check if the as-block has an open policy asn = "AS{:0>9}".format(name[2:]) - lis = find(["as-block","policy","@as-min","@as-max","mnt-by","mnt-lower"], - {"@type": "as-block","@as-min":"le=" + asn,"@as-max": "ge=" + asn}) + lis = find( + ["as-block", "policy", "@as-min", "@as-max", "mnt-by", "mnt-lower"], + {"@type": "as-block", "@as-min": "le=" + asn, "@as-max": "ge=" + asn}, + ) log.info(lis) policy = {} @@ -673,29 +742,29 @@ def test_policy(obj_type, name, mntner): if o[0].startswith("mnt-"): mntners.append(o[1]) - k = (obj["@as-min"],obj["@as-max"]) + k = (obj["@as-min"], obj["@as-max"]) policy[k] = obj if select is None: select = k - elif select[0]<=k[0] or select[1]>=k[1]: + elif select[0] <= k[0] or select[1] >= k[1]: select = k - if policy.get(select,{}).get("policy","closed") == "open": + if policy.get(select, {}).get("policy", "closed") == "open": log.notice("Policy is open for parent object") return "PASS" # 3. Check if mntner or mnt-lower for any as-block in the tree. elif mntner in mntners: - log.notice("%s has mnt in parent object" %(mntner)) + log.notice("%s has mnt in parent object" % (mntner)) return "PASS" - elif args["type"] == "as-block": + elif obj_type == "as-block": Lname, Hname = name.split("-") Lname, Hname = Lname.strip(), Hname.strip() if not Lname.startswith("AS") or not Hname.startswith("AS"): - log.error("%s does not start with AS for min and max" %(name)) + log.error("%s does not start with AS for min and max" % (name)) return "FAIL" # 1. Check if they already have an object @@ -703,14 +772,14 @@ def test_policy(obj_type, name, mntner): log.debug(lis) if len(lis) > 0: - status = 'FAIL' + status = "FAIL" for o in lis: for n in o: if n[0] == "mnt-by" and n[1] == mntner: - status = 'PASS' - log.notice("%s has mnt for current object" %(mntner)) + status = "PASS" + log.notice("%s has mnt for current object" % (mntner)) return status - log.notice("%s does not have mnt for current object" %(mntner)) + log.notice("%s does not have mnt for current object" % (mntner)) return status # 2. Check if the parent as-blocks have an open policy @@ -718,9 +787,12 @@ def test_policy(obj_type, name, mntner): Hasn = "AS{:0>9}".format(Hname[2:]) if Lasn > Hasn: - log.error("%s should come before %s" %(Lname, Hname)) + log.error("%s should come before %s" % (Lname, Hname)) - lis = find(["as-block","policy","@as-min","@as-max","mnt-by","mnt-lower"], {"@type": "as-block","@as-min":"le=" + Lasn,"@as-max": "ge=" + Hasn}) + lis = find( + ["as-block", "policy", "@as-min", "@as-max", "mnt-by", "mnt-lower"], + {"@type": "as-block", "@as-min": "le=" + Lasn, "@as-max": "ge=" + Hasn}, + ) log.debug(lis) policy = {} @@ -734,12 +806,12 @@ def test_policy(obj_type, name, mntner): if o[0].startswith("mnt-"): mntners.append(o[1]) - k = (obj["@as-min"],obj["@as-max"]) + k = (obj["@as-min"], obj["@as-max"]) policy[k] = obj if select is None: select = k - elif select[0]<=k[0] or select[1]>=k[1]: + elif select[0] <= k[0] or select[1] >= k[1]: select = k # Policy Open only applies to aut-nums. as-blocks must be defined by parent mntners only. @@ -750,110 +822,149 @@ def test_policy(obj_type, name, mntner): # 3. Check if mntner or mnt-lower for any as-block in the tree. if mntner in mntners: - log.notice("%s has mnt in parent object" %(mntner)) + log.notice("%s has mnt in parent object" % (mntner)) return "PASS" - pass - log.error("%s does not pass checks for %s %s" %(mntner, obj_type, name)) + log.error("%s does not pass checks for %s %s" % (mntner, obj_type, name)) return "FAIL" + def sanity_check(dom): -# log.info(dom.keys) -# log.info(dom.dom) + "sanity check" ck = "PASS" if dom.schema == "dn42.inetnum": cidr = dom.get("cidr") - Lnet, Hnet, mask = inetrange(cidr) + Lnet, Hnet, _ = inetrange(cidr) cidr_range = pretty_ip(Lnet) + "-" + pretty_ip(Hnet) file_range = dom.get("inetnum") file_range = re.sub(r"\s+", "", file_range, flags=re.UNICODE) if cidr_range != file_range: - log.error("inetnum range [%s] does not match: [%s]" %(file_range, cidr_range)) + log.error( + "inetnum range [%s] does not match: [%s]" % (file_range, cidr_range) + ) ck = "FAIL" if dom.schema == "dn42.inet6num": cidr = dom.get("cidr") log.info(cidr) - Lnet, Hnet, mask = inet6range(cidr) + Lnet, Hnet, _ = inet6range(cidr) cidr_range = pretty_ip(Lnet) + "-" + pretty_ip(Hnet) file_range = dom.get("inet6num") file_range = re.sub(r"\s+", "", file_range, flags=re.UNICODE) if cidr_range != file_range: - log.error("inetnum range [%s] does not match: [%s]" %(file_range, cidr_range)) + log.error( + "inetnum range [%s] does not match: [%s]" % (file_range, cidr_range) + ) ck = "FAIL" return ck + def get_args(): """Get and parse command line arguments""" parser = argparse.ArgumentParser( - description='Check Schema. Checks Schema of file for validity') - parser.add_argument('--merge-output', - help="Merge stderr into stdout (helps when reading output with pagers) [Default OFF]", action="store_true") - parser.add_argument('-v', '--verbose', - help="Enable verbose output [Default OFF]", action="store_true") - parser.add_argument('-vv', '--doubleVerbose', - help="Enable full verbose output [Default OFF]", action="store_true") + description="Check Schema. Checks Schema of file for validity" + ) + parser.add_argument( + "--merge-output", + help="Merge stderr into stdout (helps when reading output with pagers) [Default OFF]", + action="store_true", + ) + parser.add_argument( + "-v", + "--verbose", + help="Enable verbose output [Default OFF]", + action="store_true", + ) + parser.add_argument( + "-vv", + "--doubleVerbose", + help="Enable full verbose output [Default OFF]", + action="store_true", + ) - subparsers = parser.add_subparsers(help='sub-command help', dest="command") + subparsers = parser.add_subparsers(help="sub-command help", dest="command") - parser_file = subparsers.add_parser( - 'check-file', help='Process a specific file') - parser_file.add_argument('-s', '--use-schema', nargs='?', - help="Override schema to validate [Default None]", action="store") + parser_file = subparsers.add_parser("check-file", help="Process a specific file") parser_file.add_argument( - 'infile', nargs="?", help="File to check", type=str) + "-s", + "--use-schema", + nargs="?", + help="Override schema to validate [Default None]", + action="store", + ) + parser_file.add_argument("infile", nargs="?", help="File to check", type=str) - parser_schema = subparsers.add_parser( - 'check-schemas', help='Validate all schemas') - parser_schema.add_argument( - 'path', nargs="?", help="Path for schemas", type=str) + parser_schema = subparsers.add_parser("check-schemas", help="Validate all schemas") + parser_schema.add_argument("path", nargs="?", help="Path for schemas", type=str) - parser_index = subparsers.add_parser('index', help='Generate index') - parser_index.add_argument( - 'path', nargs="?", help="Path for dn42 data", type=str) + parser_index = subparsers.add_parser("index", help="Generate index") + parser_index.add_argument("path", nargs="?", help="Path for dn42 data", type=str) parser_scanindex = subparsers.add_parser( - 'scan-index', help='Validate files in index') + "scan-index", help="Validate files in index" + ) parser_scanindex.add_argument( - 'infile', nargs="?", help="Index file to scan", type=str) - parser_scanindex.add_argument('-m', '--use-mntner', nargs='?', - help="Only scan files that has MNT [Default None]", action="store") + "infile", nargs="?", help="Index file to scan", type=str + ) + parser_scanindex.add_argument( + "-m", + "--use-mntner", + nargs="?", + help="Only scan files that has MNT [Default None]", + action="store", + ) - parser_scan = subparsers.add_parser('scan', help='Validate files in index') + parser_scan = subparsers.add_parser("scan", help="Validate files in index") + parser_scan.add_argument("path", nargs="?", help="Path for dn42 data", type=str) parser_scan.add_argument( - 'path', nargs="?", help="Path for dn42 data", type=str) - parser_scan.add_argument('-m', '--use-mntner', nargs='?', - help="Only scan files that has a matching MNT [Default None]", action="store") - parser_scan.add_argument('-f', '--use-file', nargs='?', - help="Only scan file given [Default None]", action="store") + "-m", + "--use-mntner", + nargs="?", + help="Only scan files that has a matching MNT [Default None]", + action="store", + ) + parser_scan.add_argument( + "-f", + "--use-file", + nargs="?", + help="Only scan file given [Default None]", + action="store", + ) - parser_fmt = subparsers.add_parser('fmt', help='Format file') + parser_fmt = subparsers.add_parser("fmt", help="Format file") parser_fmt.add_argument( - 'infile', nargs="?", help="Path for dn42 data file", type=str) - parser_fmt.add_argument('-i', '--in-place', - help="Format file in place", action="store_true") + "infile", nargs="?", help="Path for dn42 data file", type=str + ) + parser_fmt.add_argument( + "-i", "--in-place", help="Format file in place", action="store_true" + ) - parser_sane = subparsers.add_parser('sanity-check', help='Check the file for sane-ness') + parser_sane = subparsers.add_parser( + "sanity-check", help="Check the file for sane-ness" + ) parser_sane.add_argument( - 'infile', nargs="?", help="Path for dn42 data file", type=str) + "infile", nargs="?", help="Path for dn42 data file", type=str + ) - parser_pol = subparsers.add_parser('policy', help='Format file') - parser_pol.add_argument('type', nargs="?", type=str, help="dn42 object type") - parser_pol.add_argument('name', nargs="?", type=str, help="dn42 object name") - parser_pol.add_argument('mntner', nargs="?", type=str, help="dn42 object mntner") + parser_pol = subparsers.add_parser("policy", help="Format file") + parser_pol.add_argument("type", nargs="?", type=str, help="dn42 object type") + parser_pol.add_argument("name", nargs="?", type=str, help="dn42 object name") + parser_pol.add_argument("mntner", nargs="?", type=str, help="dn42 object mntner") - parser_mroute = subparsers.add_parser('match-routes', help='Match routes to inetnums') + parser_mroute = subparsers.add_parser( + "match-routes", help="Match routes to inetnums" + ) + _ = parser_mroute return vars(parser.parse_args()) -if __name__ == '__main__': - args = get_args() - +def run(args): + "run" if args["merge_output"]: log.OUTPUT = sys.stdout @@ -884,10 +995,15 @@ if __name__ == '__main__': scan_index(args["infile"], args["use_mntner"]) elif args["command"] == "scan": - import time - log.notice("## Scan Started at %s" %(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))) + log.notice( + "## Scan Started at %s" + % (time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())) + ) ck = scan_files(args["path"], args["use_mntner"], args["use_file"]) - log.notice("## Scan Completed at %s" %(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))) + log.notice( + "## Scan Completed at %s" + % (time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())) + ) if ck == "INFO": sys.exit(2) @@ -897,7 +1013,7 @@ if __name__ == '__main__': elif args["command"] == "fmt": dom = FileDOM(args["infile"]) if args["in_place"]: - with open(args["infile"], 'w+') as f: + with open(args["infile"], "w+") as f: f.write(str(dom)) else: print(str(dom)) @@ -913,24 +1029,30 @@ if __name__ == '__main__': if args["mntner"] is None: log.fatal("Mntner should be provided") - if args["type"] in ["inetnum","inet6num","route","route6"]: - args["name"] = args["name"].replace("_","/") + if args["type"] in ["inetnum", "inet6num", "route", "route6"]: + args["name"] = args["name"].replace("_", "/") status = test_policy(args["type"], args["name"], args["mntner"]) - print("POLICY %-12s\t%-8s\t%20s\t%s" %(args["mntner"], args["type"], args["name"], status)) + print( + "POLICY %-12s\t%-8s\t%20s\t%s" + % (args["mntner"], args["type"], args["name"], status) + ) if status != "PASS": sys.exit(1) elif args["command"] == "sanity-check": dom = FileDOM(args["infile"]) ck = sanity_check(dom) - print("SANITY %-8s\t%20s\t%s" %(dom.schema.split(".")[1], args["infile"], ck)) + print("SANITY %-8s\t%20s\t%s" % (dom.schema.split(".")[1], args["infile"], ck)) if ck != "PASS": sys.exit(1) elif args["command"] == "match-routes": - lis = find(["mnt-by","cidr","route","@netlevel", "@netmin", "@netmax", "@uri"], {"@family":"ipv4"}) + lis = find( + ["mnt-by", "cidr", "route", "@netlevel", "@netmin", "@netmax", "@uri"], + {"@family": "ipv4"}, + ) def field(x, field): for i in x: @@ -951,12 +1073,12 @@ if __name__ == '__main__': def is_net(x): i = field(x, "cidr") if i is not None: - return True + return True return False def obj(x): d = {} - for k,v in x: + for k, v in x: if k in d: d[k].append(v) else: @@ -979,23 +1101,43 @@ if __name__ == '__main__': rlvl = int(o["@netlevel"][0]) if ilvl + 1 != rlvl: - print("\nNo Parent > ", o["route"][0], " ", rlvl, " ", ",".join(o["mnt-by"]), \ - "Nearest INET ", inet["cidr"][0], " ", ilvl, " ", ",".join(inet["mnt-by"])) + print( + "\nNo Parent > ", + o["route"][0], + " ", + rlvl, + " ", + ",".join(o["mnt-by"]), + "Nearest INET ", + inet["cidr"][0], + " ", + ilvl, + " ", + ",".join(inet["mnt-by"]), + ) first = True continue if inet["@netmin"][0] > o["@netmin"][0] or inet["@netmax"][0] < o["@netmax"][0]: - print("\nNo Parent > ", o["route"][0], " ", rlvl, " ", ",".join(o["mnt-by"]), \ - "Nearest INET ", inet["cidr"][0], " ", ilvl, " ", ",".join(inet["mnt-by"])) + print( + "\nNo Parent > ", + o["route"][0], + " ", + rlvl, + " ", + ",".join(o["mnt-by"]), + "Nearest INET ", + inet["cidr"][0], + " ", + ilvl, + " ", + ",".join(inet["mnt-by"]), + ) first = True continue - continue - if first: - first = False - print(inet["cidr"]," ", ilvl, ",".join(inet["mnt-by"])) - print(" > ", o["route"][0], " ", rlvl, " ", ",".join(o["mnt-by"])) - else: - print(" > ", o["route"][0], " ", rlvl, " ", ",".join(o["mnt-by"])) + +if __name__ == "__main__": + run(get_args())