master hovercats/oakiss / pkg / openbsd / patch / 0034-acme-client-Fix-signed-ness-of-base64buf_url-input.patch
  1From 0f55823084233ab6980c6c1beb9a2fedadc7a5ee Mon Sep 17 00:00:00 2001
  2From: Michael Forney <mforney@mforney.org>
  3Date: Fri, 23 Apr 2021 20:10:05 -0700
  4Subject: [PATCH] acme-client: Fix signed-ness of base64buf_url input
  5
  6This make most of the pointer casts unnecessary.
  7---
  8 usr.sbin/acme-client/acctproc.c   | 17 +++++++++--------
  9 usr.sbin/acme-client/base64.c     |  2 +-
 10 usr.sbin/acme-client/extern.h     |  2 +-
 11 usr.sbin/acme-client/keyproc.c    |  5 +++--
 12 usr.sbin/acme-client/revokeproc.c |  5 +++--
 13 5 files changed, 17 insertions(+), 14 deletions(-)
 14
 15diff --git a/usr.sbin/acme-client/acctproc.c b/usr.sbin/acme-client/acctproc.c
 16index da3d49107ae..9e97a8bb760 100644
 17--- a/usr.sbin/acme-client/acctproc.c
 18+++ b/usr.sbin/acme-client/acctproc.c
 19@@ -42,8 +42,9 @@
 20 static char *
 21 bn2string(const BIGNUM *bn)
 22 {
 23-	int	 len;
 24-	char	*buf, *bbuf;
 25+	int		 len;
 26+	unsigned char	*buf;
 27+	char		*bbuf;
 28 
 29 	/* Extract big-endian representation of BIGNUM. */
 30 
 31@@ -51,7 +52,7 @@ bn2string(const BIGNUM *bn)
 32 	if ((buf = malloc(len)) == NULL) {
 33 		warn("malloc");
 34 		return NULL;
 35-	} else if (len != BN_bn2bin(bn, (unsigned char *)buf)) {
 36+	} else if (len != BN_bn2bin(bn, buf)) {
 37 		warnx("BN_bn2bin");
 38 		free(buf);
 39 		return NULL;
 40@@ -167,7 +168,7 @@ op_thumbprint(int fd, EVP_PKEY *pkey)
 41 		warnx("EVP_Digest");
 42 		goto out;
 43 	}
 44-	if ((dig64 = base64buf_url((char *)dig, digsz)) == NULL) {
 45+	if ((dig64 = base64buf_url(dig, digsz)) == NULL) {
 46 		warnx("base64buf_url");
 47 		goto out;
 48 	}
 49@@ -281,7 +282,7 @@ op_sign(int fd, EVP_PKEY *pkey, enum acctop op)
 50 
 51 	/* Base64-encode the payload. */
 52 
 53-	if ((pay64 = base64buf_url(pay, strlen(pay))) == NULL) {
 54+	if ((pay64 = base64buf_url((unsigned char *)pay, strlen(pay))) == NULL) {
 55 		warnx("base64buf_url");
 56 		goto out;
 57 	}
 58@@ -324,7 +325,7 @@ op_sign(int fd, EVP_PKEY *pkey, enum acctop op)
 59 
 60 	/* The header combined with the nonce, base64. */
 61 
 62-	if ((prot64 = base64buf_url(prot, strlen(prot))) == NULL) {
 63+	if ((prot64 = base64buf_url((unsigned char *)prot, strlen(prot))) == NULL) {
 64 		warnx("base64buf_url");
 65 		goto out;
 66 	}
 67@@ -363,7 +364,7 @@ op_sign(int fd, EVP_PKEY *pkey, enum acctop op)
 68 
 69 	switch (EVP_PKEY_base_id(pkey)) {
 70 	case EVP_PKEY_RSA:
 71-		if ((dig64 = base64buf_url((char *)dig, digsz)) == NULL) {
 72+		if ((dig64 = base64buf_url(dig, digsz)) == NULL) {
 73 			warnx("base64buf_url");
 74 			goto out;
 75 		}
 76@@ -402,7 +403,7 @@ op_sign(int fd, EVP_PKEY *pkey, enum acctop op)
 77 			goto out;
 78 		}
 79 
 80-		if ((dig64 = base64buf_url((char *)buf, 2 * bn_len)) == NULL) {
 81+		if ((dig64 = base64buf_url(buf, 2 * bn_len)) == NULL) {
 82 			warnx("base64buf_url");
 83 			goto out;
 84 		}
 85diff --git a/usr.sbin/acme-client/base64.c b/usr.sbin/acme-client/base64.c
 86index 2b6377f0d81..0d84ad4b458 100644
 87--- a/usr.sbin/acme-client/base64.c
 88+++ b/usr.sbin/acme-client/base64.c
 89@@ -39,7 +39,7 @@ base64len(size_t len)
 90  * Returns NULL on allocation failure (not logged).
 91  */
 92 char *
 93-base64buf_url(const char *data, size_t len)
 94+base64buf_url(const unsigned char *data, size_t len)
 95 {
 96 	size_t	 i, sz;
 97 	char	*buf;
 98diff --git a/usr.sbin/acme-client/extern.h b/usr.sbin/acme-client/extern.h
 99index 8b500561744..990c784f706 100644
100--- a/usr.sbin/acme-client/extern.h
101+++ b/usr.sbin/acme-client/extern.h
102@@ -241,7 +241,7 @@ int		 checkexit_ext(int *, pid_t, enum comp);
103  * Returns a buffer or NULL on allocation error.
104  */
105 size_t		 base64len(size_t);
106-char		*base64buf_url(const char *, size_t);
107+char		*base64buf_url(const unsigned char *, size_t);
108 
109 /*
110  * JSON parsing routines.
111diff --git a/usr.sbin/acme-client/keyproc.c b/usr.sbin/acme-client/keyproc.c
112index bab74c2b385..4360156b9c0 100644
113--- a/usr.sbin/acme-client/keyproc.c
114+++ b/usr.sbin/acme-client/keyproc.c
115@@ -76,7 +76,8 @@ add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, const char *value)
116 int
117 keyproc(int netsock, struct domain_c *domain)
118 {
119-	char		*der64 = NULL, *der = NULL, *dercp;
120+	char		*der64 = NULL;
121+	unsigned char	*der = NULL, *dercp;
122 	char		*sans = NULL, *san = NULL;
123 	FILE		*f;
124 	size_t		 sansz;
125@@ -234,7 +235,7 @@ keyproc(int netsock, struct domain_c *domain)
126 	} else if ((der = dercp = malloc(len)) == NULL) {
127 		warn("malloc");
128 		goto out;
129-	} else if (len != i2d_X509_REQ(x, (u_char **)&dercp)) {
130+	} else if (len != i2d_X509_REQ(x, &dercp)) {
131 		warnx("i2d_X509_REQ");
132 		goto out;
133 	} else if ((der64 = base64buf_url(der, len)) == NULL) {
134diff --git a/usr.sbin/acme-client/revokeproc.c b/usr.sbin/acme-client/revokeproc.c
135index 6fe34043129..c0963a278fb 100644
136--- a/usr.sbin/acme-client/revokeproc.c
137+++ b/usr.sbin/acme-client/revokeproc.c
138@@ -79,7 +79,8 @@ revokeproc(int fd, const char *certfile, int force,
139     int revocate, struct domain_c *domain)
140 {
141 	GENERAL_NAMES			*sans = NULL;
142-	char				*der = NULL, *dercp, *der64 = NULL;
143+	unsigned char			*der = NULL, *dercp;
144+	char				*der64 = NULL;
145 	int				 rc = 0, cc, sanidx, len, j, k;
146 	int				*found_altnames = NULL;
147 	FILE				*f = NULL;
148@@ -320,7 +321,7 @@ revokeproc(int fd, const char *certfile, int force,
149 		} else if ((der = dercp = malloc(len)) == NULL) {
150 			warn("malloc");
151 			goto out;
152-		} else if (len != i2d_X509(x, (u_char **)&dercp)) {
153+		} else if (len != i2d_X509(x, &dercp)) {
154 			warnx("i2d_X509");
155 			goto out;
156 		} else if ((der64 = base64buf_url(der, len)) == NULL) {
157-- 
1582.54.0
159