Index: mysql_conn.erl
===================================================================
--- mysql_conn.erl	(revision 861)
+++ mysql_conn.erl	(working copy)
@@ -64,6 +64,7 @@
 %% External exports
 %%--------------------------------------------------------------------
 -export([start/6,
+         start/7,
 	 start_link/6,
 	 fetch/3,
 	 fetch/4,
@@ -99,12 +100,14 @@
 
 %%--------------------------------------------------------------------
 %% Function: start(Host, Port, User, Password, Database, LogFun)
+%% Function: start(Host, Port, User, Password, Database, UserFlags, LogFun)
 %% Function: start_link(Host, Port, User, Password, Database, LogFun)
 %%           Host     = string()
 %%           Port     = integer()
 %%           User     = string()
 %%           Password = string()
 %%           Database = string()
+%%           UserFlags = list()
 %%           LogFun   = undefined | function() of arity 3
 %% Descrip.: Starts a mysql_conn process that connects to a MySQL
 %%           server, logs in and chooses a database.
@@ -112,11 +115,13 @@
 %%           Pid    = pid()
 %%           Reason = string()
 %%--------------------------------------------------------------------
-start(Host, Port, User, Password, Database, LogFun) when is_list(Host), is_integer(Port), is_list(User),
-							 is_list(Password), is_list(Database) ->
+start(Host, Port, User, Password, Database, LogFun) ->
+    start(Host, Port, User, Password, Database, [], LogFun).
+start(Host, Port, User, Password, Database, UserFlags, LogFun) when is_list(Host), is_integer(Port), is_list(User),
+                                                                    is_list(Password), is_list(Database), is_list(UserFlags) ->
     ConnPid = self(),
     Pid = spawn(fun () ->
-			init(Host, Port, User, Password, Database, LogFun, ConnPid)
+		        init(Host, Port, User, Password, Database, UserFlags, LogFun, ConnPid)
 		end),
     post_start(Pid, LogFun).
 
@@ -124,7 +129,7 @@
 							 is_list(Password), is_list(Database) ->
     ConnPid = self(),
     Pid = spawn_link(fun () ->
-			init(Host, Port, User, Password, Database, LogFun, ConnPid)
+			init(Host, Port, User, Password, Database, [], LogFun, ConnPid)
 		end),
     post_start(Pid, LogFun).
 
@@ -243,6 +248,7 @@
 %%           User     = string()
 %%           Password = string()
 %%           Database = string()
+%%           UserFlags = list()
 %%           LogFun   = undefined | function() of arity 3
 %%           Parent   = pid() of process starting this mysql_conn
 %% Descrip.: Connect to a MySQL server, log in and chooses a database.
@@ -250,10 +256,10 @@
 %%           we were successfull.
 %% Returns : void() | does not return
 %%--------------------------------------------------------------------
-init(Host, Port, User, Password, Database, LogFun, Parent) ->
+init(Host, Port, User, Password, Database, UserFlags, LogFun, Parent) ->
     case mysql_recv:start_link(Host, Port, LogFun, self()) of
 	{ok, RecvPid, Sock} ->
-	    case mysql_init(Sock, RecvPid, User, Password, LogFun) of
+	    case mysql_init(Sock, RecvPid, User, Password, UserFlags, LogFun) of
 		{ok, Version} ->
 		    case do_query(Sock, RecvPid, LogFun, "use " ++ Database, Version, [{result_type, binary}]) of
 			{error, MySQLRes} ->
@@ -318,7 +324,7 @@
     end.
 
 %%--------------------------------------------------------------------
-%% Function: mysql_init(Sock, RecvPid, User, Password, LogFun)
+%% Function: mysql_init(Sock, RecvPid, User, Password, UserFlags, LogFun)
 %%           Sock     = term(), gen_tcp socket
 %%           RecvPid  = pid(), mysql_recv process
 %%           User     = string()
@@ -328,16 +334,16 @@
 %% Returns : ok | {error, Reason}
 %%           Reason = string()
 %%--------------------------------------------------------------------
-mysql_init(Sock, RecvPid, User, Password, LogFun) ->
+mysql_init(Sock, RecvPid, User, Password, UserFlags, LogFun) ->
     case do_recv(LogFun, RecvPid, undefined) of
 	{ok, Packet, InitSeqNum} ->
 	    {Version, Salt1, Salt2, Caps} = greeting(Packet, LogFun),
 	    AuthRes =
 		case Caps band ?SECURE_CONNECTION of
 		    ?SECURE_CONNECTION ->
-			mysql_auth:do_new_auth(Sock, RecvPid, InitSeqNum + 1, User, Password, Salt1, Salt2, LogFun);
+			mysql_auth:do_new_auth(Sock, RecvPid, InitSeqNum + 1, User, Password, UserFlags, Salt1, Salt2, LogFun);
 		    _ ->
-			mysql_auth:do_old_auth(Sock, RecvPid, InitSeqNum + 1, User, Password, Salt1, LogFun)
+			mysql_auth:do_old_auth(Sock, RecvPid, InitSeqNum + 1, User, Password, UserFlags, Salt1, LogFun)
 		end,
 	    case AuthRes of
 		{ok, <<0:8, _Rest/binary>>, _RecvNum} ->
Index: mysql_auth.erl
===================================================================
--- mysql_auth.erl	(revision 861)
+++ mysql_auth.erl	(working copy)
@@ -17,8 +17,8 @@
 %% External exports (should only be used by the 'mysql_conn' module)
 %%--------------------------------------------------------------------
 -export([
-	 do_old_auth/7,
-	 do_new_auth/8
+	 do_old_auth/8,
+	 do_new_auth/9
 	]).
 
 %%--------------------------------------------------------------------
@@ -51,9 +51,9 @@
 %% Descrip.: Perform old-style MySQL authentication.
 %% Returns : result of mysql_conn:do_recv/3
 %%--------------------------------------------------------------------
-do_old_auth(Sock, RecvPid, SeqNum, User, Password, Salt1, LogFun) ->
+do_old_auth(Sock, RecvPid, SeqNum, User, Password, UserFlags, Salt1, LogFun) ->
     Auth = password_old(Password, Salt1),
-    Packet2 = make_auth(User, Auth),
+    Packet2 = make_auth(User, Auth, UserFlags),
     do_send(Sock, Packet2, SeqNum, LogFun),
     mysql_conn:do_recv(LogFun, RecvPid, SeqNum).
 
@@ -71,9 +71,9 @@
 %% Descrip.: Perform MySQL authentication.
 %% Returns : result of mysql_conn:do_recv/3
 %%--------------------------------------------------------------------
-do_new_auth(Sock, RecvPid, SeqNum, User, Password, Salt1, Salt2, LogFun) ->
+do_new_auth(Sock, RecvPid, SeqNum, User, Password, UserFlags, Salt1, Salt2, LogFun) ->
     Auth = password_new(Password, Salt1 ++ Salt2),
-    Packet2 = make_new_auth(User, Auth, none),
+    Packet2 = make_new_auth(User, Auth, none, UserFlags),
     do_send(Sock, Packet2, SeqNum, LogFun),
     case mysql_conn:do_recv(LogFun, RecvPid, SeqNum) of
 	{ok, Packet3, SeqNum2} ->
@@ -105,9 +105,11 @@
 			     end, L)).
 
 %% part of do_old_auth/4, which is part of mysql_init/4
