Move parsing and privilege drop out of main()

git-svn-id: file:///srv/svn/repo/marisa/trunk@34 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
dev
2021-10-19 16:04:07 +00:00
parent 46c647080b
commit f17001584d

View File

@@ -242,33 +242,10 @@ func uploader(w http.ResponseWriter, r *http.Request) {
}
}
func main() {
var file string
flag.StringVar(&file, "f", "", "Configuration file")
flag.BoolVar(&verbose, "v", false, "Verbose logging")
flag.Parse()
/* default values */
conf.bind = "0.0.0.0:8080"
conf.baseuri = "http://127.0.0.1:8080"
conf.rootdir = "/htdocs"
conf.tmplpath = "/htdocs/templates"
conf.filepath = "/htdocs/files"
conf.metapath = "/htdocs/meta"
conf.filectx = "/f/"
conf.metactx = "/m/"
conf.maxsize = 34359738368
conf.expiry = 86400
if file != "" {
if verbose {
log.Printf("Reading configuration %s", file)
}
func parseconfig(file string) error {
cfg, err := ini.Load(file)
if err != nil {
fmt.Println(err)
return
return err
}
conf.bind = cfg.Section("").Key("bind").String()
@@ -284,6 +261,57 @@ func main() {
conf.tmplpath = cfg.Section("").Key("tmplpath").String()
conf.maxsize, _ = cfg.Section("").Key("maxsize").Int64()
conf.expiry, _ = cfg.Section("").Key("expiry").Int64()
return nil
}
func dropprivilege(username string, groupname string) error {
u, err := user.Lookup(username)
if err != nil {
return err
}
uid, _ := strconv.Atoi(u.Uid)
gid, _ := strconv.Atoi(u.Gid)
if conf.group != "" {
g, err := user.LookupGroup(groupname)
if err != nil {
return err
}
gid, _ = strconv.Atoi(g.Gid)
}
syscall.Setuid(uid)
syscall.Setgid(gid)
return nil
}
func main() {
var configfile string
/* default values */
conf.bind = "0.0.0.0:8080"
conf.baseuri = "http://127.0.0.1:8080"
conf.rootdir = "/htdocs"
conf.tmplpath = "/htdocs/templates"
conf.filepath = "/htdocs/files"
conf.metapath = "/htdocs/meta"
conf.filectx = "/f/"
conf.metactx = "/m/"
conf.maxsize = 34359738368
conf.expiry = 86400
flag.StringVar(&configfile, "f", "", "Configuration file")
flag.BoolVar(&verbose, "v", false, "Verbose logging")
flag.Parse()
if configfile != "" {
if verbose {
log.Printf("Reading configuration %s", configfile)
}
parseconfig(configfile)
}
if conf.chroot != "" {
@@ -294,30 +322,10 @@ func main() {
}
if conf.user != "" {
u, err := user.Lookup(conf.user)
if err != nil {
fmt.Println(err)
return
}
uid, _ := strconv.Atoi(u.Uid)
gid, _ := strconv.Atoi(u.Gid)
if conf.group != "" {
g, err := user.LookupGroup(conf.group)
if err != nil {
fmt.Println(err)
return
}
gid, _ = strconv.Atoi(g.Gid)
}
if verbose {
log.Printf("Dropping privileges to %s", conf.user)
}
syscall.Setuid(uid)
syscall.Setgid(gid)
dropprivilege(conf.user, conf.group)
}
http.HandleFunc("/", uploader)