summaryrefslogtreecommitdiff
path: root/pkg/rootless/rootless_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/rootless/rootless_linux.go')
-rw-r--r--pkg/rootless/rootless_linux.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/pkg/rootless/rootless_linux.go b/pkg/rootless/rootless_linux.go
index 70fa6b152..55a55bbc6 100644
--- a/pkg/rootless/rootless_linux.go
+++ b/pkg/rootless/rootless_linux.go
@@ -1,4 +1,4 @@
-// build +linux
+// +build linux
package rootless
@@ -6,6 +6,7 @@ import (
"fmt"
"io/ioutil"
"os"
+ "os/exec"
gosignal "os/signal"
"runtime"
"strconv"
@@ -22,6 +23,11 @@ extern int reexec_in_user_namespace_wait(int pid);
*/
import "C"
+func runInUser() error {
+ os.Setenv("_LIBPOD_USERNS_CONFIGURED", "done")
+ return nil
+}
+
// IsRootless tells us if we are running in rootless mode
func IsRootless() bool {
return os.Getuid() != 0 || os.Getenv("_LIBPOD_USERNS_CONFIGURED") != ""
@@ -37,6 +43,30 @@ func GetRootlessUID() int {
return os.Getuid()
}
+func tryMappingTool(tool string, pid int, hostID int, mappings []idtools.IDMap) error {
+ path, err := exec.LookPath(tool)
+ if err != nil {
+ return err
+ }
+
+ appendTriplet := func(l []string, a, b, c int) []string {
+ return append(l, fmt.Sprintf("%d", a), fmt.Sprintf("%d", b), fmt.Sprintf("%d", c))
+ }
+
+ args := []string{path, fmt.Sprintf("%d", pid)}
+ args = appendTriplet(args, 0, hostID, 1)
+ if mappings != nil {
+ for _, i := range mappings {
+ args = appendTriplet(args, i.ContainerID+1, i.HostID, i.Size)
+ }
+ }
+ cmd := exec.Cmd{
+ Path: path,
+ Args: args,
+ }
+ return cmd.Run()
+}
+
// BecomeRootInUserNS re-exec podman in a new userNS
func BecomeRootInUserNS() (bool, error) {