mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 18:35:44 +03:00
* helpers: lockfree lookup of nobody user on linux and darwin This PR continues the nobody user lookup saga, by making the nobody user lookup lock-free on linux and darwin. By doing the lookup in an init block this originally broke on Windows, where we must avoid doing the lookup at all. We can get around that breakage by only doing the lookup on linux/darwin where the nobody user is going to exist. Also return the nobody user by value so that a copy is created that cannot be modified by callers of Nobody(). * helper: move nobody code into unix file
33 lines
728 B
Go
33 lines
728 B
Go
package users
|
|
|
|
import (
|
|
"os/user"
|
|
"sync"
|
|
)
|
|
|
|
// lock is used to serialize all user lookup at the process level, because
|
|
// some NSS implementations are not concurrency safe
|
|
var lock sync.Mutex
|
|
|
|
// Lookup username while holding a global process lock.
|
|
func Lookup(username string) (*user.User, error) {
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
return user.Lookup(username)
|
|
}
|
|
|
|
// LookupGroupId while holding a global process lock.
|
|
func LookupGroupId(gid string) (*user.Group, error) {
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
return user.LookupGroupId(gid)
|
|
}
|
|
|
|
// Current returns the current user, acquired while holding a global process
|
|
// lock.
|
|
func Current() (*user.User, error) {
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
return user.Current()
|
|
}
|