Keep setuid/setgid syscalls in main()
git-svn-id: file:///srv/svn/repo/marisa/trunk@37 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
18
partage.go
18
partage.go
@@ -265,10 +265,10 @@ func parseconfig(file string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dropprivilege(username string, groupname string) error {
|
func usergroupids(username string, groupname string) (int, int, error) {
|
||||||
u, err := user.Lookup(username)
|
u, err := user.Lookup(username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return -1, -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
uid, _ := strconv.Atoi(u.Uid)
|
uid, _ := strconv.Atoi(u.Uid)
|
||||||
@@ -277,15 +277,12 @@ func dropprivilege(username string, groupname string) error {
|
|||||||
if conf.group != "" {
|
if conf.group != "" {
|
||||||
g, err := user.LookupGroup(groupname)
|
g, err := user.LookupGroup(groupname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return uid, -1, err
|
||||||
}
|
}
|
||||||
gid, _ = strconv.Atoi(g.Gid)
|
gid, _ = strconv.Atoi(g.Gid)
|
||||||
}
|
}
|
||||||
|
|
||||||
syscall.Setuid(uid)
|
return uid, gid, nil
|
||||||
syscall.Setgid(gid)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -325,7 +322,12 @@ func main() {
|
|||||||
if verbose {
|
if verbose {
|
||||||
log.Printf("Dropping privileges to %s", conf.user)
|
log.Printf("Dropping privileges to %s", conf.user)
|
||||||
}
|
}
|
||||||
dropprivilege(conf.user, conf.group)
|
uid, gid, err := usergroupids(conf.user, conf.group)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
syscall.Setuid(uid)
|
||||||
|
syscall.Setgid(gid)
|
||||||
}
|
}
|
||||||
|
|
||||||
http.HandleFunc("/", uploader)
|
http.HandleFunc("/", uploader)
|
||||||
|
|||||||
Reference in New Issue
Block a user