diff --git a/extra/dist/tarantoolctl b/extra/dist/tarantoolctl index 2a4ba43c3f3d12c9b8e5ca8512bfb5e579743419..e86358e7b83229d8633fd9d3f7b6ea9bacb13c47 100755 --- a/extra/dist/tarantoolctl +++ b/extra/dist/tarantoolctl @@ -106,7 +106,27 @@ local fiber = require 'fiber' local digest = require 'digest' local urilib = require 'uri' -ffi.cdef[[ int kill(int pid, int sig); ]] +ffi.cdef[[ +int kill(int pid, int sig); +struct passwd { + char *pw_name; /* username */ + char *pw_passwd; /* user password */ + int pw_uid; /* user ID */ + int pw_gid; /* group ID */ + char *pw_gecos; /* user information */ + char *pw_dir; /* home directory */ + char *pw_shell; /* shell program */ +}; +struct group{ + char *gr_name; + char *gr_passwd; + int gr_gid; + char **gr_mem; +}; +struct passwd *getpwnam(const char *name); +struct group *getgrgid(int gid); +int strlen(char*); +]] local available_commands = { 'start', @@ -236,6 +256,7 @@ end -- System-wide default file may be missing, this is OK, -- we'll assume built-in defaults -- +local group_name function load_default_file(default_file) if default_file then dofile(default_file) @@ -268,6 +289,12 @@ function load_default_file(default_file) if not instance_dir then instance_dir = '/etc/tarantool/instances.enabled' end + -- get user data + local user_data = ffi.C.getpwnam(ffi.cast('const char*', d.username)) + + -- get group data + local group = ffi.C.getgrgid(user_data.pw_gid) + group_name = ffi.string(group.gr_name, ffi.C.strlen(group.gr_name)) end if instance_dir == nil then @@ -310,9 +337,9 @@ local function mkdir(dirname) os.exit(-1) end - if not usermode and not fio.chown(dirname, default_cfg.username, default_cfg.username) then + if not usermode and not fio.chown(dirname, default_cfg.username, group_name) then log.error("Can't chown(%s, %s, %s): %s", - default_cfg.username, default_cfg.username, dirname, errno.strerror()) + default_cfg.username, group_name, dirname, errno.strerror()) end end diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 7561d1028976234737e9df8bc2a409bd5ecb0820..a107307187ab9087cb1159fd936f4a63b64c3b9e 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -56,7 +56,7 @@ local default_cfg = { custom_proc_title = nil, pid_file = nil, background = false, - username = nil , + username = nil, coredump = false, -- snapshot_daemon