some reordering into server.go; added effective group changing;
This commit is contained in:
+40
-38
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user