selfsigned certificate for inbound TLS connections.
JH/06 Bug 165: hide more cases of password exposure - this time in expansions
- in rewrites.
+ in rewrites and routers.
Exim version 4.87
if (addr->message)
{
const uschar * s = string_printing(addr->message);
- if (s != addr->message)
- addr->message = US s;
- /* deconst cast ok as string_printing known to have alloc'n'copied */
- if ( ( Ustrstr(s, "failed to expand") != NULL
- || Ustrstr(s, "expansion of ") != NULL
- )
- && ( Ustrstr(s, "mysql") != NULL
- || Ustrstr(s, "pgsql") != NULL
- || Ustrstr(s, "redis") != NULL
- || Ustrstr(s, "sqlite") != NULL
- || Ustrstr(s, "ldap:") != NULL
- || Ustrstr(s, "ldaps:") != NULL
- || Ustrstr(s, "ldapi:") != NULL
- || Ustrstr(s, "ldapdn:") != NULL
- || Ustrstr(s, "ldapm:") != NULL
- ) )
- addr->message = US"Temporary internal error";
+
+ /* deconst cast ok as string_printing known to have alloc'n'copied */
+ addr->message = expand_hide_passwords(US s);
}
/* If we used a transport that has one of the "return_output" options set, and
+/* Avoid potentially exposing a password in a string about to be logged */
+
+uschar *
+expand_hide_passwords(uschar * s)
+{
+return ( ( Ustrstr(s, "failed to expand") != NULL
+ || Ustrstr(s, "expansion of ") != NULL
+ )
+ && ( Ustrstr(s, "mysql") != NULL
+ || Ustrstr(s, "pgsql") != NULL
+ || Ustrstr(s, "redis") != NULL
+ || Ustrstr(s, "sqlite") != NULL
+ || Ustrstr(s, "ldap:") != NULL
+ || Ustrstr(s, "ldaps:") != NULL
+ || Ustrstr(s, "ldapi:") != NULL
+ || Ustrstr(s, "ldapdn:") != NULL
+ || Ustrstr(s, "ldapm:") != NULL
+ ) )
+ ? US"Temporary internal error" : s;
+}
+
+
+
/*************************************************
**************************************************
extern BOOL expand_check_condition(uschar *, uschar *, uschar *);
extern uschar *expand_string(uschar *); /* public, cannot make const */
extern const uschar *expand_cstring(const uschar *); /* ... so use this one */
+extern uschar *expand_hide_passwords(uschar * );
extern uschar *expand_string_copy(const uschar *);
extern int_eximarith_t expand_string_integer(uschar *, BOOL);
extern void modify_variable(uschar *, void *);
if (expand_string_forcedfail)
{ if ((rule->flags & rewrite_quit) != 0) break; else continue; }
- /* Avoid potentially exposing a password */
-
- if ( ( Ustrstr(expand_string_message, "failed to expand") != NULL
- || Ustrstr(expand_string_message, "expansion of ") != NULL
- )
- && ( Ustrstr(expand_string_message, "mysql") != NULL
- || Ustrstr(expand_string_message, "pgsql") != NULL
- || Ustrstr(expand_string_message, "redis") != NULL
- || Ustrstr(expand_string_message, "sqlite") != NULL
- || Ustrstr(expand_string_message, "ldap:") != NULL
- || Ustrstr(expand_string_message, "ldaps:") != NULL
- || Ustrstr(expand_string_message, "ldapi:") != NULL
- || Ustrstr(expand_string_message, "ldapdn:") != NULL
- || Ustrstr(expand_string_message, "ldapm:") != NULL
- ) )
- expand_string_message = US"Temporary internal error";
+ expand_string_message = expand_hide_passwords(expand_string_message);
log_write(0, LOG_MAIN|LOG_PANIC, "Expansion of %s failed while rewriting: "
"%s", rule->replacement, expand_string_message);
/* Unset the address expansions, and return the final result. */
ROUTE_EXIT:
-if ( yield == DEFER
- && addr->message
- && ( Ustrstr(addr->message, "failed to expand") != NULL
- || Ustrstr(addr->message, "expansion of ") != NULL
- )
- && ( Ustrstr(addr->message, "mysql") != NULL
- || Ustrstr(addr->message, "pgsql") != NULL
- || Ustrstr(addr->message, "redis") != NULL
- || Ustrstr(addr->message, "sqlite") != NULL
- || Ustrstr(addr->message, "ldap:") != NULL
- || Ustrstr(addr->message, "ldapdn:") != NULL
- || Ustrstr(addr->message, "ldapm:") != NULL
- )
- )
- addr->message = string_sprintf("Temporary internal error");
+if (yield == DEFER && addr->message)
+ addr->message = expand_hide_passwords(addr->message);
deliver_set_expansions(NULL);
router_name = NULL;