mirror of
https://github.com/containers/skopeo.git
synced 2025-09-26 04:35:14 +00:00
Bumps [github.com/containers/common](https://github.com/containers/common) from 0.36.0 to 0.37.0. - [Release notes](https://github.com/containers/common/releases) - [Commits](https://github.com/containers/common/compare/v0.36.0...v0.37.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package unshare
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/user"
|
|
"sync"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/syndtr/gocapability/capability"
|
|
)
|
|
|
|
var (
|
|
homeDirOnce sync.Once
|
|
homeDirErr error
|
|
homeDir string
|
|
|
|
hasCapSysAdminOnce sync.Once
|
|
hasCapSysAdminRet bool
|
|
hasCapSysAdminErr error
|
|
)
|
|
|
|
// HomeDir returns the home directory for the current user.
|
|
func HomeDir() (string, error) {
|
|
homeDirOnce.Do(func() {
|
|
home := os.Getenv("HOME")
|
|
if home == "" {
|
|
usr, err := user.LookupId(fmt.Sprintf("%d", GetRootlessUID()))
|
|
if err != nil {
|
|
homeDir, homeDirErr = "", errors.Wrapf(err, "unable to resolve HOME directory")
|
|
return
|
|
}
|
|
homeDir, homeDirErr = usr.HomeDir, nil
|
|
return
|
|
}
|
|
homeDir, homeDirErr = home, nil
|
|
})
|
|
return homeDir, homeDirErr
|
|
}
|
|
|
|
// HasCapSysAdmin returns whether the current process has CAP_SYS_ADMIN.
|
|
func HasCapSysAdmin() (bool, error) {
|
|
hasCapSysAdminOnce.Do(func() {
|
|
currentCaps, err := capability.NewPid2(0)
|
|
if err != nil {
|
|
hasCapSysAdminErr = err
|
|
return
|
|
}
|
|
if err = currentCaps.Load(); err != nil {
|
|
hasCapSysAdminErr = err
|
|
return
|
|
}
|
|
hasCapSysAdminRet = currentCaps.Get(capability.EFFECTIVE, capability.CAP_SYS_ADMIN)
|
|
})
|
|
return hasCapSysAdminRet, hasCapSysAdminErr
|
|
}
|