1300e6d41SJan Stancek /* SPDX-License-Identifier: LGPL-2.1+ */
2300e6d41SJan Stancek /*
3300e6d41SJan Stancek * SSL helper functions shared by sign-file and extract-cert.
4300e6d41SJan Stancek */
5300e6d41SJan Stancek
drain_openssl_errors(int l,int silent)6*467d60edSJan Stancek static void drain_openssl_errors(int l, int silent)
7300e6d41SJan Stancek {
8300e6d41SJan Stancek const char *file;
9300e6d41SJan Stancek char buf[120];
10300e6d41SJan Stancek int e, line;
11300e6d41SJan Stancek
12300e6d41SJan Stancek if (ERR_peek_error() == 0)
13300e6d41SJan Stancek return;
14*467d60edSJan Stancek if (!silent)
15300e6d41SJan Stancek fprintf(stderr, "At main.c:%d:\n", l);
16300e6d41SJan Stancek
17*467d60edSJan Stancek while ((e = ERR_peek_error_line(&file, &line))) {
18300e6d41SJan Stancek ERR_error_string(e, buf);
19*467d60edSJan Stancek if (!silent)
20300e6d41SJan Stancek fprintf(stderr, "- SSL %s: %s:%d\n", buf, file, line);
21*467d60edSJan Stancek ERR_get_error();
22300e6d41SJan Stancek }
23300e6d41SJan Stancek }
24300e6d41SJan Stancek
25300e6d41SJan Stancek #define ERR(cond, fmt, ...) \
26300e6d41SJan Stancek do { \
27300e6d41SJan Stancek bool __cond = (cond); \
28*467d60edSJan Stancek drain_openssl_errors(__LINE__, 0); \
29300e6d41SJan Stancek if (__cond) { \
30300e6d41SJan Stancek errx(1, fmt, ## __VA_ARGS__); \
31300e6d41SJan Stancek } \
32300e6d41SJan Stancek } while (0)
33