commit e560b1c

Michael Forney  ·  2026-03-04 23:54:45 +0000 UTC
parent eb8f6bd
openbsd: Update to 7.8
10 files changed,  +121, -73
+13, -13
  1@@ -1,4 +1,4 @@
  2-From 05fd24cc7b3f1b73a58d41d70ef725925007165c Mon Sep 17 00:00:00 2001
  3+From 941679ac1af45e3359fa28172cd9339727c08a17 Mon Sep 17 00:00:00 2001
  4 From: Michael Forney <mforney@mforney.org>
  5 Date: Mon, 2 Dec 2019 21:11:04 -0800
  6 Subject: [PATCH] nc: Portability fixes from libressl-portable
  7@@ -8,7 +8,7 @@ Subject: [PATCH] nc: Portability fixes from libressl-portable
  8  1 file changed, 48 insertions(+), 7 deletions(-)
  9 
 10 diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c
 11-index 8c60fd18826..b5129c2204d 100644
 12+index e3c9c939e24..9d182198089 100644
 13 --- a/usr.bin/nc/netcat.c
 14 +++ b/usr.bin/nc/netcat.c
 15 @@ -93,9 +93,13 @@ int	zflag;					/* Port Scan Flag */
 16@@ -25,7 +25,7 @@ index 8c60fd18826..b5129c2204d 100644
 17  
 18  int	usetls;					/* use TLS */
 19  const char    *Cflag;				/* Public cert file */
 20-@@ -268,12 +272,14 @@ main(int argc, char *argv[])
 21+@@ -271,12 +275,14 @@ main(int argc, char *argv[])
 22  		case 'u':
 23  			uflag = 1;
 24  			break;
 25@@ -40,7 +40,7 @@ index 8c60fd18826..b5129c2204d 100644
 26  		case 'v':
 27  			vflag = 1;
 28  			break;
 29-@@ -320,9 +326,11 @@ main(int argc, char *argv[])
 30+@@ -323,9 +329,11 @@ main(int argc, char *argv[])
 31  		case 'o':
 32  			oflag = optarg;
 33  			break;
 34@@ -52,7 +52,7 @@ index 8c60fd18826..b5129c2204d 100644
 35  		case 'T':
 36  			errstr = NULL;
 37  			errno = 0;
 38-@@ -346,9 +354,11 @@ main(int argc, char *argv[])
 39+@@ -349,9 +357,11 @@ main(int argc, char *argv[])
 40  	argc -= optind;
 41  	argv += optind;
 42  
 43@@ -64,7 +64,7 @@ index 8c60fd18826..b5129c2204d 100644
 44  
 45  	/* Cruft to make sure options are clean, and used properly. */
 46  	if (argc == 1 && family == AF_UNIX) {
 47-@@ -923,7 +933,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
 48+@@ -928,7 +938,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
 49      char *ipaddr)
 50  {
 51  	struct addrinfo *res, *res0;
 52@@ -76,7 +76,7 @@ index 8c60fd18826..b5129c2204d 100644
 53  
 54  	if ((error = getaddrinfo(host, port, &hints, &res0)))
 55  		errx(1, "getaddrinfo for host \"%s\" port %s: %s", host,
 56-@@ -938,8 +951,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
 57+@@ -943,8 +956,10 @@ remote_connect(const char *host, const char *port, struct addrinfo hints,
 58  		if (sflag || pflag) {
 59  			struct addrinfo ahints, *ares;
 60  
 61@@ -87,7 +87,7 @@ index 8c60fd18826..b5129c2204d 100644
 62  			memset(&ahints, 0, sizeof(struct addrinfo));
 63  			ahints.ai_family = res->ai_family;
 64  			ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM;
 65-@@ -1031,8 +1046,11 @@ int
 66+@@ -1036,8 +1051,11 @@ int
 67  local_listen(const char *host, const char *port, struct addrinfo hints)
 68  {
 69  	struct addrinfo *res, *res0;
 70@@ -100,7 +100,7 @@ index 8c60fd18826..b5129c2204d 100644
 71  
 72  	/* Allow nodename to be null. */
 73  	hints.ai_flags |= AI_PASSIVE;
 74-@@ -1052,9 +1070,11 @@ local_listen(const char *host, const char *port, struct addrinfo hints)
 75+@@ -1057,9 +1075,11 @@ local_listen(const char *host, const char *port, struct addrinfo hints)
 76  		    res->ai_protocol)) == -1)
 77  			continue;
 78  
 79@@ -112,7 +112,7 @@ index 8c60fd18826..b5129c2204d 100644
 80  
 81  		set_common_sockopts(s, res->ai_family);
 82  
 83-@@ -1559,11 +1579,13 @@ set_common_sockopts(int s, int af)
 84+@@ -1564,11 +1584,13 @@ set_common_sockopts(int s, int af)
 85  {
 86  	int x = 1;
 87  
 88@@ -126,7 +126,7 @@ index 8c60fd18826..b5129c2204d 100644
 89  	if (Dflag) {
 90  		if (setsockopt(s, SOL_SOCKET, SO_DEBUG,
 91  		    &x, sizeof(x)) == -1)
 92-@@ -1574,9 +1596,16 @@ set_common_sockopts(int s, int af)
 93+@@ -1579,9 +1601,16 @@ set_common_sockopts(int s, int af)
 94  		    IP_TOS, &Tflag, sizeof(Tflag)) == -1)
 95  			err(1, "set IP ToS");
 96  
 97@@ -143,7 +143,7 @@ index 8c60fd18826..b5129c2204d 100644
 98  	}
 99  	if (Iflag) {
100  		if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
101-@@ -1600,13 +1629,17 @@ set_common_sockopts(int s, int af)
102+@@ -1605,13 +1634,17 @@ set_common_sockopts(int s, int af)
103  	}
104  
105  	if (minttl != -1) {
106@@ -162,7 +162,7 @@ index 8c60fd18826..b5129c2204d 100644
107  	}
108  }
109  
110-@@ -1831,14 +1864,22 @@ help(void)
111+@@ -1841,14 +1874,22 @@ help(void)
112  	\t-P proxyuser\tUsername for proxy authentication\n\
113  	\t-p port\t	Specify local port for remote connects\n\
114  	\t-R CAfile	CA bundle\n\
+1, -1
1@@ -1,4 +1,4 @@
2-From e62d415fb66744cac915dc1873e09774a705d536 Mon Sep 17 00:00:00 2001
3+From 7770f53d7d46a5dee46478caa4d0bda8d7cf9b9c Mon Sep 17 00:00:00 2001
4 From: Michael Forney <mforney@mforney.org>
5 Date: Thu, 4 Jun 2020 21:36:11 -0700
6 Subject: [PATCH] pax: Fix some incorrect format specifiers
+5, -5
 1@@ -1,4 +1,4 @@
 2-From dc49fca08adc0fd8cd9565f2aeca6dc2c8d1fbd2 Mon Sep 17 00:00:00 2001
 3+From fadd8482d8e37f8ff1a61a8d8060e83cec744222 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Thu, 4 Jun 2020 21:44:26 -0700
 6 Subject: [PATCH] pax: Use memcpy to set TMAGIC and TVERSION to avoid warning
 7@@ -8,10 +8,10 @@ Subject: [PATCH] pax: Use memcpy to set TMAGIC and TVERSION to avoid warning
 8  1 file changed, 4 insertions(+), 4 deletions(-)
 9 
