mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 02:00:45 +00:00
target/xfer: Fix detection of files with restricted permissions
The command used to detect the presence of a filepath can return the wrong value if only accessible by the superuser. Pass the `as_root` parameter to the detection function to ensure that files that are to be pulled with elevated permissions are also queried with elevated permission.
This commit is contained in:
parent
7d6ed2dd8a
commit
fffa040792
@ -461,7 +461,7 @@ class Target(object):
|
|||||||
once = functools.lru_cache(maxsize=None)
|
once = functools.lru_cache(maxsize=None)
|
||||||
|
|
||||||
_target_cache = {}
|
_target_cache = {}
|
||||||
def target_paths_kind(paths):
|
def target_paths_kind(paths, as_root=False):
|
||||||
def process(x):
|
def process(x):
|
||||||
x = x.strip()
|
x = x.strip()
|
||||||
if x == 'notexist':
|
if x == 'notexist':
|
||||||
@ -481,7 +481,7 @@ class Target(object):
|
|||||||
)
|
)
|
||||||
for path in _paths
|
for path in _paths
|
||||||
)
|
)
|
||||||
res = self.execute(cmd)
|
res = self.execute(cmd, as_root=as_root)
|
||||||
_target_cache.update(zip(_paths, map(process, res.split())))
|
_target_cache.update(zip(_paths, map(process, res.split())))
|
||||||
|
|
||||||
return [
|
return [
|
||||||
@ -490,7 +490,7 @@ class Target(object):
|
|||||||
]
|
]
|
||||||
|
|
||||||
_host_cache = {}
|
_host_cache = {}
|
||||||
def host_paths_kind(paths):
|
def host_paths_kind(paths, as_root=False):
|
||||||
def path_kind(path):
|
def path_kind(path):
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
return 'dir'
|
return 'dir'
|
||||||
@ -535,9 +535,9 @@ class Target(object):
|
|||||||
def rewrite_dst(src, dst):
|
def rewrite_dst(src, dst):
|
||||||
new_dst = dst_path_join(dst, os.path.basename(src))
|
new_dst = dst_path_join(dst, os.path.basename(src))
|
||||||
|
|
||||||
src_kind, = src_path_kind([src])
|
src_kind, = src_path_kind([src], as_root)
|
||||||
# Batch both checks to avoid a costly extra execute()
|
# Batch both checks to avoid a costly extra execute()
|
||||||
dst_kind, new_dst_kind = dst_paths_kind([dst, new_dst])
|
dst_kind, new_dst_kind = dst_paths_kind([dst, new_dst], as_root)
|
||||||
|
|
||||||
if src_kind == 'file':
|
if src_kind == 'file':
|
||||||
if dst_kind == 'dir':
|
if dst_kind == 'dir':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user