packages feed

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 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