Browse Source

Obfuscate password and critical SSL options in logs (#191)

Jan Uhlig 3 years ago
parent
commit
ebce1389d6
1 changed files with 17 additions and 1 deletions
  1. 17 1
      src/mysql_conn.erl

+ 17 - 1
src/mysql_conn.erl

@@ -28,7 +28,7 @@
 
 -behaviour(gen_server).
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
-         code_change/3]).
+         code_change/3, format_status/2]).
 
 -define(default_host, "localhost").
 -define(default_port, 3306).
@@ -830,3 +830,19 @@ demonitor_processes(List, 0) ->
 demonitor_processes([{_FromPid, MRef}|T], Count) ->
     erlang:demonitor(MRef),
     demonitor_processes(T, Count - 1).
+
+format_status(normal, [_PDict, State]) ->
+	{data, [{"State", State}]};
+format_status(terminate, [_PDict, State=#state{ssl_opts=undefined}]) ->
+	{data, [{"State", State#state{password = hidden}}]};
+format_status(terminate, [_PDict, State=#state{ssl_opts=SSLOpts}]) ->
+	SSLOpts1 = lists:map(
+		fun
+			({cert, _}) -> {cert, hidden};
+			({key, _}) -> {key, hidden};
+			({cacerts, _}) -> {cacerts, hidden};
+			(Other) -> Other
+		end,
+		SSLOpts
+        ),
+	{data, [{"State", State#state{password = hidden, ssl_opts=SSLOpts1}}]}.