From 1af4dd8ae334638adb230925734f6e097e689bbc Mon Sep 17 00:00:00 2001 From: Yaroslav Dynnikov <yaroslav.dynnikov@gmail.com> Date: Mon, 13 Dec 2021 13:30:18 +0300 Subject: [PATCH] Grant user role before starting listening --- picolib/lib.rs | 25 +++++++++++++++++-------- picolib/tarantool.rs | 16 +++++++++++----- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/picolib/lib.rs b/picolib/lib.rs index ed125713ee..a6287fa225 100644 --- a/picolib/lib.rs +++ b/picolib/lib.rs @@ -36,12 +36,10 @@ fn main_run() { tarantool::version() ); - let mut cfg = tarantool::Cfg::default(); - - std::env::var("PICODATA_LISTEN").ok().and_then(|v| { - cfg.listen = v.clone(); - Some(v) - }); + let mut cfg = tarantool::Cfg { + listen: None, + ..Default::default() + }; std::env::var("PICODATA_DATA_DIR").ok().and_then(|v| { std::fs::create_dir_all(&v).unwrap(); @@ -50,6 +48,17 @@ fn main_run() { Some(v) }); - println!("{:?}", cfg); - tarantool::set_cfg(cfg); + tarantool::set_cfg(&cfg); + tarantool::eval( + r#" + box.schema.user.grant('guest', 'super', nil, nil, {if_not_exists = true}) + "#, + ); + + std::env::var("PICODATA_LISTEN").ok().and_then(|v| { + cfg.listen = Some(v.clone()); + Some(v) + }); + + tarantool::set_cfg(&cfg); } diff --git a/picolib/tarantool.rs b/picolib/tarantool.rs index 9304ac2dba..6cd9da54a7 100644 --- a/picolib/tarantool.rs +++ b/picolib/tarantool.rs @@ -32,7 +32,7 @@ fn tarantool_L() -> Lua { #[derive(Clone, Debug, hlua::Push, hlua::LuaRead, PartialEq)] pub struct Cfg { - pub listen: String, + pub listen: Option<String>, pub wal_dir: String, pub memtx_dir: String, } @@ -40,7 +40,7 @@ pub struct Cfg { impl Default for Cfg { fn default() -> Self { Self { - listen: "3301".to_owned(), + listen: Some("3301".to_owned()), wal_dir: ".".to_owned(), memtx_dir: ".".to_owned(), } @@ -50,15 +50,21 @@ impl Default for Cfg { #[allow(dead_code)] pub fn cfg() -> Option<Cfg> { let l = tarantool_L(); - let cfg: Result<Cfg, _> = l.execute("return box.cfg"); + let cfg: Result<Cfg, _> = l.eval("return box.cfg"); match cfg { Ok(v) => Some(v), Err(_) => None, } } -pub fn set_cfg(cfg: Cfg) { +pub fn set_cfg(cfg: &Cfg) { let l = tarantool_L(); - let box_cfg = LuaFunction::load(l, "box.cfg(...)").unwrap(); + let box_cfg = LuaFunction::load(l, "return box.cfg(...)").unwrap(); box_cfg.call_with_args(cfg).unwrap() } + +pub fn eval(code: &str) { + let l = tarantool_L(); + let f = LuaFunction::load(l, code).unwrap(); + f.call().unwrap() +} -- GitLab