This diff adds the print functions from the regress test to rpki-client. Currently not hooked up in rpki-client itself but that will follow soon.
-- :wq Claudio Index: usr.sbin/rpki-client/extern.h =================================================================== RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v retrieving revision 1.76 diff -u -p -r1.76 extern.h --- usr.sbin/rpki-client/extern.h 24 Oct 2021 12:06:16 -0000 1.76 +++ usr.sbin/rpki-client/extern.h 24 Oct 2021 17:37:20 -0000 @@ -558,6 +558,13 @@ char *x509_crl_get_aki(X509_CRL *, cons char *x509_get_pubkey(X509 *, const char *); enum cert_purpose x509_get_purpose(X509 *, const char *); +/* printers */ +void tal_print(const struct tal *); +void cert_print(const struct cert *); +void mft_print(const struct mft *); +void roa_print(const struct roa *); +void gbr_print(const struct gbr *); + /* Output! */ extern int outformats; Index: usr.sbin/rpki-client/print.c =================================================================== RCS file: usr.sbin/rpki-client/print.c diff -N usr.sbin/rpki-client/print.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ usr.sbin/rpki-client/print.c 24 Oct 2021 17:30:47 -0000 @@ -0,0 +1,169 @@ +/* $OpenBSD$ */ +/* + * Copyright (c) 2021 Claudio Jeker <clau...@openbsd.org> + * Copyright (c) 2019 Kristaps Dzonsons <krist...@bsd.lv> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include <err.h> +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include "extern.h" + +static const char * +pretty_key_id(char *hex) +{ + static char buf[128]; /* bigger than SHA_DIGEST_LENGTH * 3 */ + size_t i; + + for (i = 0; i < sizeof(buf) && *hex != '\0'; i++) { + if (i % 3 == 2 && *hex != '\0') + buf[i] = ':'; + else + buf[i] = *hex++; + } + if (i == sizeof(buf)) + memcpy(buf + sizeof(buf) - 4, "...", 4); + return buf; +} + +void +tal_print(const struct tal *p) +{ + size_t i; + + for (i = 0; i < p->urisz; i++) + printf("%5zu: URI: %s\n", i + 1, p->uri[i]); +} + +void +cert_print(const struct cert *p) +{ + size_t i; + char buf1[64], buf2[64]; + int sockt; + char tbuf[21]; + + printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); + if (p->aki != NULL) + printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); + if (p->aia != NULL) + printf("Authority info access: %s\n", p->aia); + if (p->mft != NULL) + printf("Manifest: %s\n", p->mft); + if (p->repo != NULL) + printf("caRepository: %s\n", p->repo); + if (p->notify != NULL) + printf("Notify URL: %s\n", p->notify); + if (p->pubkey != NULL) + printf("BGPsec P-256 ECDSA public key: %s\n", p->pubkey); + strftime(tbuf, sizeof(tbuf), "%FT%TZ", gmtime(&p->expires)); + printf("Valid until: %s\n", tbuf); + + printf("Subordinate Resources:\n"); + + for (i = 0; i < p->asz; i++) + switch (p->as[i].type) { + case CERT_AS_ID: + printf("%5zu: AS: %u\n", i + 1, p->as[i].id); + break; + case CERT_AS_INHERIT: + printf("%5zu: AS: inherit\n", i + 1); + break; + case CERT_AS_RANGE: + printf("%5zu: AS: %u -- %u\n", i + 1, + p->as[i].range.min, p->as[i].range.max); + break; + } + + for (i = 0; i < p->ipsz; i++) + switch (p->ips[i].type) { + case CERT_IP_INHERIT: + printf("%5zu: IP: inherit\n", i + 1); + break; + case CERT_IP_ADDR: + ip_addr_print(&p->ips[i].ip, + p->ips[i].afi, buf1, sizeof(buf1)); + printf("%5zu: IP: %s\n", i + 1, buf1); + break; + case CERT_IP_RANGE: + sockt = (p->ips[i].afi == AFI_IPV4) ? + AF_INET : AF_INET6; + inet_ntop(sockt, p->ips[i].min, buf1, sizeof(buf1)); + inet_ntop(sockt, p->ips[i].max, buf2, sizeof(buf2)); + printf("%5zu: IP: %s -- %s\n", i + 1, buf1, buf2); + break; + } + +} + +void +mft_print(const struct mft *p) +{ + size_t i; + char *hash; + + printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); + printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); + printf("Authority info access: %s\n", p->aia); + printf("Manifest Number: %s\n", p->seqnum); + for (i = 0; i < p->filesz; i++) { + if (base64_encode(p->files[i].hash, sizeof(p->files[i].hash), + &hash) == -1) + errx(1, "base64_encode failure"); + printf("%5zu: %s\n", i + 1, p->files[i].file); + printf("\thash %s\n", hash); + free(hash); + } +} + +void +roa_print(const struct roa *p) +{ + char buf[128]; + size_t i; + char tbuf[21]; + + printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); + printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); + printf("Authority info access: %s\n", p->aia); + strftime(tbuf, sizeof(tbuf), "%FT%TZ", gmtime(&p->expires)); + printf("ROA valid until: %s\n", tbuf); + + printf("asID: %u\n", p->asid); + for (i = 0; i < p->ipsz; i++) { + ip_addr_print(&p->ips[i].addr, + p->ips[i].afi, buf, sizeof(buf)); + printf("%5zu: %s maxlen: %zu\n", i + 1, + buf, p->ips[i].maxlength); + } +} + +void +gbr_print(const struct gbr *p) +{ + char buf[128]; + size_t i; + + printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); + printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); + printf("Authority info access: %s\n", p->aia); + printf("vcard:\n%s", p->vcard); +} Index: regress/usr.sbin/rpki-client/Makefile.inc =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/Makefile.inc,v retrieving revision 1.14 diff -u -p -r1.14 Makefile.inc --- regress/usr.sbin/rpki-client/Makefile.inc 11 Oct 2021 17:32:27 -0000 1.14 +++ regress/usr.sbin/rpki-client/Makefile.inc 24 Oct 2021 17:41:04 -0000 @@ -17,7 +17,7 @@ CFLAGS+= -I${.CURDIR}/.. -I${.CURDIR}/.. LDADD+= -lcrypto -lutil DPADD+= ${LIBCRYPTO} ${LIBUTIL} -SRCS_test-ip= test-ip.c ip.c io.c +SRCS_test-ip= test-ip.c ip.c io.c encoding.c print.c run-regress-test-ip: test-ip ./test-ip @@ -26,24 +26,27 @@ TALARGS += ta/apnic-rpki-root-iana-origi TALARGS += ta/ripe-ncc-ta.cer tal/ripe.tal SRCS_test-cert+= test-cert.c cert.c cms.c x509.c ip.c as.c io.c \ - log.c tal.c validate.c encoding.c + log.c tal.c validate.c encoding.c print.c run-regress-test-cert: test-cert ./test-cert -v ${.CURDIR}/../cer/*.cer ./test-cert -vt ${TALARGS:S,,${.CURDIR}/../&,} -SRCS_test-mft+= test-mft.c mft.c cms.c x509.c io.c log.c validate.c \ - encoding.c dummy.c +SRCS_test-mft+= test-mft.c mft.c cms.c x509.c ip.c io.c log.c validate.c \ + encoding.c print.c dummy.c run-regress-test-mft: test-mft ./test-mft -v ${.CURDIR}/../mft/*.mft -SRCS_test-roa+= test-roa.c roa.c cms.c x509.c ip.c as.c io.c log.c encoding.c +SRCS_test-roa+= test-roa.c roa.c cms.c x509.c ip.c as.c io.c log.c \ + encoding.c print.c run-regress-test-roa: test-roa ./test-roa -v ${.CURDIR}/../roa/*.roa -SRCS_test-gbr+= test-gbr.c gbr.c cms.c x509.c io.c log.c encoding.c +SRCS_test-gbr+= test-gbr.c gbr.c cms.c x509.c ip.c io.c log.c \ + encoding.c print.c run-regress-test-gbr: test-gbr ./test-gbr -v ${.CURDIR}/../gbr/*.gbr -SRCS_test-tal+= test-tal.c tal.c io.c log.c validate.c encoding.c dummy.c +SRCS_test-tal+= test-tal.c tal.c ip.c io.c log.c validate.c \ + encoding.c print.c dummy.c run-regress-test-tal: test-tal ./test-tal -v ${.CURDIR}/../tal/*.tal Index: regress/usr.sbin/rpki-client/dummy.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/dummy.c,v retrieving revision 1.1 diff -u -p -r1.1 dummy.c --- regress/usr.sbin/rpki-client/dummy.c 5 Mar 2021 17:28:09 -0000 1.1 +++ regress/usr.sbin/rpki-client/dummy.c 24 Oct 2021 17:35:22 -0000 @@ -17,18 +17,3 @@ as_check_covered(uint32_t min, uint32_t { return -1; } - -int -ip_addr_check_covered(enum afi afi, - const unsigned char *min, const unsigned char *max, - const struct cert_ip *ips, size_t ipsz) -{ - return -1; -} - -void -ip_addr_print(const struct ip_addr *addr, - enum afi afi, char *buf, size_t bufsz) -{ -} - Index: regress/usr.sbin/rpki-client/test-cert.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/test-cert.c,v retrieving revision 1.13 diff -u -p -r1.13 test-cert.c --- regress/usr.sbin/rpki-client/test-cert.c 13 Oct 2021 06:56:07 -0000 1.13 +++ regress/usr.sbin/rpki-client/test-cert.c 24 Oct 2021 17:26:01 -0000 @@ -32,74 +32,7 @@ #include "extern.h" -#include "test-common.c" - int verbose; - -static void -cert_print(const struct cert *p) -{ - size_t i; - char buf1[64], buf2[64]; - int sockt; - char tbuf[21]; - - assert(p != NULL); - - printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); - if (p->aki != NULL) - printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); - if (p->aia != NULL) - printf("Authority info access: %s\n", p->aia); - if (p->mft != NULL) - printf("Manifest: %s\n", p->mft); - if (p->repo != NULL) - printf("caRepository: %s\n", p->repo); - if (p->notify != NULL) - printf("Notify URL: %s\n", p->notify); - if (p->pubkey != NULL) - printf("BGPsec P-256 ECDSA public key: %s\n", p->pubkey); - strftime(tbuf, sizeof(tbuf), "%FT%TZ", gmtime(&p->expires)); - printf("Valid until: %s\n", tbuf); - - printf("Subordinate Resources:\n"); - - for (i = 0; i < p->asz; i++) - switch (p->as[i].type) { - case CERT_AS_ID: - printf("%5zu: AS: %" - PRIu32 "\n", i + 1, p->as[i].id); - break; - case CERT_AS_INHERIT: - printf("%5zu: AS: inherit\n", i + 1); - break; - case CERT_AS_RANGE: - printf("%5zu: AS: %" - PRIu32 "--%" PRIu32 "\n", i + 1, - p->as[i].range.min, p->as[i].range.max); - break; - } - - for (i = 0; i < p->ipsz; i++) - switch (p->ips[i].type) { - case CERT_IP_INHERIT: - printf("%5zu: IP: inherit\n", i + 1); - break; - case CERT_IP_ADDR: - ip_addr_print(&p->ips[i].ip, - p->ips[i].afi, buf1, sizeof(buf1)); - printf("%5zu: IP: %s\n", i + 1, buf1); - break; - case CERT_IP_RANGE: - sockt = (p->ips[i].afi == AFI_IPV4) ? - AF_INET : AF_INET6; - inet_ntop(sockt, p->ips[i].min, buf1, sizeof(buf1)); - inet_ntop(sockt, p->ips[i].max, buf2, sizeof(buf2)); - printf("%5zu: IP: %s--%s\n", i + 1, buf1, buf2); - break; - } - -} int main(int argc, char *argv[]) Index: regress/usr.sbin/rpki-client/test-common.c =================================================================== RCS file: regress/usr.sbin/rpki-client/test-common.c diff -N regress/usr.sbin/rpki-client/test-common.c --- regress/usr.sbin/rpki-client/test-common.c 29 Mar 2021 15:47:34 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,33 +0,0 @@ -/* $OpenBSD: test-common.c,v 1.1 2021/03/29 15:47:34 claudio Exp $ */ -/* - * Copyright (c) 2021 Claudio Jeker <clau...@openbsd.org> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -const char * -pretty_key_id(char *hex) -{ - static char buf[128]; /* bigger than SHA_DIGEST_LENGTH * 3 */ - size_t i; - - for (i = 0; i < sizeof(buf) && *hex != '\0'; i++) { - if (i % 3 == 2 && *hex != '\0') - buf[i] = ':'; - else - buf[i] = *hex++; - } - if (i == sizeof(buf)) - memcpy(buf + sizeof(buf) - 4, "...", 4); - return buf; -} Index: regress/usr.sbin/rpki-client/test-gbr.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/test-gbr.c,v retrieving revision 1.3 diff -u -p -r1.3 test-gbr.c --- regress/usr.sbin/rpki-client/test-gbr.c 29 Mar 2021 15:47:34 -0000 1.3 +++ regress/usr.sbin/rpki-client/test-gbr.c 24 Oct 2021 17:26:07 -0000 @@ -30,23 +30,7 @@ #include "extern.h" -#include "test-common.c" - int verbose; - -static void -gbr_print(const struct gbr *p) -{ - char buf[128]; - size_t i; - - assert(p != NULL); - - printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); - printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); - printf("Authority info access: %s\n", p->aia); - printf("vcard:\n%s", p->vcard); -} int main(int argc, char *argv[]) Index: regress/usr.sbin/rpki-client/test-mft.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/test-mft.c,v retrieving revision 1.15 diff -u -p -r1.15 test-mft.c --- regress/usr.sbin/rpki-client/test-mft.c 9 Oct 2021 18:43:49 -0000 1.15 +++ regress/usr.sbin/rpki-client/test-mft.c 24 Oct 2021 17:26:17 -0000 @@ -33,30 +33,7 @@ #include "extern.h" -#include "test-common.c" - int verbose; - -static void -mft_print(const struct mft *p) -{ - size_t i; - char hash[256]; - - assert(p != NULL); - - printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); - printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); - printf("Authority info access: %s\n", p->aia); - printf("Manifest Number: %s\n", p->seqnum); - for (i = 0; i < p->filesz; i++) { - b64_ntop(p->files[i].hash, sizeof(p->files[i].hash), - hash, sizeof(hash)); - printf("%5zu: %s\n", i + 1, p->files[i].file); - printf("\thash %s\n", hash); - } -} - int main(int argc, char *argv[]) Index: regress/usr.sbin/rpki-client/test-roa.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/test-roa.c,v retrieving revision 1.12 diff -u -p -r1.12 test-roa.c --- regress/usr.sbin/rpki-client/test-roa.c 7 Oct 2021 10:34:39 -0000 1.12 +++ regress/usr.sbin/rpki-client/test-roa.c 24 Oct 2021 17:26:21 -0000 @@ -30,33 +30,7 @@ #include "extern.h" -#include "test-common.c" - int verbose; - -static void -roa_print(const struct roa *p) -{ - char buf[128]; - size_t i; - char tbuf[21]; - - assert(p != NULL); - - printf("Subject key identifier: %s\n", pretty_key_id(p->ski)); - printf("Authority key identifier: %s\n", pretty_key_id(p->aki)); - printf("Authority info access: %s\n", p->aia); - strftime(tbuf, sizeof(tbuf), "%FT%TZ", gmtime(&p->expires)); - printf("ROA valid until: %s\n", tbuf); - - printf("asID: %" PRIu32 "\n", p->asid); - for (i = 0; i < p->ipsz; i++) { - ip_addr_print(&p->ips[i].addr, - p->ips[i].afi, buf, sizeof(buf)); - printf("%5zu: %s (max: %zu)\n", i + 1, - buf, p->ips[i].maxlength); - } -} int main(int argc, char *argv[]) Index: regress/usr.sbin/rpki-client/test-tal.c =================================================================== RCS file: /cvs/src/regress/usr.sbin/rpki-client/test-tal.c,v retrieving revision 1.6 diff -u -p -r1.6 test-tal.c --- regress/usr.sbin/rpki-client/test-tal.c 9 Nov 2020 16:13:02 -0000 1.6 +++ regress/usr.sbin/rpki-client/test-tal.c 24 Oct 2021 17:21:01 -0000 @@ -31,17 +31,6 @@ int verbose; -static void -tal_print(const struct tal *p) -{ - size_t i; - - assert(p != NULL); - - for (i = 0; i < p->urisz; i++) - printf("%5zu: URI: %s\n", i + 1, p->uri[i]); -} - int main(int argc, char *argv[]) {