diff --git a/Cargo.toml b/Cargo.toml index 31b6616..69bd3f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,15 @@ path = "src/lib.rs" debug = true [features] -default = ["native-tls"] +default = [ + "native-tls", + "flate2/zlib", + "mysql_common/bigdecimal03", + "mysql_common/rust_decimal", + "mysql_common/time03", + "mysql_common/uuid", + "mysql_common/frunk", +] rustls-tls = ["rustls", "webpki", "webpki-roots", "rustls-pemfile"] nightly = [] @@ -33,16 +41,18 @@ nightly = [] lazy_static = "1.4.0" rand = "0.8.2" serde_derive = "1" +time = "0.3" [dependencies] bufstream = "~0.1" bytes = "1.0.1" io-enum = "1.0.0" +flate2 = { version = "1.0", default-features = false } lru = "0.7" -mysql_common = "0.27.2" +mysql_common = { version = "0.28.0", default-features = false } socket2 = "0.4" once_cell = "1.7.2" -pem = "0.8.1" +pem = "1.0.1" percent-encoding = "2.1.0" serde = "1" serde_json = "1" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fe55025..064bf2c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -45,11 +45,11 @@ jobs: SSL=false COMPRESS=true cargo test SSL=true COMPRESS=true cargo test - SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls - SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls + SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 + SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 - SSL=false COMPRESS=true cargo test --no-default-features - SSL=false COMPRESS=false cargo test --no-default-features + SSL=false COMPRESS=true cargo test --no-default-features --features flate2/zlib,mysql_common/time03 + SSL=false COMPRESS=false cargo test --no-default-features --features flate2/zlib,mysql_common/time03 env: RUST_BACKTRACE: 1 DATABASE_URL: mysql://root:root@127.0.0.1:3306/mysql @@ -91,11 +91,11 @@ jobs: SSL=false COMPRESS=true cargo test SSL=true COMPRESS=true cargo test - SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls - SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls + SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 + SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 - SSL=false COMPRESS=true cargo test --no-default-features - SSL=false COMPRESS=false cargo test --no-default-features + SSL=false COMPRESS=true cargo test --no-default-features --features flate2/zlib,mysql_common/time03 + SSL=false COMPRESS=false cargo test --no-default-features --features flate2/zlib,mysql_common/time03 env: RUST_BACKTRACE: 1 DATABASE_URL: mysql://root@127.0.0.1/mysql @@ -142,11 +142,11 @@ jobs: SSL=false COMPRESS=true cargo test SSL=true COMPRESS=true cargo test - SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls - SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls + SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 + SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03 - SSL=false COMPRESS=true cargo test --no-default-features - SSL=false COMPRESS=false cargo test --no-default-features + SSL=false COMPRESS=true cargo test --no-default-features --features flate2/zlib,mysql_common/time03 + SSL=false COMPRESS=false cargo test --no-default-features --features flate2/zlib,mysql_common/time03 env: RUST_BACKTRACE: 1 DATABASE_URL: mysql://root:password@127.0.0.1/mysql @@ -192,11 +192,11 @@ jobs: docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=$SSL cargo test" docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=$SSL COMPRESS=true cargo test" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=true cargo test --no-default-features" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=false cargo test --no-default-features" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=true cargo test --no-default-features --features flate2/zlib,mysql_common/time03" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=false cargo test --no-default-features --features flate2/zlib,mysql_common/time03" env: RUST_BACKTRACE: 1 DATABASE_URL: mysql://root:password@127.0.0.1/mysql @@ -240,8 +240,8 @@ jobs: --performance-schema=on \ --log-bin=mysql-bin --gtid-domain-id=1 \ --ssl \ - --ssl-ca=/root/tests/ca-cert.pem \ - --ssl-cert=/root/tests/server-cert.pem \ + --ssl-ca=/root/tests/ca.crt \ + --ssl-cert=/root/tests/server.crt \ --ssl-key=/root/tests/server-key.pem & while ! nc -W 1 localhost 3307 | grep -q -P '.+'; do sleep 1; done docker logs container @@ -260,11 +260,11 @@ jobs: docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true cargo test" docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=true cargo test" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=false cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=true COMPRESS=true cargo test --no-default-features --features rustls-tls,flate2/zlib,mysql_common/time03" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=true cargo test --no-default-features" - docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=false cargo test --no-default-features" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=true cargo test --no-default-features --features flate2/zlib,mysql_common/time03" + docker exec container bash -l -c "cd \$HOME && DATABASE_URL=$DATABASE_URL SSL=false COMPRESS=false cargo test --no-default-features --features flate2/zlib,mysql_common/time03" env: RUST_BACKTRACE: 1 DATABASE_URL: mysql://root:password@127.0.0.1/mysql diff --git a/src/conn/mod.rs b/src/conn/mod.rs index c366b05..8592cc1 100644 --- a/src/conn/mod.rs +++ b/src/conn/mod.rs @@ -537,7 +537,15 @@ impl Conn { } } - let nonce = handshake.nonce(); + // Handshake scramble is always 21 bytes length (20 + zero terminator) + let nonce = { + let mut nonce = Vec::from(handshake.scramble_1_ref()); + nonce.extend_from_slice(handshake.scramble_2_ref().unwrap_or(&[][..])); + // Trim zero terminator. Fill with zeroes if nonce + // is somehow smaller than 20 bytes (this matches the server behavior). + nonce.resize(20, 0); + nonce + }; let auth_plugin = handshake .auth_plugin() @@ -1160,12 +1168,12 @@ mod test { }; use mysql_common::{binlog::events::EventData, packets::binlog_request::BinlogRequest}; + use time::PrimitiveDateTime; use crate::{ from_row, from_value, params, prelude::*, test_misc::get_opts, - time::PrimitiveDateTime, Conn, DriverError::{MissingNamedParameter, NamedParamsForPositionalQuery}, Error::DriverError, diff --git a/src/io/tls/native_tls_io.rs b/src/io/tls/native_tls_io.rs index 30af31b..10f6fa9 100644 --- a/src/io/tls/native_tls_io.rs +++ b/src/io/tls/native_tls_io.rs @@ -36,6 +36,7 @@ impl Stream { .map(|x| vec![x]) .or_else(|_| { pem::parse_many(&*root_cert_data) + .unwrap_or_default() .iter() .map(pem::encode) .map(|s| Certificate::from_pem(s.as_bytes())) diff --git a/src/lib.rs b/src/lib.rs index 6cb1d6c..fc77af8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -324,8 +324,8 @@ //! println!("A double precision float value: {}", from_value::(val)) //! } //! val @ Value::Date(..) => { -//! use mysql::chrono::NaiveDateTime; -//! println!("A date value: {}", from_value::(val)) +//! use time::PrimitiveDateTime; +//! println!("A date value: {}", from_value::(val)) //! } //! val @ Value::Time(..) => { //! use std::time::Duration; @@ -769,13 +769,6 @@ pub extern crate serde_json; #[macro_use] extern crate serde_derive; -/// Reexport of `chrono` crate. -pub use crate::myc::chrono; -/// Reexport of `time` crate. -pub use crate::myc::time; -/// Reexport of `uuid` crate. -pub use crate::myc::uuid; - mod buffer_pool; mod conn; pub mod error;