mysql-haskell-openssl 0.8.0.0 → 0.8.3.0
raw patch · 2 files changed
+29/−23 lines, 2 filesdep +binarydep −io-streamsdep −networkdep ~mysql-haskelldep ~tcp-streamsdep ~tcp-streams-opensslPVP ok
version bump matches the API change (PVP)
Dependencies added: binary
Dependencies removed: io-streams, network
Dependency ranges changed: mysql-haskell, tcp-streams, tcp-streams-openssl
API changes (from Hackage documentation)
Files
- Database/MySQL/OpenSSL.hs +24/−17
- mysql-haskell-openssl.cabal +5/−6
Database/MySQL/OpenSSL.hs view
@@ -20,15 +20,15 @@ import Control.Exception (bracketOnError, throwIO) import Control.Monad import Data.IORef (newIORef)+import Data.Connection as Conn+import qualified Data.Binary as Binary+import qualified Data.Binary.Put as Binary import Database.MySQL.Connection hiding (connect, connectDetail) import Database.MySQL.Protocol.Auth import Database.MySQL.Protocol.Packet-import qualified Network.Socket as N import qualified OpenSSL as SSL import qualified OpenSSL.X509 as X509 import qualified OpenSSL.Session as Session-import qualified System.IO.Streams as Stream-import qualified System.IO.Streams.Binary as Binary import qualified System.IO.Streams.OpenSSL as SSL import qualified System.IO.Streams.TCP as TCP import Data.OpenSSLSetting@@ -42,16 +42,20 @@ connectDetail :: ConnectInfo -> (Session.SSLContext, String) -> IO (Greeting, MySQLConn) connectDetail (ConnectInfo host port db user pass charset) (ctx, subname) =- bracketOnError (TCP.connectWithBufferSize host port bUFSIZE)- (\(_, _, sock) -> N.close sock) $ \ (is, os, sock) -> do+ bracketOnError (connectWithBufferSize host port bUFSIZE) Conn.close $ \ conn -> do+ let is = Conn.source conn is' <- decodeInputStream is- os' <- Binary.encodeOutputStream os p <- readPacket is' greet <- decodeFromPacket p if supportTLS (greetingCaps greet) then SSL.withOpenSSL $ do- Stream.write (Just (encodeToPacket 1 $ sslRequest charset)) os'- bracketOnError (Session.connection ctx sock) SSL.close $ \ ssl -> do+ write conn (encodeToPacket 1 $ sslRequest charset)+ let (sock, sockAddr) = Conn.connExtraInfo conn+ bracketOnError (Session.connection ctx sock)+ (\ ssl -> do+ Session.shutdown ssl Session.Unidirectional+ Conn.close conn+ ) $ \ ssl -> do Session.connect ssl trusted <- Session.getVerifyResult ssl cert <- Session.getPeerCertificate ssl@@ -59,16 +63,19 @@ let cnname = lookup "CN" subnames verified = maybe False (== subname) cnname unless (trusted && verified) (throwIO $ Session.ProtocolError "fail to verify certificate")- (sslIs, sslOs) <- SSL.sslToStreams ssl- sslIs' <- decodeInputStream sslIs- sslOs' <- Binary.encodeOutputStream sslOs- let auth = mkAuth db user pass charset greet- Stream.write (Just (encodeToPacket 2 auth)) sslOs'- q <- readPacket sslIs'+ sconn <- SSL.sslToConnection (ssl, sockAddr)+ let sis = Conn.source sconn+ auth = mkAuth db user pass charset greet+ write sconn (encodeToPacket 2 auth)+ sis' <- decodeInputStream sis+ q <- readPacket sis' if isOK q then do consumed <- newIORef True- let conn = MySQLConn sslIs' sslOs' (SSL.close ssl) consumed- return (greet, conn)- else Stream.write Nothing sslOs' >> decodeFromPacket q >>= throwIO . ERRException+ let mconn = MySQLConn sis' (write sconn) (Conn.close sconn) consumed+ return (greet, mconn)+ else Conn.close sconn >> decodeFromPacket q >>= throwIO . ERRException else error "Database.MySQL.OpenSSL: server doesn't support TLS connection"+ where+ connectWithBufferSize h p bs = TCP.connectSocket h p >>= TCP.socketToConnection bs+ write c a = Conn.send c $ Binary.runPut . Binary.put $ a
mysql-haskell-openssl.cabal view
@@ -1,5 +1,5 @@ name: mysql-haskell-openssl-version: 0.8.0.0+version: 0.8.3.0 synopsis: TLS support for mysql-haskell package using openssl description: TLS support for mysql-haskell package using openssl license: BSD3@@ -21,12 +21,11 @@ library exposed-modules: Database.MySQL.OpenSSL build-depends: base >= 4.7 && < 5- , network >= 2.3 && < 3.0- , io-streams >= 1.2 && < 2.0- , tcp-streams >= 0.6 && < 0.7- , tcp-streams-openssl >= 0.6 && < 0.7+ , binary >= 0.8.3+ , tcp-streams >= 1.0 && < 1.1+ , tcp-streams-openssl >= 1.0 && < 1.1 , wire-streams >= 0.1- , mysql-haskell >= 0.8+ , mysql-haskell >= 0.8.3 && < 0.8.4 , HsOpenSSL >=0.10.3 && <0.12 default-language: Haskell2010