From ac653d0390097f89b33c8bee6b5b180a782094cd Mon Sep 17 00:00:00 2001 From: Christopher Larson Date: Fri, 24 Apr 2015 16:10:22 -0700 Subject: [PATCH] package_qa_sourcery: add host user ownership test Check for files outside of /home which are owned by the user running bitbake. Add `package_qa_sourcery` to `PACKAGE_CLASSES`, and `${SOURCERY_QA}` to your `WARN_QA` or `ERROR_QA` to use. This will be submitted to oe-core's package_qa. JIRA: SB-4185 Signed-off-by: Christopher Larson --- classes/package_qa_sourcery.bbclass | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 classes/package_qa_sourcery.bbclass diff --git a/classes/package_qa_sourcery.bbclass b/classes/package_qa_sourcery.bbclass new file mode 100644 index 0000000..93499dc --- /dev/null +++ b/classes/package_qa_sourcery.bbclass @@ -0,0 +1,36 @@ +inherit package + +SOURCERY_QA = "host-user-contaminated" + +# We need to test in fakeroot context to check file ownership +do_package_qa[fakeroot] = "1" + +HOST_USER_UID := "${@os.getuid()}" +HOST_USER_UID[type] = "integer" +HOST_USER_GID := "${@os.getgid()}" +HOST_USER_GID[type] = "integer" + +QAPATHTEST[host-user-contaminated] = "package_qa_check_host_user" +def package_qa_check_host_user(path, name, d, elf, messages): + """Check for files outside of /home which are owned by the user running bitbake.""" + + if not os.path.lexists(path): + return + + check_uid = oe.data.typed_value('HOST_USER_UID', d) + check_gid = oe.data.typed_value('HOST_USER_GID', d) + + dest = d.getVar('PKGDEST', True) + home = os.path.join(dest, 'home') + if path == home or path.startswith(home + os.sep): + return + + stat = os.lstat(path) + if stat.st_uid == check_uid: + messages["host-user-contaminated"] = "%s is owned by uid %d, which is the same as the user running bitbake. This may be due to host contamination" % (path, check_uid) + return False + + if stat.st_gid == check_gid: + messages["host-user-contaminated"] = "%s is owned by gid %d, which is the same as the user running bitbake. This may be due to host contamination" % (path, check_gid) + return False + return True