10 diff --git a/bin/pax/tar.c b/bin/pax/tar.c
11-index a0cbb31b547..095eef85af0 100644
12+index 1c5065ce655..ac6f3c60d94 100644
13 --- a/bin/pax/tar.c
14 +++ b/bin/pax/tar.c
15-@@ -1055,8 +1055,8 @@ wr_xheader(ARCHD *arcn, struct xheader *xhdr)
16+@@ -1056,8 +1056,8 @@ wr_xheader(char *fname, HD_USTAR *fhd, struct xheader *xhdr)
17  	memset(hdblk, 0, sizeof(hdblk));
18  	hd = (HD_USTAR *)hdblk;
19  	hd->typeflag = XHDRTYPE;
20@@ -20,9 +20,9 @@ index a0cbb31b547..095eef85af0 100644
21 +	memcpy(hd->magic, TMAGIC, TMAGLEN);
22 +	memcpy(hd->version, TVERSION, TVERSLEN);
23  	if (ul_oct(size, hd->size, sizeof(hd->size), 3))
24- 		return -1;
25+ 		goto out;
26  
27-@@ -1263,8 +1263,8 @@ wr_ustar_or_pax(ARCHD *arcn, int ustar)
28+@@ -1276,8 +1276,8 @@ wr_ustar_or_pax(ARCHD *arcn, int ustar)
29  		break;
30  	}
31  
+5, -5
 1@@ -1,4 +1,4 @@
 2-From 67ffb8812ee7ac5fe23a5149ff643d1f392fb1f5 Mon Sep 17 00:00:00 2001
 3+From d287356e4da2f2bc232df9bc13821738ffbe5299 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Fri, 23 Apr 2021 20:10:05 -0700
 6 Subject: [PATCH] acme-client: Fix signed-ness of base64buf_url input
 7@@ -96,7 +96,7 @@ index 2b6377f0d81..0d84ad4b458 100644
 8  	size_t	 i, sz;
 9  	char	*buf;
