From c15bfa6d9db0430e0b9fc31f5861928a5fe4d034 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 08:18:21 +0900 Subject: [PATCH 01/15] Add required db models --- .../2018-08-11-222334_service_target_heuristics/down.sql | 1 + .../2018-08-11-222334_service_target_heuristics/up.sql | 1 + owl-daemon/src/db/models.rs | 1 + owl-daemon/src/db/schema.rs | 1 + 4 files changed, 4 insertions(+) create mode 100644 owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/down.sql create mode 100644 owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/up.sql diff --git a/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/down.sql b/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/down.sql new file mode 100644 index 0000000..deb250e --- /dev/null +++ b/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/down.sql @@ -0,0 +1 @@ +ALTER TABLE exploit_targets DROP COLUMN consecutive_failure; diff --git a/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/up.sql b/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/up.sql new file mode 100644 index 0000000..343bb9e --- /dev/null +++ b/owl-daemon/migrations/2018-08-11-222334_service_target_heuristics/up.sql @@ -0,0 +1 @@ +ALTER TABLE exploit_targets ADD COLUMN consecutive_failure integer; diff --git a/owl-daemon/src/db/models.rs b/owl-daemon/src/db/models.rs index ff6558d..b690824 100644 --- a/owl-daemon/src/db/models.rs +++ b/owl-daemon/src/db/models.rs @@ -168,6 +168,7 @@ pub struct ExploitAttachmentInsertable { pub struct ExploitTarget { pub exploit_id: i32, pub service_variant_id: i32, + pub consecutive_failure: i32, } #[derive(DbEnum, Debug)] diff --git a/owl-daemon/src/db/schema.rs b/owl-daemon/src/db/schema.rs index 5b1203d..2ef392e 100644 --- a/owl-daemon/src/db/schema.rs +++ b/owl-daemon/src/db/schema.rs @@ -26,6 +26,7 @@ table! { exploit_targets (exploit_id, service_variant_id) { exploit_id -> Int4, service_variant_id -> Int4, + consecutive_failure -> Int4, } } From 41a040dc8edf90d78db82aecbef531420a1c830c Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 09:28:16 +0900 Subject: [PATCH 02/15] Update heuristics data on exploit completion --- owl-daemon/src/db/models.rs | 8 ++++ owl-daemon/src/handler/exploit.rs | 73 +++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/owl-daemon/src/db/models.rs b/owl-daemon/src/db/models.rs index b690824..006c9be 100644 --- a/owl-daemon/src/db/models.rs +++ b/owl-daemon/src/db/models.rs @@ -171,6 +171,14 @@ pub struct ExploitTarget { pub consecutive_failure: i32, } +#[derive(Insertable)] +#[table_name = "exploit_targets"] +pub struct ExploitTargetInsertable { + pub exploit_id: i32, + pub service_variant_id: i32, + pub consecutive_failure: i32, +} + #[derive(DbEnum, Debug)] pub enum ExploitStatus { Pending, diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index a14cd43..9be1976 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -289,10 +289,73 @@ fn update_exploit_status( exploit_tasks::message.eq(exploit_message), )) .execute(con)?; - info!(target: "exploit", "[ExploitTask] Status updated: {} - {:?}", &exploit_task_id, &exploit_status); + info!(target: "exploit", "[ExploitTask] Status updated: {} - {:?}", exploit_task_id, &exploit_status); Ok(result) } +fn update_exploit_consecutive_failure( + con: &PgConnection, + exploit_task_id: i32, + failed: bool, +) -> Result { + let (exploit_task, service_provider) = exploit_tasks::table + .filter(exploit_tasks::id.eq(exploit_task_id)) + .inner_join(service_providers::table) + .first::<(ExploitTask, ServiceProvider)>(con)?; + + let exploit_target = exploit_targets::table + .find(( + &exploit_task.exploit_id, + &service_provider.service_variant_id, + )) + .first::(con); + + match exploit_target { + Ok(exploit_target) => { + let failures = exploit_target.consecutive_failure; + let accumulated_failures = failures + 1; + let query = diesel::update( + exploit_targets::table + .filter(exploit_targets::exploit_id.eq(exploit_task.exploit_id)) + .filter( + exploit_targets::service_variant_id.eq(service_provider.service_variant_id), + ), + ); + + if failed { + if failures < 0 { + info!(target: "exploit", "[ExploitTarget] Failure accumulation ignored: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, failures); + Ok(0) + } else { + info!(target: "exploit", "[ExploitTarget] Failure accumulated: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, accumulated_failures); + Ok(query + .set(exploit_targets::consecutive_failure.eq(accumulated_failures)) + .execute(con)?) + } + } else { + info!(target: "exploit", "[ExploitTarget] Failure reset: {}", exploit_task.exploit_id); + Ok(query + .set(exploit_targets::consecutive_failure.eq(0)) + .execute(con)?) + } + }, + Err(_) => { + if failed { + info!(target: "exploit", "[ExploitTarget] Failure accumulated: {} - {} times", exploit_task.exploit_id, 1); + Ok(diesel::insert_into(exploit_targets::table) + .values(ExploitTargetInsertable { + exploit_id: exploit_task.exploit_id, + service_variant_id: service_provider.service_variant_id, + consecutive_failure: 1, + }) + .execute(con)?) + } else { + Ok(0) + } + }, + } +} + fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), Error> { let con: &PgConnection = &*resource.db_pool.get()?; @@ -316,7 +379,7 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), resource.config.exploit_config.default_retries, )?; - info!(target: "exploit", "[ExploitTask] Generated: {}", &exploit_task.id); + info!(target: "exploit", "[ExploitTask] Generated: {}", exploit_task.id); let db_pool = resource.db_pool.clone(); let exploit_task_id = exploit_task.id; @@ -340,8 +403,9 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), .then(move |result| { if let Ok(con) = db_pool.get() { let con = &*con; + let failed = result.is_err(); let exploit_update_message = result.unwrap_or_else(|err| { - info!(target: "exploit", "[ExploitTask] Failed: {}", &exploit_task.id); + info!(target: "exploit", "[ExploitTask] Failed: {}", exploit_task.id); if let Error::ExploitError(err) = err { match err { ExploitError::ExploitProcessError(err) => { @@ -374,12 +438,13 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), }); update_exploit_status(con, exploit_task_id, exploit_update_message).is_ok(); + update_exploit_consecutive_failure(con, exploit_task_id, failed).is_ok(); } Ok(()) }), ); - info!(target: "exploit", "[ExploitTask] Spawned: {}", &exploit_task_id); + info!(target: "exploit", "[ExploitTask] Spawned: {}", exploit_task_id); } Ok(()) From 8a9cb4ba5dffffca8a44eaad39c68f5e3534eba2 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 10:19:01 +0900 Subject: [PATCH 03/15] Add failure threshold --- owl-daemon/src/handler/exploit.rs | 34 ++++++++++++++++++------------- owl-daemon/src/lib.rs | 2 ++ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index 9be1976..e0eb4e7 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -245,11 +245,22 @@ fn create_exploit_task( .get_result::(con)?) } -fn active_target(con: &PgConnection, service_id: i32) -> Result, Error> { +fn active_target( + con: &PgConnection, + failure_threshold: i32, + exploit: &Exploit, +) -> Result, Error> { + let target_blacklist = exploit_targets::table + .filter(exploit_targets::exploit_id.eq(exploit.id)) + .filter(exploit_targets::consecutive_failure.gt(failure_threshold)) + .select(exploit_targets::service_variant_id) + .load::(con)?; + Ok(service_providers::table .inner_join(teams::table) .inner_join(service_variants::table.inner_join(services::table)) - .filter(services::id.eq(service_id)) + .filter(services::id.eq(exploit.service_id)) + .filter(service_variants::id.ne_all(target_blacklist)) .order_by(( service_variants::service_id, service_providers::team_id, @@ -358,20 +369,15 @@ fn update_exploit_consecutive_failure( fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), Error> { let con: &PgConnection = &*resource.db_pool.get()?; + let failure_threshold = resource.config.exploit_config.failure_threshold; - // TODO: exclude failing exploits - let _exploit_task_targets = exploit_targets::table - .inner_join(service_variants::table) - .filter(exploit_targets::exploit_id.eq(exploit.id)) - .filter(service_variants::service_id.eq(exploit.service_id)) - .load::<(ExploitTarget, ServiceVariant)>(con)?; - - // TODO: only load exploit name - let exploit_attachments = exploit_attachments::table + let exploit_attachment_name = exploit_attachments::table .filter(exploit_attachments::exploit_id.eq(exploit.id)) - .load::(con)?; + .order(exploit_attachments::id.asc()) + .select(exploit_attachments::name) + .first::(con)?; - for (target_info, service_provider_id) in active_target(con, exploit.service_id)? { + for (target_info, service_provider_id) in active_target(con, failure_threshold, exploit)? { let exploit_task = create_exploit_task( con, exploit, @@ -389,7 +395,7 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), .exploit_future( resource.db_pool.clone(), exploit.name.clone(), - &exploit_attachments[0].name, + &exploit_attachment_name, target_info, move |db_pool, exploit_update_message| { update_exploit_status( diff --git a/owl-daemon/src/lib.rs b/owl-daemon/src/lib.rs index 30773b3..cd11f17 100644 --- a/owl-daemon/src/lib.rs +++ b/owl-daemon/src/lib.rs @@ -60,6 +60,8 @@ pub struct ExploitConfig { pub auth_command: String, pub default_retries: i32, pub default_timeout: i32, + pub failure_threshold: i32, + pub maximum_task: i32, } #[derive(Clone)] From 24598ec60d7616ba7ed50573d63c0c2bd3d79519 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 11:29:03 +0900 Subject: [PATCH 04/15] Add failure control command --- owl-cli/src/exploit.rs | 31 +++++++++++++++++++++ owl-daemon/src/db/models.rs | 6 +++++ owl-daemon/src/handler/exploit.rs | 45 +++++++++++++++++++++++++++++++ owl-daemon/src/lib.rs | 15 +++++++++++ owl-rpc/src/lib.rs | 1 + owl-rpc/src/model/exploit.rs | 7 +++++ 6 files changed, 105 insertions(+) diff --git a/owl-cli/src/exploit.rs b/owl-cli/src/exploit.rs index dc924ca..e9a61b7 100644 --- a/owl-cli/src/exploit.rs +++ b/owl-cli/src/exploit.rs @@ -16,6 +16,14 @@ fn arg_match_numeric_none(matches: &ArgMatches, name: &str) -> Result Result { + if matches.is_present(name) && matches.value_of(name).unwrap() != "disable" { + Ok(matches.value_of(name).unwrap().parse::()?) + } else { + Ok(-1) + } +} + pub fn exploit_command() -> App<'static, 'static> { SubCommand::with_name("exploit") .about("User defined exploit management") @@ -87,6 +95,13 @@ pub fn exploit_command() -> App<'static, 'static> { .args(&[ Arg::from_usage(" 'name of the exploit to download'"), ]), + SubCommand::with_name("failure") + .about("update failure value for specific exploit target (admin)") + .args(&[ + Arg::from_usage(" 'name of the exploit to modify'"), + Arg::from_usage(" 'name of the targeting service variant'"), + Arg::from_usage(" 'failure value to set'"), + ]), SubCommand::with_name("run-all") .about("trigger scheduled exploit process (admin)"), SubCommand::with_name("run") @@ -282,6 +297,22 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< Ok("Exploit successfully downloaded".to_string()) }, + ("failure", Some(matches)) => { + shared_param.client.failure_exploit( + shared_param.token, + ExploitFailureParams { + exploit_name: matches.value_of("exploit_name").unwrap().to_string(), + service_variant_name: matches + .value_of("service_variant_name") + .unwrap() + .to_string(), + failure: arg_match_numeric_disable(matches, "failure")?, + }, + )?; + + Ok("Exploit failure successfully updated".to_string()) + }, + ("run-all", Some(_matches)) => { shared_param.client.run_all_exploit(shared_param.token)?; diff --git a/owl-daemon/src/db/models.rs b/owl-daemon/src/db/models.rs index 006c9be..f20accf 100644 --- a/owl-daemon/src/db/models.rs +++ b/owl-daemon/src/db/models.rs @@ -179,6 +179,12 @@ pub struct ExploitTargetInsertable { pub consecutive_failure: i32, } +#[derive(AsChangeset)] +#[table_name = "exploit_targets"] +pub struct ExploitTargetChangeset { + pub consecutive_failure: Option, +} + #[derive(DbEnum, Debug)] pub enum ExploitStatus { Pending, diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index e0eb4e7..cdbc7c1 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -3,7 +3,9 @@ use db; use db::models::*; use db::schema::*; use diesel; +use diesel::dsl::exists; use diesel::prelude::*; +use diesel::select; use diesel::PgConnection; use digest::Input; use error::Error; @@ -201,6 +203,49 @@ pub fn edit_exploit(resource: &DaemonResource, params: ExploitEditParams) -> Res } } +pub fn failure_exploit( + resource: &DaemonResource, + params: ExploitFailureParams, +) -> Result<(), Error> { + let con: &PgConnection = &*resource.db_pool.get()?; + let exploit_name = params.exploit_name; + let service_variant_name = params.service_variant_name; + let failure = params.failure; + + con.transaction::<(), Error, _>(|| { + let exploit = exploits::table + .filter(exploits::name.eq(&exploit_name)) + .first::(con)?; + + let service_variant = service_variants::table + .filter(service_variants::name.eq(&service_variant_name)) + .first::(con)?; + + let query = exploit_targets::table + .filter(exploit_targets::exploit_id.eq(exploit.id)) + .filter(exploit_targets::service_variant_id.eq(service_variant.service_id)); + + if select(exists(query)).get_result(con)? { + diesel::update(query) + .set(ExploitTargetChangeset { + consecutive_failure: Some(failure), + }) + .execute(con)?; + info!(target: "db", "[ExploitTarget] Update record: ({}, {}) -> {}", &exploit.name, &service_variant.name, failure); + } else { + diesel::insert_into(exploit_targets::table) + .values(ExploitTargetInsertable { + exploit_id: exploit.id, + service_variant_id: service_variant.id, + consecutive_failure: failure, + }) + .execute(con)?; + info!(target: "db", "[ExploitTarget] Insert record: ({}, {}) -> {}", &exploit.name, &service_variant.name, failure); + } + Ok(()) + }) +} + pub fn download_exploit( resource: &DaemonResource, params: ExploitDownloadParams, diff --git a/owl-daemon/src/lib.rs b/owl-daemon/src/lib.rs index cd11f17..748b109 100644 --- a/owl-daemon/src/lib.rs +++ b/owl-daemon/src/lib.rs @@ -335,6 +335,21 @@ impl FutureService for OwlDaemon { ) } + type FailureExploitFut = Result<(), Message>; + fn failure_exploit( + &self, + cli_token: String, + params: ExploitFailureParams, + ) -> Self::FailureExploitFut { + run_handler_with_param( + Permission::Admin, + cli_token, + handler::exploit::failure_exploit, + &self.resource, + params, + ) + } + type ListExploitFut = Result, Message>; fn list_exploit(&self, cli_token: String, params: ExploitListParams) -> Self::ListExploitFut { run_handler_with_param( diff --git a/owl-rpc/src/lib.rs b/owl-rpc/src/lib.rs index 9511db6..d752091 100644 --- a/owl-rpc/src/lib.rs +++ b/owl-rpc/src/lib.rs @@ -35,6 +35,7 @@ service! { rpc download_exploit(cli_token: String, params: ExploitDownloadParams) -> ExploitAttachmentData | Message; rpc add_exploit(cli_token: String, params: ExploitAddParams) -> String | Message; rpc edit_exploit(cli_token: String, params: ExploitEditParams) -> () | Message; + rpc failure_exploit(cli_token: String, params: ExploitFailureParams) -> () | Message; rpc list_exploit(cli_token: String, params: ExploitListParams) -> Vec | Message; rpc run_exploit(cli_token: String, params: ExploitRunParams) -> Option> | Message; rpc run_all_exploit(cli_token: String) -> () | Message; diff --git a/owl-rpc/src/model/exploit.rs b/owl-rpc/src/model/exploit.rs index 9b02317..0372d67 100644 --- a/owl-rpc/src/model/exploit.rs +++ b/owl-rpc/src/model/exploit.rs @@ -46,6 +46,13 @@ pub enum ExploitEditParams { }, } +#[derive(Serialize, Deserialize)] +pub struct ExploitFailureParams { + pub exploit_name: String, + pub service_variant_name: String, + pub failure: i32, +} + #[derive(Serialize, Deserialize)] pub struct ExploitRunParams { pub name: String, From 4a31e9a85bb1a8181b572652c1582e41181077c0 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 11:43:59 +0900 Subject: [PATCH 05/15] Remove non-related configuration --- owl-daemon/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/owl-daemon/src/lib.rs b/owl-daemon/src/lib.rs index 748b109..0201227 100644 --- a/owl-daemon/src/lib.rs +++ b/owl-daemon/src/lib.rs @@ -61,7 +61,6 @@ pub struct ExploitConfig { pub default_retries: i32, pub default_timeout: i32, pub failure_threshold: i32, - pub maximum_task: i32, } #[derive(Clone)] From f35c4e9958ef578220fe6fabccbf75d940d0da1c Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Sun, 12 Aug 2018 12:10:53 +0900 Subject: [PATCH 06/15] Add option to limit maximum concurrent exploit task --- owl-daemon/Cargo.toml | 1 + owl-daemon/src/lib.rs | 1 + owl-daemon/src/main.rs | 15 +++++++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/owl-daemon/Cargo.toml b/owl-daemon/Cargo.toml index 9f70016..f3c5d0e 100644 --- a/owl-daemon/Cargo.toml +++ b/owl-daemon/Cargo.toml @@ -20,6 +20,7 @@ shell-escape = "0.1.4" tarpc = { git = "https://github.com/PLUS-POSTECH/tarpc.git" } tokio = "0.1.7" tokio-core = "0.1.17" +tokio-threadpool = "0.1.5" toml = "0.4" r2d2 = "0.8.2" r2d2-diesel = "1.0.0" diff --git a/owl-daemon/src/lib.rs b/owl-daemon/src/lib.rs index 0201227..92a2f44 100644 --- a/owl-daemon/src/lib.rs +++ b/owl-daemon/src/lib.rs @@ -61,6 +61,7 @@ pub struct ExploitConfig { pub default_retries: i32, pub default_timeout: i32, pub failure_threshold: i32, + pub max_running_exploit_task: i32, } #[derive(Clone)] diff --git a/owl-daemon/src/main.rs b/owl-daemon/src/main.rs index f9bab02..f432931 100644 --- a/owl-daemon/src/main.rs +++ b/owl-daemon/src/main.rs @@ -13,12 +13,14 @@ extern crate r2d2_diesel; extern crate tarpc; extern crate tokio; extern crate tokio_core; +extern crate tokio_threadpool; extern crate toml; use std::fs::File; use std::io::prelude::*; use dotenv::dotenv; +use futures::Future; use owl_daemon::db::build_connection_pool; use owl_daemon::error::Error; use owl_daemon::Config; @@ -26,6 +28,7 @@ use owl_daemon::OwlDaemon; use owl_rpc::FutureServiceExt; use tarpc::future::server; use tarpc::util::FirstSocketAddr; +use tokio::runtime; use tokio_core::reactor; fn read_file_contents(file_name: &str) -> Result, Error> { @@ -42,10 +45,15 @@ fn main_wrap() -> Result<(), Error> { let config: Config = toml::from_slice(&read_file_contents("config.toml")?)?; let connection_string = config.server.connection.clone(); + let mut threadpool_builder = tokio_threadpool::Builder::new(); + threadpool_builder.max_blocking(config.exploit_config.max_running_exploit_task as usize); + let runtime = runtime::Builder::new() + .threadpool_builder(threadpool_builder) + .build()?; + let mut reactor = reactor::Core::new()?; - let task_executor = reactor.runtime().executor(); let db_pool = build_connection_pool(config.server.db.clone())?; - let (_server_handle, server) = OwlDaemon::new(db_pool, task_executor, config).listen( + let (_server_handle, server) = OwlDaemon::new(db_pool, runtime.executor(), config).listen( connection_string.try_first_socket_addr()?, &reactor.handle(), server::Options::default().max_payload_size(32_000_000), @@ -53,6 +61,9 @@ fn main_wrap() -> Result<(), Error> { info!("Starting Owl Daemon..."); reactor.run(server)?; + info!("RPC shut down..."); + info!("Waiting exploits..."); + runtime.shutdown_on_idle().wait()?; info!("Shutting down..."); Ok(()) From c9e2106b81f3f7ac4ea5da8d8bd5b02e1e25f668 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Wed, 22 Aug 2018 15:18:05 +0900 Subject: [PATCH 07/15] Change variable names and logging behavior --- owl-daemon/src/exploit.rs | 5 +++++ owl-daemon/src/handler/exploit.rs | 19 +++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/owl-daemon/src/exploit.rs b/owl-daemon/src/exploit.rs index 4a11992..57eeb9c 100644 --- a/owl-daemon/src/exploit.rs +++ b/owl-daemon/src/exploit.rs @@ -127,6 +127,7 @@ impl ExploitManager { pub fn exploit_future>( &self, db_pool: DbPool, + exploit_task_id: i32, exploit_name: T, entry_file: &str, target_info: TargetInfo, @@ -164,6 +165,10 @@ impl ExploitManager { Deadline::new( update(db_pool.clone(), (ExploitStatus::Running, String::new())) .into_future() + .and_then(move |_| { + info!(target: "exploit", "[ExploitTask] Started: {}", exploit_task_id); + Ok(()) + }) // run exploit .and_then(move |_| shell_command_runner(&full_command) .current_dir(exploit_directory) diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index c9aa8b1..b9b2aa5 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -368,8 +368,8 @@ fn update_exploit_consecutive_failure( match exploit_target { Ok(exploit_target) => { - let failures = exploit_target.consecutive_failure; - let accumulated_failures = failures + 1; + let failure_count = exploit_target.consecutive_failure; + let new_failure_count = failure_count + 1; let query = diesel::update( exploit_targets::table .filter(exploit_targets::exploit_id.eq(exploit_task.exploit_id)) @@ -379,17 +379,17 @@ fn update_exploit_consecutive_failure( ); if failed { - if failures < 0 { - info!(target: "exploit", "[ExploitTarget] Failure accumulation ignored: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, failures); + if failure_count < 0 { + info!(target: "exploit", "[ExploitTarget] Failure not counted: ({}, {})", exploit_task.exploit_id, service_provider.service_variant_id); Ok(0) } else { - info!(target: "exploit", "[ExploitTarget] Failure accumulated: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, accumulated_failures); + info!(target: "exploit", "[ExploitTarget] Failure count incremented: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, new_failure_count); Ok(query - .set(exploit_targets::consecutive_failure.eq(accumulated_failures)) + .set(exploit_targets::consecutive_failure.eq(new_failure_count)) .execute(con)?) } } else { - info!(target: "exploit", "[ExploitTarget] Failure reset: {}", exploit_task.exploit_id); + info!(target: "exploit", "[ExploitTarget] Failure count reset: {}", exploit_task.exploit_id); Ok(query .set(exploit_targets::consecutive_failure.eq(0)) .execute(con)?) @@ -397,7 +397,7 @@ fn update_exploit_consecutive_failure( }, Err(_) => { if failed { - info!(target: "exploit", "[ExploitTarget] Failure accumulated: {} - {} times", exploit_task.exploit_id, 1); + info!(target: "exploit", "[ExploitTarget] Failure count incremented: {} - {} times", exploit_task.exploit_id, 1); Ok(diesel::insert_into(exploit_targets::table) .values(ExploitTargetInsertable { exploit_id: exploit_task.exploit_id, @@ -434,8 +434,6 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), resource.config.exploit_config.default_retries, )?; - info!(target: "exploit", "[ExploitTask] Generated: {}", exploit_task.id); - let db_pool = resource.db_pool.clone(); let exploit_task_id = exploit_task.id; resource.task_executor.spawn( @@ -443,6 +441,7 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), .exploit_manager .exploit_future( resource.db_pool.clone(), + exploit.id, exploit.name.clone(), &exploit_attachment_name, target_info, From 32c4df6cae6d00992f15c2d1484b8927075aa6d4 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Wed, 22 Aug 2018 15:18:16 +0900 Subject: [PATCH 08/15] Update test_scenario files --- test_scenario/config.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test_scenario/config.toml b/test_scenario/config.toml index d5aa54b..3c5e21c 100644 --- a/test_scenario/config.toml +++ b/test_scenario/config.toml @@ -18,3 +18,5 @@ root_directory = "owl-exploit" auth_command = "python auth.py" default_retries = 4 default_timeout = 60 +failure_threshold = 9 +max_running_exploit_task = 8 From 83659d6477d8caef3ce768324d2099e1db605125 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Wed, 22 Aug 2018 15:22:10 +0900 Subject: [PATCH 09/15] Atomic update for consecutive failure --- owl-daemon/src/handler/exploit.rs | 116 ++++++++++++++++-------------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index b9b2aa5..bbc5482 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -353,63 +353,69 @@ fn update_exploit_consecutive_failure( con: &PgConnection, exploit_task_id: i32, failed: bool, -) -> Result { - let (exploit_task, service_provider) = exploit_tasks::table - .filter(exploit_tasks::id.eq(exploit_task_id)) - .inner_join(service_providers::table) - .first::<(ExploitTask, ServiceProvider)>(con)?; - - let exploit_target = exploit_targets::table - .find(( - &exploit_task.exploit_id, - &service_provider.service_variant_id, - )) - .first::(con); - - match exploit_target { - Ok(exploit_target) => { - let failure_count = exploit_target.consecutive_failure; - let new_failure_count = failure_count + 1; - let query = diesel::update( - exploit_targets::table - .filter(exploit_targets::exploit_id.eq(exploit_task.exploit_id)) - .filter( - exploit_targets::service_variant_id.eq(service_provider.service_variant_id), - ), - ); - - if failed { - if failure_count < 0 { - info!(target: "exploit", "[ExploitTarget] Failure not counted: ({}, {})", exploit_task.exploit_id, service_provider.service_variant_id); - Ok(0) +) -> Result<(), Error> { + con.transaction::<(), Error, _>(|| { + let (exploit_task, service_provider) = exploit_tasks::table + .filter(exploit_tasks::id.eq(exploit_task_id)) + .inner_join(service_providers::table) + .first::<(ExploitTask, ServiceProvider)>(con)?; + + let exploit_target = exploit_targets::table + .find(( + &exploit_task.exploit_id, + &service_provider.service_variant_id, + )) + .first::(con); + + match exploit_target { + Ok(exploit_target) => { + let failure_count = exploit_target.consecutive_failure; + let new_failure_count = failure_count + 1; + let query = diesel::update( + exploit_targets::table + .filter(exploit_targets::exploit_id.eq(exploit_task.exploit_id)) + .filter( + exploit_targets::service_variant_id + .eq(service_provider.service_variant_id), + ), + ); + + if failed { + if failure_count < 0 { + info!(target: "exploit", "[ExploitTarget] Failure not counted: ({}, {})", exploit_task.exploit_id, service_provider.service_variant_id); + Ok(()) + } else { + info!(target: "exploit", "[ExploitTarget] Failure count incremented: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, new_failure_count); + query + .set(exploit_targets::consecutive_failure.eq(new_failure_count)) + .execute(con)?; + Ok(()) + } } else { - info!(target: "exploit", "[ExploitTarget] Failure count incremented: ({}, {}) - {} times", exploit_task.exploit_id, service_provider.service_variant_id, new_failure_count); - Ok(query - .set(exploit_targets::consecutive_failure.eq(new_failure_count)) - .execute(con)?) + info!(target: "exploit", "[ExploitTarget] Failure count reset: {}", exploit_task.exploit_id); + query + .set(exploit_targets::consecutive_failure.eq(0)) + .execute(con)?; + Ok(()) } - } else { - info!(target: "exploit", "[ExploitTarget] Failure count reset: {}", exploit_task.exploit_id); - Ok(query - .set(exploit_targets::consecutive_failure.eq(0)) - .execute(con)?) - } - }, - Err(_) => { - if failed { - info!(target: "exploit", "[ExploitTarget] Failure count incremented: {} - {} times", exploit_task.exploit_id, 1); - Ok(diesel::insert_into(exploit_targets::table) - .values(ExploitTargetInsertable { - exploit_id: exploit_task.exploit_id, - service_variant_id: service_provider.service_variant_id, - consecutive_failure: 1, - }) - .execute(con)?) - } else { - Ok(0) - } - }, - } + }, + Err(_) => { + if failed { + info!(target: "exploit", "[ExploitTarget] Failure count incremented: {} - {} times", exploit_task.exploit_id, 1); + diesel::insert_into(exploit_targets::table) + .values(ExploitTargetInsertable { + exploit_id: exploit_task.exploit_id, + service_variant_id: service_provider.service_variant_id, + consecutive_failure: 1, + }) + .execute(con)?; + Ok(()) + } else { + Ok(()) + } + }, + } + }) } fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), Error> { From b745fa3fec3d70b4bafa2288b9903861164cd8c8 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Thu, 7 Feb 2019 20:46:16 +0900 Subject: [PATCH 10/15] Handle some auth failures neutral Related #54 --- owl-daemon/src/handler/exploit.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index bbc5482..097afd2 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -464,40 +464,41 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), .then(move |result| { if let Ok(con) = db_pool.get() { let con = &*con; - let failed = result.is_err(); - let exploit_update_message = result.unwrap_or_else(|err| { + let (exploit_update_message, failed) = result.map( + |exploit_update_message| (exploit_update_message, false) + ).unwrap_or_else(|err| { info!(target: "exploit", "[ExploitTask] Failed: {}", exploit_task.id); if let Error::ExploitError(err) = err { match err { ExploitError::ExploitProcessError(err) => { - (ExploitStatus::ExploitProcessError, err.to_string()) + ((ExploitStatus::ExploitProcessError, err.to_string()), true) }, ExploitError::ExploitReturnCodeNotZero { return_code, stderr, - } => ( + } => (( ExploitStatus::ExploitReturnCodeNotZero, format!("code {:?}: {}", return_code, stderr), - ), + ), true), ExploitError::ExploitTimeout(err) => { - (ExploitStatus::ExploitProcessError, err.to_string()) + ((ExploitStatus::ExploitProcessError, err.to_string()), true) }, ExploitError::AuthProcessError(err) => { - (ExploitStatus::AuthProcessError, err.to_string()) + ((ExploitStatus::AuthProcessError, err.to_string()), false) }, ExploitError::AuthReturnCodeNotZero { return_code, stderr, - } => ( + } => (( ExploitStatus::AuthReturnCodeNotZero, format!("code {:?}: {}", return_code, stderr), - ), + ), false), ExploitError::WrongFlag(flag) => { - (ExploitStatus::WrongFlag, flag) + ((ExploitStatus::WrongFlag, flag), true) }, } } else { - (ExploitStatus::UnknownFailure, err.to_string()) + ((ExploitStatus::UnknownFailure, err.to_string()), false) } }); @@ -521,7 +522,7 @@ pub fn run_exploit( let con: &PgConnection = &*resource.db_pool.get()?; let exploit_name = params.name; - let wait_for_exploit = params.wait; + let _wait_for_exploit = params.wait; let exploit = exploits::table .filter(exploits::name.eq(exploit_name)) From 91363a3e4f6ebd7601c8a0f28099086f70a3a81e Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Thu, 7 Feb 2019 20:48:57 +0900 Subject: [PATCH 11/15] Do not update cargo cli tools --- .circleci/config.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a997048..f63fef7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,10 +6,6 @@ jobs: - image: circleci/postgres:latest steps: - checkout - - run: - name: Update dependencies - command: | - cargo install-update -a - run: name: Setup database command: | @@ -32,10 +28,6 @@ jobs: - restore_cache: keys: - deps-{{ .Branch }} - - run: - name: Update dependencies - command: | - cargo install-update -a - save_cache: key: deps-{{ .Branch }}-{{ epoch }} paths: From 6b2c4151894d4de1add0a8cf141c5165da8d39f6 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Thu, 7 Feb 2019 20:55:22 +0900 Subject: [PATCH 12/15] No credential required in latest postgres image --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f63fef7..de24cc0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,7 +11,7 @@ jobs: command: | dockerize -wait tcp://localhost:5432 -timeout 1m cd owl-daemon - echo "DATABASE_URL=postgres://root:circle_test@localhost/owl_daemon" > .env + echo "DATABASE_URL=postgres://postgres@localhost/owl_daemon" > .env diesel database setup - run: name: Build @@ -37,7 +37,7 @@ jobs: command: | dockerize -wait tcp://localhost:5432 -timeout 1m cd owl-daemon - echo "DATABASE_URL=postgres://root:circle_test@localhost/owl_daemon" > .env + echo "DATABASE_URL=postgres://postgres@localhost/owl_daemon" > .env diesel database setup - restore_cache: keys: From f6b3fa492c059b2cd09651e8230e1a5385341ab6 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Thu, 7 Feb 2019 21:02:35 +0900 Subject: [PATCH 13/15] Executable projects should contain lock files --- .gitignore | 2 +- Cargo.lock | 1326 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1327 insertions(+), 1 deletion(-) create mode 100644 Cargo.lock diff --git a/.gitignore b/.gitignore index a8b31a8..759055c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock +# Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..fde28de --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1326 @@ +[[package]] +name = "aho-corasick" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "antidote" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "arrayref" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "arrayvec" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bincode" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytes" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "chrono" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "clap" +version = "2.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "diesel" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "diesel-derive-enum" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "diesel_derives" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "digest" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "dotenv" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "env_logger" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "heck" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "humantime" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "iovec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazycell" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.42" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memchr" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mio" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-named-pipes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio-uds" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "socket2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nodrop" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num_cpus" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "owl-cli" +version = "0.1.0" +dependencies = [ + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "owl-rpc 0.1.0", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "tarpc 0.12.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)", + "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "owl-daemon" +version = "0.1.0" +dependencies = [ + "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel-derive-enum 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "owl-rpc 0.1.0", + "r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "r2d2-diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "sha3 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tarpc 0.12.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)", + "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-process 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "owl-rpc" +version = "0.1.0" +dependencies = [ + "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "tarpc 0.12.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)", + "tarpc-plugins 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pq-sys" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quote" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "r2d2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "r2d2-diesel" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "redox_syscall" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scheduled-thread-pool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scoped-tls" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha3" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "keccak 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "shell-escape" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slab" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "slab" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "smallvec" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "socket2" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "strsim" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "syn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.13.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "synstructure" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "take" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "tarpc" +version = "0.12.0" +source = "git+https://github.com/PLUS-POSTECH/tarpc.git#f283a45e27beeb9159c5bc7854c99cda621cebd7" +dependencies = [ + "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "tarpc-plugins 0.4.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)", + "thread-pool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tarpc-plugins" +version = "0.4.0" +source = "git+https://github.com/PLUS-POSTECH/tarpc.git#f283a45e27beeb9159c5bc7854c99cda621cebd7" +dependencies = [ + "itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tarpc-plugins" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termcolor" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "wincolor 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termion" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread-pool" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "two-lock-queue 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-fs" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-process" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-signal 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-proto" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-service" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-signal" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-udp" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "toml" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "two-lock-queue" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-segmentation" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vcpkg" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "wincolor" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c6d463cbe7ed28720b5b489e7c083eeb8f90d08be2a0d6bb9e1ffea9ce1afa" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" +"checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f" +"checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" +"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" +"checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e" +"checksum bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2fb9e29e72fd6bc12071533d5dc7664cb01480c59406f656d7ac25c7bd8ff7" +"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" +"checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" +"checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" +"checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9" +"checksum bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e178b8e0e239e844b083d5a0d4a156b2654e67f9f80144d48398fcd736a24fb8" +"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275" +"checksum cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efe5c877e17a9c717a0bf3613b2709f723202c4e4675cc8f12926ded29bcb17e" +"checksum chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e48d85528df61dc964aa43c5f6ca681a19cfa74939b2348d204bd08a981f2fb0" +"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" +"checksum crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe8153ef04a7594ded05b427ffad46ddeaf22e63fd48d42b3e1e3bb4db07cae7" +"checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620" +"checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" +"checksum diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e71e7a348ae6064e86c4cf0709f0e4c3ef6f30e8e7d3dc05737164af4ebd3511" +"checksum diesel-derive-enum 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "adbaf5e1344edeedc4d1cead2dc3ce6fc4115bb26b3704c533b92717940f2fb5" +"checksum diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03bcaf77491f53e400d5ee3bdd57142ea4e1c47fe9217b3361ff9a76ca0e3d37" +"checksum digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b29c278aa8fd30796bd977169e8004b4aa88cdcd2f32a6eb22bc2d5d38df94a" +"checksum dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d0a1279c96732bc6800ce6337b6a614697b0e74ae058dc03c62ebeb78b4d86" +"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" +"checksum env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)" = "f4d7e69c283751083d53d01eac767407343b8b69c4bd70058e08adc2637cb257" +"checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9" +"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "884dbe32a6ae4cd7da5c6db9b78114449df9953b8d490c9d7e1b51720b922c62" +"checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" +"checksum heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea04fa3ead4e05e51a7c806fc07271fdbde4e246a6c6d1efd52e72230b771b82" +"checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e" +"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f58856976b776fedd95533137617a02fb25719f40e7d9b01c7043cd65474f450" +"checksum keccak 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fb497c35d362b6a331cfd94956a07fc2c78a4604cdbee844a81170386b996dd3" +"checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" +"checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1" +"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +"checksum log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "61bd98ae7f7b754bc53dca7d44b604f733c6bba044ea6f41bc8d89272d8161d2" +"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" +"checksum mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e374eff525ce1c5b7687c4cef63943e7686524a387933ad27ca7ec43779cb3" +"checksum mio-uds 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "84c7b5caa3a118a6e34dbac36504503b1e8dc5835e833306b9d6af0e05929f79" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum miow 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9224c91f82b3c47cf53dcf78dfaa20d6888fbcc5d272d5f2fcdf8a697f3c987d" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" +"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" +"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" +"checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" +"checksum pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda" +"checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" +"checksum proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "cccdc7557a98fe98453030f077df7f3a042052fae465bb61d2c2c41435cfd9b6" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" +"checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" +"checksum quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b71f9f575d55555aa9c06188be9d4e2bfc83ed02537948ac0d520c24d0419f1a" +"checksum r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f9078ca6a8a5568ed142083bb2f7dc9295b69d16f867ddcc9849e51b17d8db46" +"checksum r2d2-diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9c29bad92da76d02bc2c020452ebc3a3fe6fa74cfab91e711c43116e4fb1a3" +"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" +"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" +"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" +"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +"checksum regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5bbbea44c5490a1e84357ff28b7d518b4619a159fed5d25f6c1de2d19cc42814" +"checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d" +"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" +"checksum scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a2ff3fc5223829be817806c6441279c676e454cc7da608faf03b0ccc09d3889" +"checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfad05c8854584e5f72fb859385ecdfa03af69c3fd0572f0da2d4c95f060bdb" +"checksum serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "b719c6d5e9f73fbc37892246d5852333f040caa617b8873c6aced84bcb28e7bb" +"checksum sha3 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b64dcef59ed4290b9fb562b53df07f564690d6539e8ecdd4728cf392477530bc" +"checksum shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "170a13e64f2a51b77a45702ba77287f5c6829375b04a69cf2222acd17d0cfab9" +"checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" +"checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" +"checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" +"checksum socket2 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "962a516af4d3a7c272cb3a1d50a8cc4e5b41802e4ad54cfb7bee8ba61d37d703" +"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" +"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +"checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" +"checksum syn 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4bad7abdf6633f07c7046b90484f1d9dc055eca39f8c991177b1046ce61dba9a" +"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7" +"checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" +"checksum tarpc 0.12.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)" = "" +"checksum tarpc-plugins 0.4.0 (git+https://github.com/PLUS-POSTECH/tarpc.git)" = "" +"checksum tarpc-plugins 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ff938d8e035ac861c24661ab171759ecc099f638cd76d417fb8102ce0ae4533" +"checksum termcolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "722426c4a0539da2c4ffd9b419d90ad540b4cff4a053be9069c908d4d07e2836" +"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" +"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" +"checksum thread-pool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "521ce173ddcb414aff269069162a767bd6503470f8dbd00cf6b576059b143c94" +"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" +"checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" +"checksum tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee337e5f4e501fc32966fec6fe0ca0cc1c237b0b1b14a335f8bfe3c5f06e286" +"checksum tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "881e9645b81c2ce95fcb799ded2c29ffb9f25ef5bef909089a420e5961dd8ccb" +"checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" +"checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" +"checksum tokio-fs 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "40697ecbea5660df15b15d50a077386477d2f6a35002adf01ce76ff9dd9dce48" +"checksum tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a5c9635ee806f26d302b8baa1e145689a280d8f5aa8d0552e7344808da54cc21" +"checksum tokio-process 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0832648d1ff7ca42c06ca45dc76797b92c56500de828e33c77276fa1449947b6" +"checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" +"checksum tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e00ec63bbec2c97ce1178cb0587b2c438b2f6b09d3ee54a33c45a9cf0d530810" +"checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" +"checksum tokio-signal 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "342d088c63623f63eada591e065778038c63b516939530db2aa09a8df9118507" +"checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" +"checksum tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "24ab84f574027b0e875378f31575cf175360891919e93a3490f07e76e00e4efb" +"checksum tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "028b94314065b90f026a21826cffd62a4e40a92cda3e5c069cc7b02e5945f5e9" +"checksum tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43eb534af6e8f37d43ab1b612660df14755c42bd003c5f8d2475ee78cc4600c0" +"checksum toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a0263c6c02c4db6c8f7681f9fd35e90de799ebd4cfdeab77a38f4ff6b3d8c0d9" +"checksum two-lock-queue 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bdabfad4e8dcb814adfc10fbe446a7388a7e0eea8453d419dbc272101dc82fa9" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" +"checksum unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa6024fc12ddfd1c6dbc14a80fa2324d4568849869b779f6bd37e5e4c03344d1" +"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" +"checksum vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cbe533e138811704c0e3cbde65a818b35d3240409b4346256c5ede403e082474" +"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum wincolor 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b9dc3aa9dcda98b5a16150c54619c1ead22e3d3a5d458778ae914be760aa981a" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" From 5d4fba4e46b5d8861c6f3d5f6955a710ad2201fa Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Wed, 13 Feb 2019 00:53:50 +0900 Subject: [PATCH 14/15] Apply a PR change request arg_match_numeric_none -> parse_numeric_or_none arg_match_numeric_disable -> parse_numeric_or_disable --- owl-cli/src/exploit.rs | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/owl-cli/src/exploit.rs b/owl-cli/src/exploit.rs index e9a61b7..fbeb24e 100644 --- a/owl-cli/src/exploit.rs +++ b/owl-cli/src/exploit.rs @@ -8,20 +8,18 @@ use owl_rpc::model::exploit::*; use owl_rpc::model::FileEntry; use SharedParam; -fn arg_match_numeric_none(matches: &ArgMatches, name: &str) -> Result, Error> { - if matches.is_present(name) && matches.value_of(name).unwrap() != "none" { - Ok(Some(matches.value_of(name).unwrap().parse::()?)) - } else { - Ok(None) - } +fn parse_numeric_or_none(value: &str) -> Result, Error> { + Ok(match value { + "none" => None, + value => Some(value.parse::()?), + }) } -fn arg_match_numeric_disable(matches: &ArgMatches, name: &str) -> Result { - if matches.is_present(name) && matches.value_of(name).unwrap() != "disable" { - Ok(matches.value_of(name).unwrap().parse::()?) - } else { - Ok(-1) - } +fn parse_numeric_or_disable(value: &str) -> Result { + Ok(match value { + "disable" => -1, + value => value.parse::()?, + }) } pub fn exploit_command() -> App<'static, 'static> { @@ -151,8 +149,8 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< ExploitAddParams { description: matches.value_of("description").unwrap_or("").to_string(), target_service: matches.value_of("target").unwrap().to_string(), - max_retries: arg_match_numeric_none(matches, "max-retries")?, - timeout: arg_match_numeric_none(matches, "timeout")?, + max_retries: parse_numeric_or_none(matches.value_of("max-retries").unwrap_or("none"))?, + timeout: parse_numeric_or_none(matches.value_of("timeout").unwrap_or("none"))?, skip_auth: match matches.value_of("skip-auth") { Some("true") => true, _ => false, @@ -218,12 +216,12 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< target_service: matches.value_of("target").map(ToString::to_string), enabled: None, max_retries: if matches.is_present("max-retries") { - Some(arg_match_numeric_none(matches, "max-retries")?) + Some(parse_numeric_or_none(matches.value_of("max-retries").unwrap())?) } else { None }, timeout: if matches.is_present("timeout") { - Some(arg_match_numeric_none(matches, "timeout")?) + Some(parse_numeric_or_none(matches.value_of("timeout").unwrap())?) } else { None }, @@ -306,7 +304,7 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< .value_of("service_variant_name") .unwrap() .to_string(), - failure: arg_match_numeric_disable(matches, "failure")?, + failure: parse_numeric_or_disable(matches.value_of("failure").unwrap_or("disable"))?, }, )?; From 091ee833c604c6eb4570e412d1e9b0cd13184199 Mon Sep 17 00:00:00 2001 From: Kangsu Kim Date: Wed, 13 Feb 2019 01:05:46 +0900 Subject: [PATCH 15/15] Apply some PR change requests failure_count -> current_failure_count Indentation issues Log message improvements --- owl-cli/src/exploit.rs | 12 +++-- owl-daemon/src/handler/exploit.rs | 87 +++++++++++++++++-------------- owl-daemon/src/main.rs | 5 +- 3 files changed, 59 insertions(+), 45 deletions(-) diff --git a/owl-cli/src/exploit.rs b/owl-cli/src/exploit.rs index fbeb24e..f822e38 100644 --- a/owl-cli/src/exploit.rs +++ b/owl-cli/src/exploit.rs @@ -149,7 +149,9 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< ExploitAddParams { description: matches.value_of("description").unwrap_or("").to_string(), target_service: matches.value_of("target").unwrap().to_string(), - max_retries: parse_numeric_or_none(matches.value_of("max-retries").unwrap_or("none"))?, + max_retries: parse_numeric_or_none( + matches.value_of("max-retries").unwrap_or("none"), + )?, timeout: parse_numeric_or_none(matches.value_of("timeout").unwrap_or("none"))?, skip_auth: match matches.value_of("skip-auth") { Some("true") => true, @@ -216,7 +218,9 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< target_service: matches.value_of("target").map(ToString::to_string), enabled: None, max_retries: if matches.is_present("max-retries") { - Some(parse_numeric_or_none(matches.value_of("max-retries").unwrap())?) + Some(parse_numeric_or_none( + matches.value_of("max-retries").unwrap(), + )?) } else { None }, @@ -304,7 +308,9 @@ pub fn exploit_match(matches: &ArgMatches, shared_param: SharedParam) -> Result< .value_of("service_variant_name") .unwrap() .to_string(), - failure: parse_numeric_or_disable(matches.value_of("failure").unwrap_or("disable"))?, + failure: parse_numeric_or_disable( + matches.value_of("failure").unwrap_or("disable"), + )?, }, )?; diff --git a/owl-daemon/src/handler/exploit.rs b/owl-daemon/src/handler/exploit.rs index 097afd2..14c3305 100644 --- a/owl-daemon/src/handler/exploit.rs +++ b/owl-daemon/src/handler/exploit.rs @@ -369,8 +369,8 @@ fn update_exploit_consecutive_failure( match exploit_target { Ok(exploit_target) => { - let failure_count = exploit_target.consecutive_failure; - let new_failure_count = failure_count + 1; + let current_failure_count = exploit_target.consecutive_failure; + let new_failure_count = current_failure_count + 1; let query = diesel::update( exploit_targets::table .filter(exploit_targets::exploit_id.eq(exploit_task.exploit_id)) @@ -381,7 +381,7 @@ fn update_exploit_consecutive_failure( ); if failed { - if failure_count < 0 { + if current_failure_count < 0 { info!(target: "exploit", "[ExploitTarget] Failure not counted: ({}, {})", exploit_task.exploit_id, service_provider.service_variant_id); Ok(()) } else { @@ -464,43 +464,52 @@ fn add_to_task_queue(resource: &DaemonResource, exploit: &Exploit) -> Result<(), .then(move |result| { if let Ok(con) = db_pool.get() { let con = &*con; - let (exploit_update_message, failed) = result.map( - |exploit_update_message| (exploit_update_message, false) - ).unwrap_or_else(|err| { - info!(target: "exploit", "[ExploitTask] Failed: {}", exploit_task.id); - if let Error::ExploitError(err) = err { - match err { - ExploitError::ExploitProcessError(err) => { - ((ExploitStatus::ExploitProcessError, err.to_string()), true) - }, - ExploitError::ExploitReturnCodeNotZero { - return_code, - stderr, - } => (( - ExploitStatus::ExploitReturnCodeNotZero, - format!("code {:?}: {}", return_code, stderr), - ), true), - ExploitError::ExploitTimeout(err) => { - ((ExploitStatus::ExploitProcessError, err.to_string()), true) - }, - ExploitError::AuthProcessError(err) => { - ((ExploitStatus::AuthProcessError, err.to_string()), false) - }, - ExploitError::AuthReturnCodeNotZero { - return_code, - stderr, - } => (( - ExploitStatus::AuthReturnCodeNotZero, - format!("code {:?}: {}", return_code, stderr), - ), false), - ExploitError::WrongFlag(flag) => { - ((ExploitStatus::WrongFlag, flag), true) - }, + let (exploit_update_message, failed) = result + .map(|exploit_update_message| (exploit_update_message, false)) + .unwrap_or_else(|err| { + info!(target: "exploit", "[ExploitTask] Failed: {}", exploit_task.id); + if let Error::ExploitError(err) = err { + match err { + ExploitError::ExploitProcessError(err) => ( + (ExploitStatus::ExploitProcessError, err.to_string()), + true, + ), + ExploitError::ExploitReturnCodeNotZero { + return_code, + stderr, + } => ( + ( + ExploitStatus::ExploitReturnCodeNotZero, + format!("code {:?}: {}", return_code, stderr), + ), + true, + ), + ExploitError::ExploitTimeout(err) => ( + (ExploitStatus::ExploitProcessError, err.to_string()), + true, + ), + ExploitError::AuthProcessError(err) => ( + (ExploitStatus::AuthProcessError, err.to_string()), + false, + ), + ExploitError::AuthReturnCodeNotZero { + return_code, + stderr, + } => ( + ( + ExploitStatus::AuthReturnCodeNotZero, + format!("code {:?}: {}", return_code, stderr), + ), + false, + ), + ExploitError::WrongFlag(flag) => { + ((ExploitStatus::WrongFlag, flag), true) + }, + } + } else { + ((ExploitStatus::UnknownFailure, err.to_string()), false) } - } else { - ((ExploitStatus::UnknownFailure, err.to_string()), false) - } - }); + }); update_exploit_status(con, exploit_task_id, exploit_update_message).is_ok(); update_exploit_consecutive_failure(con, exploit_task_id, failed).is_ok(); diff --git a/owl-daemon/src/main.rs b/owl-daemon/src/main.rs index f432931..2ac0be9 100644 --- a/owl-daemon/src/main.rs +++ b/owl-daemon/src/main.rs @@ -59,10 +59,9 @@ fn main_wrap() -> Result<(), Error> { server::Options::default().max_payload_size(32_000_000), )?; - info!("Starting Owl Daemon..."); + info!("Starting Owl daemon..."); reactor.run(server)?; - info!("RPC shut down..."); - info!("Waiting exploits..."); + info!("RPC server has shut down. Waiting for running exploits..."); runtime.shutdown_on_idle().wait()?; info!("Shutting down...");