* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2017 */
+/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
* Show supported features *
*************************************************/
-/* This function is called for -bV/--version and for -d to output the optional
-features of the current Exim binary.
-
-Arguments: a FILE for printing
-Returns: nothing
-*/
-
static void
-show_whats_supported(FILE *f)
+show_db_version(FILE * f)
{
- auth_info *authi;
-
#ifdef DB_VERSION_STRING
-fprintf(f, "Berkeley DB: %s\n", DB_VERSION_STRING);
+DEBUG(D_any)
+ {
+ fprintf(f, "Library version: BDB: Compile: %s\n", DB_VERSION_STRING);
+ fprintf(f, " Runtime: %s\n",
+ db_version(NULL, NULL, NULL));
+ }
+else
+ fprintf(f, "Berkeley DB: %s\n", DB_VERSION_STRING);
+
#elif defined(BTREEVERSION) && defined(HASHVERSION)
#ifdef USE_DB
fprintf(f, "Probably Berkeley DB version 1.8x (native mode)\n");
#else
fprintf(f, "Probably Berkeley DB version 1.8x (compatibility mode)\n");
#endif
+
#elif defined(_DBM_RDONLY) || defined(dbm_dirfno)
fprintf(f, "Probably ndbm\n");
#elif defined(USE_TDB)
fprintf(f, "Probably GDBM (compatibility mode)\n");
#endif
#endif
+}
+
+
+/* This function is called for -bV/--version and for -d to output the optional
+features of the current Exim binary.
+
+Arguments: a FILE for printing
+Returns: nothing
+*/
+
+static void
+show_whats_supported(FILE * f)
+{
+auth_info * authi;
+
+DEBUG(D_any) {} else show_db_version(f);
fprintf(f, "Support for:");
#ifdef SUPPORT_CRYPTEQ
gnu_get_libc_version());
#endif
+show_db_version(f);
+
#ifdef SUPPORT_TLS
tls_version_report(f);
#endif
readconf_main(checking || list_options);
-if (builtin_macros_create_trigger) DEBUG(D_any)
- debug_printf("Builtin macros created (expensive) due to config line '%.*s'\n",
- Ustrlen(builtin_macros_create_trigger)-1, builtin_macros_create_trigger);
/* Now in directory "/" */
if (list_options)
{
+ BOOL fail = FALSE;
set_process_info("listing variables");
- if (recipients_arg >= argc) readconf_print(US"all", NULL, flag_n);
- else for (i = recipients_arg; i < argc; i++)
+ if (recipients_arg >= argc)
+ fail = !readconf_print(US"all", NULL, flag_n);
+ else for (i = recipients_arg; i < argc; i++)
+ {
+ if (i < argc - 1 &&
+ (Ustrcmp(argv[i], "router") == 0 ||
+ Ustrcmp(argv[i], "transport") == 0 ||
+ Ustrcmp(argv[i], "authenticator") == 0 ||
+ Ustrcmp(argv[i], "macro") == 0 ||
+ Ustrcmp(argv[i], "environment") == 0))
{
- if (i < argc - 1 &&
- (Ustrcmp(argv[i], "router") == 0 ||
- Ustrcmp(argv[i], "transport") == 0 ||
- Ustrcmp(argv[i], "authenticator") == 0 ||
- Ustrcmp(argv[i], "macro") == 0 ||
- Ustrcmp(argv[i], "environment") == 0))
- {
- readconf_print(argv[i+1], argv[i], flag_n);
- i++;
- }
- else readconf_print(argv[i], NULL, flag_n);
+ fail |= !readconf_print(argv[i+1], argv[i], flag_n);
+ i++;
}
- exim_exit(EXIT_SUCCESS, US"main");
+ else
+ fail = !readconf_print(argv[i], NULL, flag_n);
+ }
+ exim_exit(fail ? EXIT_FAILURE : EXIT_SUCCESS, US"main");
}
if (list_config)
{
set_process_info("listing config");
- readconf_print(US"config", NULL, flag_n);
- exim_exit(EXIT_SUCCESS, US"main");
+ exim_exit(readconf_print(US"config", NULL, flag_n)
+ ? EXIT_SUCCESS : EXIT_FAILURE, US"main");
}