10 diff --git a/usr.sbin/acme-client/extern.h b/usr.sbin/acme-client/extern.h
11-index 915f80e3992..5b0950b0693 100644
12+index 46a1387f5bc..37820e6cfb6 100644
13 --- a/usr.sbin/acme-client/extern.h
14 +++ b/usr.sbin/acme-client/extern.h
15 @@ -244,7 +244,7 @@ int		 checkexit_ext(int *, pid_t, enum comp);
16@@ -132,10 +132,10 @@ index a3b6666c279..f0df9f292d4 100644
17  		goto out;
18  	} else if ((der64 = base64buf_url(der, len)) == NULL) {
19 diff --git a/usr.sbin/acme-client/revokeproc.c b/usr.sbin/acme-client/revokeproc.c
20-index 0f1bf32678b..58e81233f1a 100644
21+index 65170078226..493a9ea9752 100644
22 --- a/usr.sbin/acme-client/revokeproc.c
23 +++ b/usr.sbin/acme-client/revokeproc.c
24-@@ -63,7 +63,9 @@ revokeproc(int fd, const char *certfile, int force,
25+@@ -77,7 +77,9 @@ revokeproc(int fd, const char *certfile, int force,
26      int revocate, const char *const *alts, size_t altsz)
27  {
28  	GENERAL_NAMES			*sans = NULL;
29@@ -146,7 +146,7 @@ index 0f1bf32678b..58e81233f1a 100644
30  	int				 rc = 0, cc, i, len;
31  	size_t				*found = NULL;
32  	FILE				*f = NULL;
33-@@ -240,7 +242,7 @@ revokeproc(int fd, const char *certfile, int force,
34+@@ -260,7 +262,7 @@ revokeproc(int fd, const char *certfile, int force,
35  		} else if ((der = dercp = malloc(len)) == NULL) {
36  			warn("malloc");
37  			goto out;
+59, -37
  1@@ -1,4 +1,4 @@
  2-From 1ab0f94943e02c49d88a358351914f9032a5bca3 Mon Sep 17 00:00:00 2001
  3+From 6abdd6eef47b5ff9a34536acbec947d2c9a3cebc Mon Sep 17 00:00:00 2001
  4 From: Michael Forney <mforney@mforney.org>
  5 Date: Fri, 23 Apr 2021 23:14:16 -0700
  6 Subject: [PATCH] acme-client: Port to BearSSL
  7@@ -9,8 +9,8 @@ Subject: [PATCH] acme-client: Port to BearSSL
  8  usr.sbin/acme-client/key.c        | 329 ++++++++++++++++++++++++------
  9  usr.sbin/acme-client/key.h        |  22 +-
 10  usr.sbin/acme-client/keyproc.c    | 198 ++++++------------
 11- usr.sbin/acme-client/revokeproc.c | 237 ++++++++++-----------
 12- 6 files changed, 564 insertions(+), 525 deletions(-)
 13+ usr.sbin/acme-client/revokeproc.c | 260 +++++++++++------------
 14+ 6 files changed, 566 insertions(+), 546 deletions(-)
 15 
 16 diff --git a/usr.sbin/acme-client/acctproc.c b/usr.sbin/acme-client/acctproc.c
 17 index 9e97a8bb760..8d66dac49d9 100644
 18@@ -1213,10 +1213,10 @@ index f0df9f292d4..fc7de74b616 100644
 19  	return rc;
 20  }
 21 diff --git a/usr.sbin/acme-client/revokeproc.c b/usr.sbin/acme-client/revokeproc.c
 22-index 58e81233f1a..378de35f662 100644
 23+index 493a9ea9752..82e31792f3b 100644
 24 --- a/usr.sbin/acme-client/revokeproc.c
 25 +++ b/usr.sbin/acme-client/revokeproc.c
 26-@@ -22,58 +22,54 @@
 27+@@ -22,73 +22,53 @@
 28  #include <stdio.h>
 29  #include <stdlib.h>
 30  #include <string.h>
 31@@ -1232,29 +1232,46 @@ index 58e81233f1a..378de35f662 100644
 32  
 33  #include "extern.h"
 34  
 35- #define	RENEW_ALLOW (30 * 24 * 60 * 60)
 36- 
 37 -/*
 38-- * Convert the X509's expiration time into a time_t value.
 39+- * Convert the X509's notAfter time into a time_t value.
 40+- */
 41+-static time_t
 42+-X509notafter(X509 *x)
 43+-{
 44+-	ASN1_TIME	*atim;
 45+-	struct tm	 t;
 46+-
 47+-	if ((atim = X509_getm_notAfter(x)) == NULL)
 48+-		return -1;
 49+-
 50+-	memset(&t, 0, sizeof(t));
 51+-
 52+-	if (!ASN1_TIME_to_tm(atim, &t))
 53+-		return -1;
 54+-
 55+-	return timegm(&t);
 56+-}
 57+-
 58+-/*
 59+- * Convert the X509's notBefore time into a time_t value.
 60 - */
 61 -static time_t
 62--X509expires(X509 *x)
 63+-X509notbefore(X509 *x)
 64 +static void
 65 +append_cert(void *ctx, const void *buf, size_t len)
 66  {
 67 -	ASN1_TIME	*atim;
 68 -	struct tm	 t;
 69 -
 70--	if ((atim = X509_getm_notAfter(x)) == NULL) {
 71--		warnx("missing notAfter");
 72+-	if ((atim = X509_getm_notBefore(x)) == NULL)
 73 -		return -1;
 74--	}
 75 -
 76 -	memset(&t, 0, sizeof(t));
 77 -
 78--	if (!ASN1_TIME_to_tm(atim, &t)) {
 79--		warnx("invalid ASN1_TIME");
 80+-	if (!ASN1_TIME_to_tm(atim, &t))
 81 -		return -1;
 82+-
 83+-	return timegm(&t);
 84 +	br_x509_certificate *cert = ctx;
 85 +	size_t newlen;
 86 +	unsigned char *newdata;
 87@@ -1269,9 +1286,7 @@ index 58e81233f1a..378de35f662 100644
 88 +	} else {
 89 +		warn("realloc");
 90 +		cert->data_len = -1;
 91- 	}
 92--
 93--	return timegm(&t);
 94++	}
 95  }
 96  
 97  int
 98@@ -1298,12 +1313,13 @@ index 58e81233f1a..378de35f662 100644
 99 +	uint32_t			 days, secs;
100  	long				 lval;
101  	enum revokeop			 op, rop;
102- 	time_t				 t;
103+ 	time_t				 notafter, notbefore, cert_validity;
104+ 	time_t				 remaining_validity, renew_allow;
105 -	size_t				 j;
106  
107  	/*
108  	 * First try to open the certificate before we drop privileges
109-@@ -88,8 +84,6 @@ revokeproc(int fd, const char *certfile, int force,
110+@@ -103,8 +83,6 @@ revokeproc(int fd, const char *certfile, int force,
111  
112  	/* File-system and sandbox jailing. */
113  
114@@ -1312,7 +1328,7 @@ index 58e81233f1a..378de35f662 100644
115  	if (pledge("stdio", NULL) == -1) {
116  		warn("pledge");
117  		goto out;
118-@@ -113,39 +107,86 @@ revokeproc(int fd, const char *certfile, int force,
119+@@ -128,44 +106,88 @@ revokeproc(int fd, const char *certfile, int force,
120  		goto out;
121  	}
122  
123@@ -1365,25 +1381,22 @@ index 58e81233f1a..378de35f662 100644
124  
125  	/* Read out the expiration date. */
126  
127--	if ((t = X509expires(x)) == -1) {
128--		warnx("X509expires");
129+-	if ((notafter = X509notafter(x)) == -1) {
130+-		warnx("X509notafter");
131 +	br_x509_decoder_init(&xd, NULL, NULL);
132 +	br_x509_decoder_push(&xd, cert.data, cert.data_len);
133 +	if ((err = br_x509_decoder_last_error(&xd)) != 0) {
134 +		warnx("%s: X.509 decoding error %d", certfile, err);
135  		goto out;
136  	}
137-+	br_x509_decoder_get_notafter(&xd, &days, &secs);
138-+	t = 86400ll * (days - 719528) + 86400;
139- 
140--	/* Extract list of SAN entries from the certificate. */
141 -
142--	sans = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
143--	if (sans == NULL) {
144--		warnx("%s: does not have a SAN entry", certfile);
145--		if (revocate)
146--			goto out;
147--		force = 2;
148+-	if ((notbefore = X509notbefore(x)) == -1) {
149+-		warnx("X509notbefore");
150++	br_x509_decoder_get_notafter(&xd, &days, &secs);
151++	notafter = 86400ll * (days - 719528) + 86400;
152++	br_x509_decoder_get_notbefore(&xd, &days, &secs);
153++	notbefore = 86400ll * (days - 719528) + 86400;
154++
155 +	for (i = 0, altmax = 0; i < altsz; ++i) {
156 +		altlen = strlen(alts[i]) + 1;
157 +		if (altlen > altmax)
158@@ -1393,8 +1406,17 @@ index 58e81233f1a..378de35f662 100644
159 +	if ((elts = calloc(eltsz, sizeof(elts[0]))) == NULL ||
160 +	    (sans = calloc(eltsz, altmax)) == NULL) {
161 +		warn("calloc");
162-+		goto out;
163-+	}
164+ 		goto out;
165+ 	}
166+-
167+-	/* Extract list of SAN entries from the certificate. */
168+-
169+-	sans = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
170+-	if (sans == NULL) {
171+-		warnx("%s: does not have a SAN entry", certfile);
172+-		if (revocate)
173+-			goto out;
174+-		force = 2;
175 +	for (i = 0; i < eltsz; ++i) {
176 +		elts[i].oid = dnsname;
177 +		elts[i].buf = sans + i * altmax;
178@@ -1421,7 +1443,7 @@ index 58e81233f1a..378de35f662 100644
179  		goto out;
180  	}
181  
182-@@ -154,63 +195,37 @@ revokeproc(int fd, const char *certfile, int force,
183+@@ -174,63 +196,37 @@ revokeproc(int fd, const char *certfile, int force,
184  	 * configuration file and that all domains are represented only once.
185  	 */
186  
187@@ -1504,7 +1526,7 @@ index 58e81233f1a..378de35f662 100644
188  			goto out;
189  		}
190  		force = 2;
191-@@ -236,16 +251,7 @@ revokeproc(int fd, const char *certfile, int force,
192+@@ -256,16 +252,7 @@ revokeproc(int fd, const char *certfile, int force,
193  		if (cc <= 0)
194  			goto out;
195  
196@@ -1522,7 +1544,7 @@ index 58e81233f1a..378de35f662 100644
197  			warnx("base64buf_url");
198  			goto out;
199  		} else if (writestr(fd, COMM_CSR, der64) >= 0)
200-@@ -298,12 +304,9 @@ out:
201+@@ -339,12 +326,9 @@ out:
202  	close(fd);
203  	if (f != NULL)
204  		fclose(f);
+7, -7
 1@@ -1,4 +1,4 @@
 2-From 5e993fe93c590d60b05948e22b51dfc34c3eac4b Mon Sep 17 00:00:00 2001
 3+From 0b4249dea4ec148875be7a7fedc8ec0873043c71 Mon Sep 17 00:00:00 2001
 4 From: Michael Forney <mforney@mforney.org>
 5 Date: Thu, 20 May 2021 13:44:35 -0700
 6 Subject: [PATCH] nc: Add option to disable certificate time checking
 7@@ -9,7 +9,7 @@ Subject: [PATCH] nc: Add option to disable certificate time checking
 8  2 files changed, 8 insertions(+), 2 deletions(-)
 9 
10 diff --git a/usr.bin/nc/nc.1 b/usr.bin/nc/nc.1
11-index 76b6dc018ea..9e13b84acf7 100644
12+index 2ffdcd1ea60..ecff109e395 100644
13 --- a/usr.bin/nc/nc.1
14 +++ b/usr.bin/nc/nc.1
15 @@ -249,6 +249,8 @@ may be one of:
16@@ -22,7 +22,7 @@ index 76b6dc018ea..9e13b84acf7 100644
17  which requires a client certificate on incoming connections; or
18  .Cm muststaple ,
19 diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c
20-index b5129c2204d..d1ed530eb2c 100644
21+index 9d182198089..74d18595309 100644
22 --- a/usr.bin/nc/netcat.c
23 +++ b/usr.bin/nc/netcat.c
24 @@ -70,8 +70,9 @@
25@@ -37,7 +37,7 @@ index b5129c2204d..d1ed530eb2c 100644
26  
27  /* Command Line Options */
28  int	dflag;					/* detached, no stdin */
29-@@ -546,6 +547,8 @@ main(int argc, char *argv[])
30+@@ -551,6 +552,8 @@ main(int argc, char *argv[])
31  			errx(1, "clientcert is only valid with -l");
32  		if (TLSopt & TLS_NONAME)
33  			tls_config_insecure_noverifyname(tls_cfg);
34@@ -46,14 +46,14 @@ index b5129c2204d..d1ed530eb2c 100644
35  		if (TLSopt & TLS_NOVERIFY) {
36  			if (tls_expecthash != NULL)
37  				errx(1, "-H and -T noverify may not be used "
38-@@ -1707,6 +1710,7 @@ process_tls_opt(char *s, int *flags)
39+@@ -1712,6 +1715,7 @@ process_tls_opt(char *s, int *flags)
40+ 		{ "clientcert",		TLS_CCERT,		NULL },
41  		{ "muststaple",		TLS_MUSTSTAPLE,		NULL },
42- 		{ "noverify",		TLS_NOVERIFY,		NULL },
43  		{ "noname",		TLS_NONAME,		NULL },
44 +		{ "notime",		TLS_NOTIME,		NULL },
45+ 		{ "noverify",		TLS_NOVERIFY,		NULL },
46  		{ "protocols",		-1,			&tls_protocols },
47  		{ NULL,			-1,			NULL },
48- 	};
49 -- 
50 2.49.0
51 
+26, -0
 1@@ -0,0 +1,26 @@
 2+From 87c6da40a600a00d331d1d7f8968fd4ee933377a Mon Sep 17 00:00:00 2001
 3+From: Michael Forney <mforney@mforney.org>
 4+Date: Wed, 4 Mar 2026 15:27:54 -0800
 5+Subject: [PATCH] acme-client: Fix enum/int mismatch in declaration of
 6+ json_parse_response
 7+
 8+---
 9+ usr.sbin/acme-client/extern.h | 2 +-
10+ 1 file changed, 1 insertion(+), 1 deletion(-)
11+
12+diff --git a/usr.sbin/acme-client/extern.h b/usr.sbin/acme-client/extern.h
13+index 37820e6cfb6..3c780ebf777 100644
14+--- a/usr.sbin/acme-client/extern.h
15++++ b/usr.sbin/acme-client/extern.h
16+@@ -252,7 +252,7 @@ char		*base64buf_url(const unsigned char *, size_t);
17+  */
18+ struct jsmnn	*json_parse(const char *, size_t);
19+ void		 json_free(struct jsmnn *);
20+-int		 json_parse_response(struct jsmnn *);
21++enum chngstatus	 json_parse_response(struct jsmnn *);
22+ void		 json_free_challenge(struct chng *);
23+ int		 json_parse_challenge(struct jsmnn *, struct chng *);
24+ void		 json_free_order(struct order *);
25+-- 
26+2.49.0
27+
+2, -2
1@@ -1,2 +1,2 @@
2-6239a7a906bec7c386a06e6fda5893d854a4a00b6702eb47cbed0353a6a0c4fb  src.tar.gz
3-65b58e8432c8f678840fa58402daee8acf196770b748068e165664bd2d6cd85c  sys.tar.gz
4+1f20cc61f3b5bc9be69be131f9c897635ca6c3b4eba3a69e938a68e74139f48a  src.tar.gz
5+e24904caaee40e8774816b20f30983626f4a5434e04b4768a9ef451dc4bc39eb  sys.tar.gz
+2, -2
1@@ -1,5 +1,5 @@
2 remote-name
3-url = "https://cdn.openbsd.org/pub/OpenBSD/7.7/src.tar.gz"
4+url = "https://cdn.openbsd.org/pub/OpenBSD/7.8/src.tar.gz"
5 
6 remote-name
7-url = "https://cdn.openbsd.org/pub/OpenBSD/7.7/sys.tar.gz"
8+url = "https://cdn.openbsd.org/pub/OpenBSD/7.8/sys.tar.gz"
+1, -1
1@@ -1 +1 @@
2-7.7 r0
3+7.8 r0