some reordering into server.go; added effective group changing;

This commit is contained in:
2026-04-03 15:21:37 +02:00
parent 587ea5ba29
commit 414093242d
2 changed files with 41 additions and 38 deletions
+40 -38
View File
@@ -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 {
+1
View File
@@ -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