some reordering into server.go; added effective group changing;
This commit is contained in:
+42
-40
@@ -113,7 +113,7 @@ func (srv *Server) Configure() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) WriteStat() error {
|
func (srv *Server) writeStat() error {
|
||||||
// Write status file
|
// Write status file
|
||||||
var err error
|
var err error
|
||||||
statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml")
|
statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml")
|
||||||
@@ -128,7 +128,7 @@ func (srv *Server) WriteStat() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) ReadStat() error {
|
func (srv *Server) readStat() error {
|
||||||
var err error
|
var err error
|
||||||
// Read state file
|
// Read state file
|
||||||
statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml")
|
statefilePath := filepath.Join(srv.conf.Datadir, "server.yaml")
|
||||||
@@ -148,10 +148,7 @@ func (srv *Server) ReadStat() error {
|
|||||||
|
|
||||||
func (srv *Server) Build() error {
|
func (srv *Server) Build() error {
|
||||||
var err error
|
var err error
|
||||||
srv.logg.Infof("Server building")
|
//srv.logg.Infof("Server building")
|
||||||
|
|
||||||
confDump := srv.conf.String()
|
|
||||||
srv.logg.Infof("Current server configuration is:\n%s\n", confDump)
|
|
||||||
|
|
||||||
usr, err := user.Lookup(srv.conf.RunUser)
|
usr, err := user.Lookup(srv.conf.RunUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -168,6 +165,20 @@ func (srv *Server) Build() error {
|
|||||||
uid := int(uid64)
|
uid := int(uid64)
|
||||||
gid := int(gid64)
|
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 {
|
if srv.conf.AsDaemon {
|
||||||
logdir := filepath.Dir(srv.conf.Logpath)
|
logdir := filepath.Dir(srv.conf.Logpath)
|
||||||
srv.logg.Infof("Creating log directory %s", logdir)
|
srv.logg.Infof("Creating log directory %s", logdir)
|
||||||
@@ -189,25 +200,28 @@ func (srv *Server) Build() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creating datadir
|
confDump := srv.conf.String()
|
||||||
datadir := srv.conf.Datadir
|
srv.logg.Infof("Current server configuration is:\n%s\n", confDump)
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read state file
|
// Read state file
|
||||||
srv.logg.Infof("Reading server status")
|
srv.logg.Infof("Reading server status")
|
||||||
err = srv.ReadStat()
|
err = srv.readStat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -218,7 +232,6 @@ func (srv *Server) Build() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creating storage dir
|
// Creating storage dir
|
||||||
srv.logg.Infof("Creating storage directory")
|
srv.logg.Infof("Creating storage directory")
|
||||||
datadir = srv.conf.Database.Basepath
|
datadir = srv.conf.Database.Basepath
|
||||||
@@ -239,12 +252,15 @@ func (srv *Server) Build() error {
|
|||||||
}
|
}
|
||||||
srv.listen = listener
|
srv.listen = listener
|
||||||
|
|
||||||
// Change effective user
|
// Change effective user amd group
|
||||||
err = syscall.Setuid(uid)
|
err = syscall.Setuid(uid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
err = syscall.Setgid(gid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
uidstr := strconv.FormatInt(int64(syscall.Geteuid()), 10)
|
uidstr := strconv.FormatInt(int64(syscall.Geteuid()), 10)
|
||||||
usr, err = user.LookupId(uidstr)
|
usr, err = user.LookupId(uidstr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -272,7 +288,7 @@ func (srv *Server) Build() error {
|
|||||||
srv.stat.SchemeCreated = true
|
srv.stat.SchemeCreated = true
|
||||||
srv.stat.SchemeCreatedAt = auxtool.TimeNow()
|
srv.stat.SchemeCreatedAt = auxtool.TimeNow()
|
||||||
srv.logg.Infof("Writing server status")
|
srv.logg.Infof("Writing server status")
|
||||||
err = srv.WriteStat()
|
err = srv.writeStat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -287,7 +303,7 @@ func (srv *Server) Build() error {
|
|||||||
srv.stat.AnonymousCreated = true
|
srv.stat.AnonymousCreated = true
|
||||||
srv.stat.AnonymousCreatedAt = auxtool.TimeNow()
|
srv.stat.AnonymousCreatedAt = auxtool.TimeNow()
|
||||||
srv.logg.Infof("Writing server status")
|
srv.logg.Infof("Writing server status")
|
||||||
err = srv.WriteStat()
|
err = srv.writeStat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -302,7 +318,7 @@ func (srv *Server) Build() error {
|
|||||||
srv.stat.InituserCreated = true
|
srv.stat.InituserCreated = true
|
||||||
|
|
||||||
srv.logg.Infof("Writing server status")
|
srv.logg.Infof("Writing server status")
|
||||||
err = srv.WriteStat()
|
err = srv.writeStat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -386,20 +402,6 @@ func (srv *Server) Run() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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
|
// Write process ID
|
||||||
pidFile, err := os.OpenFile(srv.conf.Runpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0640)
|
pidFile, err := os.OpenFile(srv.conf.Runpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0640)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ func (sta *Starter) run(cmd *cobra.Command, args []string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = srv.Build()
|
err = srv.Build()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user