itls: Fix a crash on invalid cert in non-interactive mode - sacc - sacc(omys), simple console gopher client Err bitreich.org 70 hgit clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ URL:git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ bitreich.org 70 1Log /scm/sacc/log.gph bitreich.org 70 1Files /scm/sacc/files.gph bitreich.org 70 1Refs /scm/sacc/refs.gph bitreich.org 70 1Tags /scm/sacc/tag bitreich.org 70 1LICENSE /scm/sacc/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 5b9bcbd0dcf3cf2c4edb995621de245ce6b80a9d /scm/sacc/commit/5b9bcbd0dcf3cf2c4edb995621de245ce6b80a9d.gph bitreich.org 70 1parent 4003310026b26f9c81b44fb07686e7301064c4bf /scm/sacc/commit/4003310026b26f9c81b44fb07686e7301064c4bf.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Wed, 18 Jan 2023 23:52:32 +0100 Err bitreich.org 70 i Err bitreich.org 70 itls: Fix a crash on invalid cert in non-interactive mode Err bitreich.org 70 i Err bitreich.org 70 iThis is because uiprompt() cannot be used in non-interactive. Err bitreich.org 70 i Err bitreich.org 70 iTo reproduce: Err bitreich.org 70 i Err bitreich.org 70 iPut a different certificate in ~/.share/sacc/cert/bitreich.org Err bitreich.org 70 iThen run: Err bitreich.org 70 i Err bitreich.org 70 i sacc gophers://bitreich.org > /tmp/plop Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M common.h | 2 ++ Err bitreich.org 70 i M io_tls.c | 5 +++++ Err bitreich.org 70 i M sacc.c | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 8 insertions(+), 1 deletion(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/common.h b/common.h /scm/sacc/file/common.h.gph bitreich.org 70 i@@ -23,6 +23,8 @@ struct dir { Err bitreich.org 70 i size_t curline; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i+extern int interactive; Err bitreich.org 70 i+ Err bitreich.org 70 i extern void (*diag)(char *, ...); Err bitreich.org 70 i Err bitreich.org 70 i extern void die(const char *, ...); Err bitreich.org 70 1diff --git a/io_tls.c b/io_tls.c /scm/sacc/file/io_tls.c.gph bitreich.org 70 i@@ -210,6 +210,11 @@ connect_tls(struct cnx *c, struct addrinfo *ai, const char *host) Err bitreich.org 70 i diag("Can't establish TLS with \"%s\": %s", Err bitreich.org 70 i host, tls_error(t)); Err bitreich.org 70 i Err bitreich.org 70 i+ if (!interactive) { Err bitreich.org 70 i+ r = CONN_ABORT; Err bitreich.org 70 i+ goto end; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i if (pem.cert) { Err bitreich.org 70 i s = uiprompt("Save certificate locally and retry? [yN]: "); Err bitreich.org 70 i switch (*s) { Err bitreich.org 70 1diff --git a/sacc.c b/sacc.c /scm/sacc/file/sacc.c.gph bitreich.org 70 i@@ -49,6 +49,7 @@ enum { Err bitreich.org 70 i Err bitreich.org 70 i void (*diag)(char *, ...); Err bitreich.org 70 i Err bitreich.org 70 i+int interactive; Err bitreich.org 70 i const char ident[] = "@(#) sacc(omys): " VERSION; Err bitreich.org 70 i Err bitreich.org 70 i static char intbuf[256]; /* 256B ought to be enough for any URI */ Err bitreich.org 70 i@@ -56,7 +57,6 @@ static char *mainurl; Err bitreich.org 70 i static Item *mainentry; Err bitreich.org 70 i static int devnullfd; Err bitreich.org 70 i static int parent = 1; Err bitreich.org 70 i-static int interactive; Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i stddiag(char *fmt, ...) Err bitreich.org 70 .