poky/scripts/nativesdk-intercept/chgrp
Eilís 'pidge' Ní Fhlannagáin 3ee23c255f nativesdk-intercept: Fix bad intercept chgrp/chown logic
Running either of these ends up corrupting the os.execv args.

If we run:
./scripts/nativesdk-intercept/chown -R foo:foo bar

The loop here ends up missing the conversion of foo:foo to root:root because
it sees sys.argv[0] and assumes that it's the user:group argument and that we
should convert that. We end up a os.execv(path, args) that have the following
args:

['root:root', '-R', 'foo:foo', 'bar']

As os.execv ignores args[0], we can just populate it with sys.argv[0] and then
loop through sys.argv[1:]. As both chgrp and chown would have either flags and
USER[:GROUP] next, this fixes the issue.

(Backported from OE-Core rev: 2a75f647ec7696d353f4b09099d777ba53f34d36)

(From OE-Core rev: ed009b5d58914582c0770222115fc5c5a16bf16d)

Signed-off-by: Eilís 'pidge' Ní Fhlannagáin <pidge@baylibre.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
2024-11-02 06:32:36 -07:00

31 lines
559 B
Python
Executable File

#!/usr/bin/env python3
#
# Wrapper around 'chgrp' that redirects to root in all cases
import os
import shutil
import sys
# calculate path to the real 'chgrp'
path = os.environ['PATH']
path = path.replace(os.path.dirname(sys.argv[0]), '')
real_chgrp = shutil.which('chgrp', path=path)
args = list()
found = False
args.append(real_chgrp)
for i in sys.argv[1:]:
if i.startswith("-"):
args.append(i)
continue
if not found:
args.append("root")
found = True
else:
args.append(i)
os.execv(real_chgrp, args)