-make_auth(User, Password) ->
-    Caps = ?LONG_PASSWORD bor ?LONG_FLAG
-	bor ?TRANSACTIONS bor ?FOUND_ROWS,
+make_auth(User, Password, UserFlags) ->
+    Flags = lists:append(UserFlags, [?LONG_PASSWORD, ?LONG_FLAG, ?TRANSACTIONS, ?FOUND_ROWS]),
+    Caps = lists:foldl(fun(Flag, TCaps) when is_integer(Flag) ->
+                           TCaps bor Flag
+                       end, 0, Flags),
     Maxsize = 0,
     UserB = list_to_binary(User),
     PasswordB = Password,
@@ -115,16 +117,18 @@
     PasswordB/binary>>.
 
 %% part of do_new_auth/4, which is part of mysql_init/4
-make_new_auth(User, Password, Database) ->
+make_new_auth(User, Password, Database, UserFlags) ->
     DBCaps = case Database of
 		 none ->
 		     0;
 		 _ ->
 		     ?CONNECT_WITH_DB
 	     end,
-    Caps = ?LONG_PASSWORD bor ?LONG_FLAG bor ?TRANSACTIONS bor
-	?PROTOCOL_41 bor ?SECURE_CONNECTION bor DBCaps
-	bor ?FOUND_ROWS,
+
+    Flags = lists:append(UserFlags, [?LONG_PASSWORD, ?LONG_FLAG, ?TRANSACTIONS, ?PROTOCOL_41, ?SECURE_CONNECTION, DBCaps, ?FOUND_ROWS]),
+    Caps = lists:foldl(fun(Flag, TCaps) when is_integer(Flag) ->
+                           TCaps bor Flag
+                       end, DBCaps, Flags),
     Maxsize = ?MAX_PACKET_SIZE,
     UserB = list_to_binary(User),
     PasswordL = size(Password),