bitbake: bitbake: bitbake-worker: Preserve network non-local uid

The NIS can't work when network is dissable, so preserve network for it, the
error is like:

do_ypcall: clnt_call: RPC: Unable to send; errno = Network is unreachable

Note, enable nscd on the build machine might be a solution, but that isn't
reliable since it depends on whether the network function has been cached or
not.

(Bitbake rev: 4eafae7904bae6e5c6bc50356e8a9077f2e207fa)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Robert Yang
2022-01-20 22:52:55 -08:00
committed by Richard Purdie
parent 80bddd7c36
commit d77178e8df
2 changed files with 21 additions and 2 deletions

View File

@@ -262,8 +262,11 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha
bb.utils.set_process_name("%s:%s" % (the_data.getVar("PN"), taskname.replace("do_", "")))
if not the_data.getVarFlag(taskname, 'network', False):
logger.debug("Attempting to disable network")
bb.utils.disable_network(uid, gid)
if bb.utils.is_local_uid(uid):
logger.debug("Attempting to disable network for %s" % taskname)
bb.utils.disable_network(uid, gid)
else:
logger.debug("Skipping disable network for %s since %s is not a local uid." % (taskname, uid))
# exported_vars() returns a generator which *cannot* be passed to os.environ.update()
# successfully. We also need to unset anything from the environment which shouldn't be there

View File

@@ -1735,3 +1735,19 @@ def environment(**envvars):
os.environ[var] = backup[var]
else:
del os.environ[var]
def is_local_uid(uid=''):
"""
Check whether uid is a local one or not.
Can't use pwd module since it gets all UIDs, not local ones only.
"""
if not uid:
uid = os.getuid()
with open('/etc/passwd', 'r') as f:
for line in f:
line_split = line.split(':')
if len(line_split) < 3:
continue
if str(uid) == line_split[2]:
return True
return False