sacc

sacc (saccomys): simple gopher client.
Log | Files | Refs | LICENSE

commit 5b9bcbd0dcf3cf2c4edb995621de245ce6b80a9d
parent 4003310026b26f9c81b44fb07686e7301064c4bf
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Wed, 18 Jan 2023 23:52:32 +0100

tls: Fix a crash on invalid cert in non-interactive mode

This is because uiprompt() cannot be used in non-interactive.

To reproduce:

Put a different certificate in ~/.share/sacc/cert/bitreich.org
Then run:

	sacc gophers://bitreich.org > /tmp/plop

Diffstat:
Mcommon.h | 2++
Mio_tls.c | 5+++++
Msacc.c | 2+-
3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/common.h b/common.h @@ -23,6 +23,8 @@ struct dir { size_t curline; }; +extern int interactive; + extern void (*diag)(char *, ...); extern void die(const char *, ...); diff --git a/io_tls.c b/io_tls.c @@ -210,6 +210,11 @@ connect_tls(struct cnx *c, struct addrinfo *ai, const char *host) diag("Can't establish TLS with \"%s\": %s", host, tls_error(t)); + if (!interactive) { + r = CONN_ABORT; + goto end; + } + if (pem.cert) { s = uiprompt("Save certificate locally and retry? [yN]: "); switch (*s) { diff --git a/sacc.c b/sacc.c @@ -49,6 +49,7 @@ enum { void (*diag)(char *, ...); +int interactive; const char ident[] = "@(#) sacc(omys): " VERSION; static char intbuf[256]; /* 256B ought to be enough for any URI */ @@ -56,7 +57,6 @@ static char *mainurl; static Item *mainentry; static int devnullfd; static int parent = 1; -static int interactive; static void stddiag(char *fmt, ...)