From ab1604ea9202d3dbc0fd7fd230dc693d83d3092c Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sat, 4 Apr 2020 21:27:30 +0100 Subject: [PATCH] Avoid the long whats_supported line being mixed with output from other processes --- src/src/drtables.c | 67 +++++++++++----------- src/src/exim.c | 136 +++++++++++++++++++++++--------------------- src/src/functions.h | 8 +-- src/src/malware.c | 11 ++-- 4 files changed, 113 insertions(+), 109 deletions(-) diff --git a/src/src/drtables.c b/src/src/drtables.c index 7fa8ca469..363c07bf4 100644 --- a/src/src/drtables.c +++ b/src/src/drtables.c @@ -201,15 +201,6 @@ auth_info auths_available[] = { { .driver_name = US"" } /* end marker */ }; -void -auth_show_supported(FILE * f) -{ -fprintf(f, "Authenticators:"); -for (auth_info * ai = auths_available; ai->driver_name[0]; ai++) - fprintf(f, " %s", ai->driver_name); -fprintf(f, "\n"); -} - /* Tables of information about which routers and transports are included in the exim binary. */ @@ -369,17 +360,6 @@ router_info routers_available[] = { }; -void -route_show_supported(FILE * f) -{ -fprintf(f, "Routers:"); -for (router_info * rr = routers_available; rr->driver_name[0]; rr++) - fprintf(f, " %s", rr->driver_name); -fprintf(f, "\n"); -} - - - transport_info transports_available[] = { #ifdef TRANSPORT_APPENDFILE @@ -469,42 +449,61 @@ transport_info transports_available[] = { { US"" } }; -void -transport_show_supported(FILE * f) +#ifndef MACRO_PREDEF + +gstring * +auth_show_supported(gstring * g) +{ +g = string_cat(g, US"Authenticators:"); +for (auth_info * ai = auths_available; ai->driver_name[0]; ai++) + g = string_fmt_append(g, " %s", ai->driver_name); +return string_cat(g, US"\n"); +} + +gstring * +route_show_supported(gstring * g) +{ +g = string_cat(g, US"Routers:"); +for (router_info * rr = routers_available; rr->driver_name[0]; rr++) + g = string_fmt_append(g, " %s", rr->driver_name); +return string_cat(g, US"\n"); +} + +gstring * +transport_show_supported(gstring * g) { -fprintf(f, "Transports:"); +g = string_cat(g, US"Transports:"); #ifdef TRANSPORT_APPENDFILE - fprintf(f, " appendfile"); + g = string_cat(g, US" appendfile"); #ifdef SUPPORT_MAILDIR - fprintf(f, "/maildir"); /* damn these subclasses */ + g = string_cat(g, US"/maildir"); /* damn these subclasses */ #endif #ifdef SUPPORT_MAILSTORE - fprintf(f, "/mailstore"); + g = string_cat(g, US"/mailstore"); #endif #ifdef SUPPORT_MBX - fprintf(f, "/mbx"); + g = string_cat(g, US"/mbx"); #endif #endif #ifdef TRANSPORT_AUTOREPLY - fprintf(f, " autoreply"); + g = string_cat(g, US" autoreply"); #endif #ifdef TRANSPORT_LMTP - fprintf(f, " lmtp"); + g = string_cat(g, US" lmtp"); #endif #ifdef TRANSPORT_PIPE - fprintf(f, " pipe"); + g = string_cat(g, US" pipe"); #endif #ifdef EXPERIMENTAL_QUEUEFILE - fprintf(f, " queuefile"); + g = string_cat(g, US" queuefile"); #endif #ifdef TRANSPORT_SMTP - fprintf(f, " smtp"); + g = string_cat(g, US" smtp"); #endif -fprintf(f, "\n"); +return string_cat(g, US"\n"); } -#ifndef MACRO_PREDEF struct lookupmodulestr { diff --git a/src/src/exim.c b/src/src/exim.c index bb49ee670..cd42a88ad 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -895,195 +895,198 @@ Returns: nothing static void show_whats_supported(FILE * fp) { +rmark reset_point = store_mark(); +gstring * g; DEBUG(D_any) {} else show_db_version(fp); -fprintf(fp, "Support for:"); +g = string_cat(NULL, US"Support for:"); #ifdef SUPPORT_CRYPTEQ - fprintf(fp, " crypteq"); + g = string_cat(g, US" crypteq"); #endif #if HAVE_ICONV - fprintf(fp, " iconv()"); + g = string_cat(g, US" iconv()"); #endif #if HAVE_IPV6 - fprintf(fp, " IPv6"); + g = string_cat(g, US" IPv6"); #endif #ifdef HAVE_SETCLASSRESOURCES - fprintf(fp, " use_setclassresources"); + g = string_cat(g, US" use_setclassresources"); #endif #ifdef SUPPORT_PAM - fprintf(fp, " PAM"); + g = string_cat(g, US" PAM"); #endif #ifdef EXIM_PERL - fprintf(fp, " Perl"); + g = string_cat(g, US" Perl"); #endif #ifdef EXPAND_DLFUNC - fprintf(fp, " Expand_dlfunc"); + g = string_cat(g, US" Expand_dlfunc"); #endif #ifdef USE_TCP_WRAPPERS - fprintf(fp, " TCPwrappers"); + g = string_cat(g, US" TCPwrappers"); #endif #ifdef USE_GNUTLS - fprintf(fp, " GnuTLS"); + g = string_cat(g, US" GnuTLS"); #endif #ifdef USE_OPENSSL - fprintf(fp, " OpenSSL"); + g = string_cat(g, US" OpenSSL"); #endif #ifdef SUPPORT_TRANSLATE_IP_ADDRESS - fprintf(fp, " translate_ip_address"); + g = string_cat(g, US" translate_ip_address"); #endif #ifdef SUPPORT_MOVE_FROZEN_MESSAGES - fprintf(fp, " move_frozen_messages"); + g = string_cat(g, US" move_frozen_messages"); #endif #ifdef WITH_CONTENT_SCAN - fprintf(fp, " Content_Scanning"); + g = string_cat(g, US" Content_Scanning"); #endif #ifdef SUPPORT_DANE - fprintf(fp, " DANE"); + g = string_cat(g, US" DANE"); #endif #ifndef DISABLE_DKIM - fprintf(fp, " DKIM"); + g = string_cat(g, US" DKIM"); #endif #ifndef DISABLE_DNSSEC - fprintf(fp, " DNSSEC"); + g = string_cat(g, US" DNSSEC"); #endif #ifndef DISABLE_EVENT - fprintf(fp, " Event"); + g = string_cat(g, US" Event"); #endif #ifdef SUPPORT_I18N - fprintf(fp, " I18N"); + g = string_cat(g, US" I18N"); #endif #ifndef DISABLE_OCSP - fprintf(fp, " OCSP"); + g = string_cat(g, US" OCSP"); #endif #ifndef DISABLE_PIPE_CONNECT - fprintf(fp, " PIPE_CONNECT"); + g = string_cat(g, US" PIPE_CONNECT"); #endif #ifndef DISABLE_PRDR - fprintf(fp, " PRDR"); + g = string_cat(g, US" PRDR"); #endif #ifdef SUPPORT_PROXY - fprintf(fp, " PROXY"); + g = string_cat(g, US" PROXY"); #endif #ifdef SUPPORT_SOCKS - fprintf(fp, " SOCKS"); + g = string_cat(g, US" SOCKS"); #endif #ifdef SUPPORT_SPF - fprintf(fp, " SPF"); + g = string_cat(g, US" SPF"); #endif #ifdef SUPPORT_DMARC - fprintf(fp, " DMARC"); + g = string_cat(g, US" DMARC"); #endif #ifdef TCP_FASTOPEN tcp_init(); - if (f.tcp_fastopen_ok) fprintf(fp, " TCP_Fast_Open"); + if (f.tcp_fastopen_ok) g = string_cat(g, US" TCP_Fast_Open"); #endif #ifdef EXPERIMENTAL_ARC - fprintf(fp, " Experimental_ARC"); + g = string_cat(g, US" Experimental_ARC"); #endif #ifdef EXPERIMENTAL_BRIGHTMAIL - fprintf(fp, " Experimental_Brightmail"); + g = string_cat(g, US" Experimental_Brightmail"); #endif #ifdef EXPERIMENTAL_DCC - fprintf(fp, " Experimental_DCC"); + g = string_cat(g, US" Experimental_DCC"); #endif #ifdef EXPERIMENTAL_DSN_INFO - fprintf(fp, " Experimental_DSN_info"); + g = string_cat(g, US" Experimental_DSN_info"); #endif #ifdef EXPERIMENTAL_LMDB - fprintf(fp, " Experimental_LMDB"); + g = string_cat(g, US" Experimental_LMDB"); #endif #ifdef EXPERIMENTAL_QUEUE_RAMP - fprintf(fp, " Experimental_Queue_Ramp"); + g = string_cat(g, US" Experimental_Queue_Ramp"); #endif #ifdef EXPERIMENTAL_QUEUEFILE - fprintf(fp, " Experimental_QUEUEFILE"); + g = string_cat(g, US" Experimental_QUEUEFILE"); #endif #if defined(EXPERIMENTAL_SRS) || defined(EXPERIMENTAL_SRS_NATIVE) - fprintf(fp, " Experimental_SRS"); + g = string_cat(g, US" Experimental_SRS"); #endif #ifdef EXPERIMENTAL_TLS_RESUME - fprintf(fp, " Experimental_TLS_resume"); + g = string_cat(g, US" Experimental_TLS_resume"); #endif -fprintf(fp, "\n"); +g = string_cat(g, US"\n"); -fprintf(fp, "Lookups (built-in):"); +g = string_cat(g, US"Lookups (built-in):"); #if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2 - fprintf(fp, " lsearch wildlsearch nwildlsearch iplsearch"); + g = string_cat(g, US" lsearch wildlsearch nwildlsearch iplsearch"); #endif #if defined(LOOKUP_CDB) && LOOKUP_CDB!=2 - fprintf(fp, " cdb"); + g = string_cat(g, US" cdb"); #endif #if defined(LOOKUP_DBM) && LOOKUP_DBM!=2 - fprintf(fp, " dbm dbmjz dbmnz"); + g = string_cat(g, US" dbm dbmjz dbmnz"); #endif #if defined(LOOKUP_DNSDB) && LOOKUP_DNSDB!=2 - fprintf(fp, " dnsdb"); + g = string_cat(g, US" dnsdb"); #endif #if defined(LOOKUP_DSEARCH) && LOOKUP_DSEARCH!=2 - fprintf(fp, " dsearch"); + g = string_cat(g, US" dsearch"); #endif #if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2 - fprintf(fp, " ibase"); + g = string_cat(g, US" ibase"); #endif #if defined(LOOKUP_JSON) && LOOKUP_JSON!=2 - fprintf(fp, " json"); + g = string_cat(g, US" json"); #endif #if defined(LOOKUP_LDAP) && LOOKUP_LDAP!=2 - fprintf(fp, " ldap ldapdn ldapm"); + g = string_cat(g, US" ldap ldapdn ldapm"); #endif #ifdef EXPERIMENTAL_LMDB - fprintf(fp, " lmdb"); + g = string_cat(g, US" lmdb"); #endif #if defined(LOOKUP_MYSQL) && LOOKUP_MYSQL!=2 - fprintf(fp, " mysql"); + g = string_cat(g, US" mysql"); #endif #if defined(LOOKUP_NIS) && LOOKUP_NIS!=2 - fprintf(fp, " nis nis0"); + g = string_cat(g, US" nis nis0"); #endif #if defined(LOOKUP_NISPLUS) && LOOKUP_NISPLUS!=2 - fprintf(fp, " nisplus"); + g = string_cat(g, US" nisplus"); #endif #if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2 - fprintf(fp, " oracle"); + g = string_cat(g, US" oracle"); #endif #if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2 - fprintf(fp, " passwd"); + g = string_cat(g, US" passwd"); #endif #if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2 - fprintf(fp, " pgsql"); + g = string_cat(g, US" pgsql"); #endif #if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2 - fprintf(fp, " redis"); + g = string_cat(g, US" redis"); #endif #if defined(LOOKUP_SQLITE) && LOOKUP_SQLITE!=2 - fprintf(fp, " sqlite"); + g = string_cat(g, US" sqlite"); #endif #if defined(LOOKUP_TESTDB) && LOOKUP_TESTDB!=2 - fprintf(fp, " testdb"); + g = string_cat(g, US" testdb"); #endif #if defined(LOOKUP_WHOSON) && LOOKUP_WHOSON!=2 - fprintf(fp, " whoson"); + g = string_cat(g, US" whoson"); #endif -fprintf(fp, "\n"); +g = string_cat(g, US"\n"); -auth_show_supported(fp); -route_show_supported(fp); -transport_show_supported(fp); +g = auth_show_supported(g); +g = route_show_supported(g); +g = transport_show_supported(g); #ifdef WITH_CONTENT_SCAN -malware_show_supported(fp); +g = malware_show_supported(g); #endif if (fixed_never_users[0] > 0) { int i; - fprintf(fp, "Fixed never_users: "); + g = string_cat(g, US"Fixed never_users: "); for (i = 1; i <= (int)fixed_never_users[0] - 1; i++) - fprintf(fp, "%d:", (unsigned int)fixed_never_users[i]); - fprintf(fp, "%d\n", (unsigned int)fixed_never_users[i]); + string_fmt_append(g, "%u:", (unsigned)fixed_never_users[i]); + g = string_fmt_append(g, "%u\n", (unsigned)fixed_never_users[i]); } -fprintf(fp, "Configure owner: %d:%d\n", config_uid, config_gid); +g = string_fmt_append(g, "Configure owner: %d:%d\n", config_uid, config_gid); +fputs(CS string_from_gstring(g), fp); fprintf(fp, "Size of off_t: " SIZE_T_FMT "\n", sizeof(off_t)); @@ -1163,6 +1166,7 @@ show_db_version(fp); #endif } while (0); +store_reset(reset_point); } diff --git a/src/src/functions.h b/src/src/functions.h index 28d6f26a6..efd039b5e 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -119,7 +119,7 @@ extern int auth_get_data(uschar **, const uschar *, int); extern int auth_get_no64_data(uschar **, uschar *); extern int auth_prompt(const uschar *); extern int auth_read_input(const uschar *); -extern void auth_show_supported(FILE *); +extern gstring * auth_show_supported(gstring *); extern uschar *auth_xtextencode(uschar *, int); extern int auth_xtextdecode(uschar *, uschar **); @@ -312,7 +312,7 @@ extern void mainlog_close(void); extern int malware(const uschar *, int); extern int malware_in_file(uschar *); extern void malware_init(void); -extern void malware_show_supported(FILE *); +extern gstring * malware_show_supported(gstring *); #endif extern int match_address_list(const uschar *, BOOL, BOOL, const uschar **, unsigned int *, int, int, const uschar **); @@ -436,7 +436,7 @@ extern BOOL route_find_expanded_group(uschar *, uschar *, uschar *, gid_t *, extern BOOL route_find_expanded_user(uschar *, uschar *, uschar *, struct passwd **, uid_t *, uschar **); extern void route_init(void); -extern void route_show_supported(FILE *); +extern gstring * route_show_supported(gstring *); extern void route_tidyup(void); extern uschar *search_find(void *, const uschar *, uschar *, int, @@ -577,7 +577,7 @@ extern void transport_write_reset(int); extern BOOL transport_write_string(int, const char *, ...); extern BOOL transport_headers_send(transport_ctx *, BOOL (*)(transport_ctx *, uschar *, int)); -extern void transport_show_supported(FILE *); +extern gstring * transport_show_supported(gstring *); extern BOOL transport_write_message(transport_ctx *, int); extern void tree_add_duplicate(uschar *, address_item *); extern void tree_add_nonrecipient(uschar *); diff --git a/src/src/malware.c b/src/src/malware.c index a4080d040..afe9e0002 100644 --- a/src/src/malware.c +++ b/src/src/malware.c @@ -2276,12 +2276,13 @@ if (!fprot6d_re_virus) } -void -malware_show_supported(FILE * f) +gstring * +malware_show_supported(gstring * g) { -fprintf(f, "Malware:"); -for (struct scan * sc = m_scans; sc->scancode != (scanner_t)-1; sc++) fprintf(f, " %s", sc->name); -fprintf(f, "\n"); +g = string_cat(g, US"Malware:"); +for (struct scan * sc = m_scans; sc->scancode != (scanner_t)-1; sc++) + g = string_fmt_append(g, " %s", sc->name); +return string_cat(g, US"\n"); } -- 2.30.2