mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
//go:build !remote
 | 
						|
 | 
						|
package libpod
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/containers/buildah/copier"
 | 
						|
	"github.com/containers/podman/v5/libpod/define"
 | 
						|
)
 | 
						|
 | 
						|
// statInsideMount stats the specified path *inside* the container's mount and PID
 | 
						|
// namespace.  It returns the file info along with the resolved root ("/") and
 | 
						|
// the resolved path (relative to the root).
 | 
						|
func (c *Container) statInsideMount(containerPath string) (*copier.StatForItem, string, string, error) {
 | 
						|
	resolvedRoot := "/"
 | 
						|
	resolvedPath := c.pathAbs(containerPath)
 | 
						|
	var statInfo *copier.StatForItem
 | 
						|
 | 
						|
	err := c.joinMountAndExec(
 | 
						|
		func() error {
 | 
						|
			var statErr error
 | 
						|
			statInfo, statErr = secureStat(resolvedRoot, resolvedPath)
 | 
						|
			return statErr
 | 
						|
		},
 | 
						|
	)
 | 
						|
 | 
						|
	return statInfo, resolvedRoot, resolvedPath, err
 | 
						|
}
 | 
						|
 | 
						|
// Calls either statOnHost or statInsideMount depending on whether the
 | 
						|
// container is running
 | 
						|
func (c *Container) statInContainer(mountPoint string, containerPath string) (*copier.StatForItem, string, string, error) {
 | 
						|
	if c.state.State == define.ContainerStateRunning {
 | 
						|
		// If the container is running, we need to join it's mount namespace
 | 
						|
		// and stat there.
 | 
						|
		return c.statInsideMount(containerPath)
 | 
						|
	}
 | 
						|
	// If the container is NOT running, we need to resolve the path
 | 
						|
	// on the host.
 | 
						|
	return c.statOnHost(mountPoint, containerPath)
 | 
						|
}
 |