diff --git a/picolib/lib.rs b/picolib/lib.rs
index ed125713ee26bb04762a7d834f2f518c678fbab5..a6287fa2257f3202ac5b41b27a256bab80b481c7 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 9304ac2dba81d7fe05f892c78ab8c35fe14250ad..6cd9da54a715fb2a03a0c50254b38ec14e1fb34c 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()
+}