From 414093242d3717ddfb63cf3d8fabcb13bb2ed616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 3 Apr 2026 15:21:37 +0200 Subject: [PATCH] some reordering into server.go; added effective group changing; --- app/server/server.go | 78 +++++++++++++++++----------------- cmd/mstored/starter/starter.go | 1 + 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/app/server/server.go b/app/server/server.go index 07ad3f7..ed00faf 100644 --- a/app/server/server.go +++ b/app/server/server.go @@ -113,7 +113,7 @@ func (srv *Server) Configure() error { return err } -func (srv *Server) WriteStat() error { +func (srv *Server) writeStat() error { // Write status file var err error statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml") @@ -128,7 +128,7 @@ func (srv *Server) WriteStat() error { return err } -func (srv *Server) ReadStat() error { +func (srv *Server) readStat() error { var err error // Read state file statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml") @@ -148,10 +148,7 @@ func (srv *Server) ReadStat() error { func (srv *Server) Build() error { var err error - srv.logg.Infof("Server building") - - confDump := srv.conf.String() - srv.logg.Infof("Current server configuration is:\n%s\n", confDump) + //srv.logg.Infof("Server building") usr, err := user.Lookup(srv.conf.RunUser) if err != nil { @@ -168,6 +165,20 @@ func (srv *Server) Build() error { uid := int(uid64) gid := int(gid64) + // Creating datadir + datadir := srv.conf.Datadir + if !auxtool.DirExists(datadir) { // TODO: check access to dir + srv.logg.Infof("Creating data directory %s ", datadir) + err = os.MkdirAll(datadir, 0750) + if err != nil { + return err + } + } + err = os.Chown(datadir, uid, gid) + if err != nil { + return err + } + if srv.conf.AsDaemon { logdir := filepath.Dir(srv.conf.Logpath) srv.logg.Infof("Creating log directory %s", logdir) @@ -189,25 +200,28 @@ func (srv *Server) Build() error { if err != nil { return err } - } - - // Creating datadir - datadir := srv.conf.Datadir - if !auxtool.DirExists(datadir) { // TODO: check access to dir - srv.logg.Infof("Creating data directory %s ", datadir) - err = os.MkdirAll(datadir, 0750) + // Redirect stderr and stout + logFile, err := os.OpenFile(srv.conf.Logpath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0640) if err != nil { return err } + err = syscall.Dup2(int(logFile.Fd()), int(os.Stdout.Fd())) + if err != nil { + return err + } + err = syscall.Dup2(int(logFile.Fd()), int(os.Stderr.Fd())) + if err != nil { + return err + } + srv.logf = logFile } - err = os.Chown(datadir, uid, gid) - if err != nil { - return err - } + + confDump := srv.conf.String() + srv.logg.Infof("Current server configuration is:\n%s\n", confDump) // Read state file srv.logg.Infof("Reading server status") - err = srv.ReadStat() + err = srv.readStat() if err != nil { return err } @@ -218,7 +232,6 @@ func (srv *Server) Build() error { if err != nil { return err } - // Creating storage dir srv.logg.Infof("Creating storage directory") datadir = srv.conf.Database.Basepath @@ -239,12 +252,15 @@ func (srv *Server) Build() error { } srv.listen = listener - // Change effective user + // Change effective user amd group err = syscall.Setuid(uid) if err != nil { return err } - + err = syscall.Setgid(gid) + if err != nil { + return err + } uidstr := strconv.FormatInt(int64(syscall.Geteuid()), 10) usr, err = user.LookupId(uidstr) if err != nil { @@ -272,7 +288,7 @@ func (srv *Server) Build() error { srv.stat.SchemeCreated = true srv.stat.SchemeCreatedAt = auxtool.TimeNow() srv.logg.Infof("Writing server status") - err = srv.WriteStat() + err = srv.writeStat() if err != nil { return err } @@ -287,7 +303,7 @@ func (srv *Server) Build() error { srv.stat.AnonymousCreated = true srv.stat.AnonymousCreatedAt = auxtool.TimeNow() srv.logg.Infof("Writing server status") - err = srv.WriteStat() + err = srv.writeStat() if err != nil { return err } @@ -302,7 +318,7 @@ func (srv *Server) Build() error { srv.stat.InituserCreated = true srv.logg.Infof("Writing server status") - err = srv.WriteStat() + err = srv.writeStat() if err != nil { return err } @@ -386,20 +402,6 @@ func (srv *Server) Run() error { if err != nil { return err } - // Redirect stderr and stout - logFile, err := os.OpenFile(srv.conf.Logpath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0640) - if err != nil { - return err - } - err = syscall.Dup2(int(logFile.Fd()), int(os.Stdout.Fd())) - if err != nil { - return err - } - err = syscall.Dup2(int(logFile.Fd()), int(os.Stderr.Fd())) - if err != nil { - return err - } - srv.logf = logFile // Write process ID pidFile, err := os.OpenFile(srv.conf.Runpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0640) if err != nil { diff --git a/cmd/mstored/starter/starter.go b/cmd/mstored/starter/starter.go index 1124627..99ff87b 100644 --- a/cmd/mstored/starter/starter.go +++ b/cmd/mstored/starter/starter.go @@ -57,6 +57,7 @@ func (sta *Starter) run(cmd *cobra.Command, args []string) error { if err != nil { return err } + err = srv.Build() if err != nil { return err