ba1e337f8b
* 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
27 lines
532 B
Go
27 lines
532 B
Go
//go:build unix
|
|
|
|
package users
|
|
|
|
import (
|
|
"fmt"
|
|
"os/user"
|
|
)
|
|
|
|
// nobody is a cached copy of the nobody user, which is going to be looked-up
|
|
// frequently and is unlikely to be modified on the underlying system.
|
|
var nobody user.User
|
|
|
|
// Nobody returns User data for the "nobody" user on the system, bypassing the
|
|
// locking / file read / NSS lookup.
|
|
func Nobody() user.User {
|
|
return nobody
|
|
}
|
|
|
|
func init() {
|
|
u, err := Lookup("nobody")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to lookup nobody user: %v", err))
|
|
}
|
|
nobody = *u
|
|
}
|