mirror of
https://github.com/containers/podman.git
synced 2025-09-26 00:06:04 +08:00
![dependabot[bot]](/assets/img/avatar_default.png)
Bumps [github.com/containers/storage](https://github.com/containers/storage) from 1.29.0 to 1.30.0. - [Release notes](https://github.com/containers/storage/releases) - [Changelog](https://github.com/containers/storage/blob/master/docs/containers-storage-changes.md) - [Commits](https://github.com/containers/storage/compare/v1.29.0...v1.30.0) Signed-off-by: dependabot[bot] <support@github.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
|
|
}
|