From patchwork Fri Nov 18 12:51:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Lautrbach X-Patchwork-Id: 13048224 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8B06C4332F for ; Fri, 18 Nov 2022 12:54:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241159AbiKRMy2 (ORCPT ); Fri, 18 Nov 2022 07:54:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235088AbiKRMy1 (ORCPT ); Fri, 18 Nov 2022 07:54:27 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 59C162AF9 for ; Fri, 18 Nov 2022 04:53:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668776005; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=eQp3raKZtxp1YusGOZv3gpep9FLCkOa03W8+QK0BcCs=; b=F8dkmvgreknHescA/6bMbf3zH7Yu3F2Sl5RwK6fwpgF+uREYy6ICLXiXcgCxCI/jS5VNAS 1zCsVpToVzLU9NF+H2nSS++qgmAdLzXyRIYYs4E/I4k6YZdClwABBiVRUGTj6foJcs6A5z NOkXpdFgxyfyKK6FwCxsHmncYyVRoGc= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-219-81CJT8QpPgKl4l5CWlZdNw-1; Fri, 18 Nov 2022 07:53:24 -0500 X-MC-Unique: 81CJT8QpPgKl4l5CWlZdNw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B530F3850E86 for ; Fri, 18 Nov 2022 12:53:23 +0000 (UTC) Received: from localhost.localdomain (ovpn-194-48.brq.redhat.com [10.40.194.48]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2076140C6EC3; Fri, 18 Nov 2022 12:53:22 +0000 (UTC) From: Petr Lautrbach To: selinux@vger.kernel.org Cc: Petr Lautrbach Subject: [PATCH v3 1/3] python/sepolicy: Fix sepolicy manpage -w ... Date: Fri, 18 Nov 2022 13:51:52 +0100 Message-Id: <20221118125153.453700-1-lautrbach@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org Commit 7494bb1298b3 ("sepolicy: generate man pages in parallel") improved sepolicy performance but broke `sepolicy manpage -w ...` as it didn't collect data about domains and roles from ManPage() and so HTMLManPages() generated only empty page. This is fixed now, domains and roles are being collected and used for HTML pages. Signed-off-by: Petr Lautrbach Acked-by: James Carter --- - v3: improved the result loop, based on Ondrej Mosnacek 's suggestion python/sepolicy/sepolicy.py | 13 +++++++++++-- python/sepolicy/sepolicy/manpage.py | 12 +++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py index 733d40484709..82ff6af2bc2d 100755 --- a/python/sepolicy/sepolicy.py +++ b/python/sepolicy/sepolicy.py @@ -332,9 +332,10 @@ def manpage_work(domain, path, root, source_files, web): from sepolicy.manpage import ManPage m = ManPage(domain, path, root, source_files, web) print(m.get_man_page_path()) + return (m.manpage_domains, m.manpage_roles) def manpage(args): - from sepolicy.manpage import HTMLManPages, manpage_domains, manpage_roles, gen_domains + from sepolicy.manpage import HTMLManPages, gen_domains path = args.path if not args.policy and args.root != "/": @@ -347,9 +348,17 @@ def manpage(args): else: test_domains = args.domain + manpage_domains = set() + manpage_roles = set() p = Pool() + async_results = [] for domain in test_domains: - p.apply_async(manpage_work, [domain, path, args.root, args.source_files, args.web]) + async_results.append(p.apply_async(manpage_work, [domain, path, args.root, args.source_files, args.web])) + for result in async_results: + domains, roles = result.get() + manpage_domains.update(domains) + manpage_roles.update(roles) + p.close() p.join() diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py index 3e61e333193f..de72cb6cda5f 100755 --- a/python/sepolicy/sepolicy/manpage.py +++ b/python/sepolicy/sepolicy/manpage.py @@ -21,7 +21,7 @@ # 02111-1307 USA # # -__all__ = ['ManPage', 'HTMLManPages', 'manpage_domains', 'manpage_roles', 'gen_domains'] +__all__ = ['ManPage', 'HTMLManPages', 'gen_domains'] import string import selinux @@ -147,10 +147,6 @@ def _gen_types(): def prettyprint(f, trim): return " ".join(f[:-len(trim)].split("_")) -# for HTML man pages -manpage_domains = [] -manpage_roles = [] - fedora_releases = ["Fedora17", "Fedora18"] rhel_releases = ["RHEL6", "RHEL7"] @@ -408,6 +404,8 @@ class ManPage: """ modules_dict = None enabled_str = ["Disabled", "Enabled"] + manpage_domains = [] + manpage_roles = [] def __init__(self, domainname, path="/tmp", root="/", source_files=False, html=False): self.html = html @@ -453,10 +451,10 @@ class ManPage: if self.domainname + "_r" in self.all_roles: self.__gen_user_man_page() if self.html: - manpage_roles.append(self.man_page_path) + self.manpage_roles.append(self.man_page_path) else: if self.html: - manpage_domains.append(self.man_page_path) + self.manpage_domains.append(self.man_page_path) self.__gen_man_page() self.fd.close() From patchwork Fri Nov 18 12:51:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Lautrbach X-Patchwork-Id: 13048225 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2DDCCC433FE for ; Fri, 18 Nov 2022 12:54:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241512AbiKRMye (ORCPT ); Fri, 18 Nov 2022 07:54:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235088AbiKRMye (ORCPT ); Fri, 18 Nov 2022 07:54:34 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7ED21FAF6 for ; Fri, 18 Nov 2022 04:53:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668776014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=U4a44dCvlQn9qpEvzCFThv2jLQmeGe+A+sddXTvKq9s=; b=DmDrjkV20hhvKoUSmZkWtG8QW24lhGVtRts3o/oUKQwbj/l9tTfJYM0v3FMhy1kuDJa4jL G+qeY6+39vS7S7jiebwGKkY84U/jsPZf9zmzXeQLXTYF433qu7ba+zLZ3Gv70p6zVUkcgv iW2nh1Xhqx4QpaS4sYZSB5ziBd/6KWU= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-30-Cf2xVp5xP4aBOImckSU0cw-1; Fri, 18 Nov 2022 07:53:33 -0500 X-MC-Unique: Cf2xVp5xP4aBOImckSU0cw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3171B85A59D for ; Fri, 18 Nov 2022 12:53:33 +0000 (UTC) Received: from localhost.localdomain (ovpn-194-48.brq.redhat.com [10.40.194.48]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9099C40C6EC3; Fri, 18 Nov 2022 12:53:32 +0000 (UTC) From: Petr Lautrbach To: selinux@vger.kernel.org Cc: Petr Lautrbach Subject: [PATCH v3 2/3] python/sepolicy: Use distro module to get os version Date: Fri, 18 Nov 2022 13:51:53 +0100 Message-Id: <20221118125153.453700-2-lautrbach@redhat.com> In-Reply-To: <20221118125153.453700-1-lautrbach@redhat.com> References: <20221118125153.453700-1-lautrbach@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org distro module uses /etc/os-release file which contains operating system identification data, see os-release(5). Given that the mechanism doesn't use `rpm` it should be possible to generate man pages on other distributions. Signed-off-by: Petr Lautrbach --- python/sepolicy/sepolicy/__init__.py | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py index 9c3caa05b80b..baa4c8e62e97 100644 --- a/python/sepolicy/sepolicy/__init__.py +++ b/python/sepolicy/sepolicy/__init__.py @@ -1226,27 +1226,14 @@ def boolean_desc(boolean): def get_os_version(): - os_version = "" - pkg_name = "selinux-policy" + system_release = "" try: - try: - from commands import getstatusoutput - except ImportError: - from subprocess import getstatusoutput - rc, output = getstatusoutput("rpm -q '%s'" % pkg_name) - if rc == 0: - os_version = output.split(".")[-2] - except: - os_version = "" - - if os_version[0:2] == "fc": - os_version = "Fedora" + os_version[2:] - elif os_version[0:2] == "el": - os_version = "RHEL" + os_version[2:] - else: - os_version = "" + import distro + system_release = distro.name(pretty=True) + except IOError: + system_release = "Misc" - return os_version + return system_release def reinit(): From patchwork Fri Nov 18 12:51:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Lautrbach X-Patchwork-Id: 13048226 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ADB33C433FE for ; Fri, 18 Nov 2022 12:55:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235088AbiKRMzH (ORCPT ); Fri, 18 Nov 2022 07:55:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241377AbiKRMzH (ORCPT ); Fri, 18 Nov 2022 07:55:07 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 777D0A465 for ; Fri, 18 Nov 2022 04:54:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668776049; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I0m3PF1v5jV84lDDi+cWSBwB3S3MWClqNZ+vE0oHj8g=; b=W/udgBh9Lv/EZ+dkko0S9xzj/Jsg6MRFBEtt2qfxou5jfICBLRxJxqLUwRZ4N3akblmQds mptAHyeKyV/kFPB/HX3QPvpJSt5l/ffV4CqVP08j4lMCr6QEV+SvDZSRQzOZylOwWS2GMJ yuZlkPgf1VcNbktzmZvZ1z7UDCdq2T0= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-664-Fb8ZexIkOIuJjENyy1B1rg-1; Fri, 18 Nov 2022 07:54:08 -0500 X-MC-Unique: Fb8ZexIkOIuJjENyy1B1rg-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CFC9988B7A8 for ; Fri, 18 Nov 2022 12:54:07 +0000 (UTC) Received: from localhost.localdomain (ovpn-194-48.brq.redhat.com [10.40.194.48]) by smtp.corp.redhat.com (Postfix) with ESMTP id 493EC40C6EC3; Fri, 18 Nov 2022 12:54:03 +0000 (UTC) From: Petr Lautrbach To: selinux@vger.kernel.org Cc: Petr Lautrbach Subject: [PATCH v3 3/3] python/sepolicy: Simplify generation of man pages Date: Fri, 18 Nov 2022 13:51:55 +0100 Message-Id: <20221118125153.453700-3-lautrbach@redhat.com> In-Reply-To: <20221118125153.453700-1-lautrbach@redhat.com> References: <20221118125153.453700-1-lautrbach@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org And do not hardcode Fedora and RHEL versions. Signed-off-by: Petr Lautrbach --- - v3: SELinux man Pages without " online" python/sepolicy/sepolicy/manpage.py | 71 ++++------------------------- 1 file changed, 8 insertions(+), 63 deletions(-) diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py index de72cb6cda5f..edeb3b77e759 100755 --- a/python/sepolicy/sepolicy/manpage.py +++ b/python/sepolicy/sepolicy/manpage.py @@ -147,9 +147,6 @@ def _gen_types(): def prettyprint(f, trim): return " ".join(f[:-len(trim)].split("_")) -fedora_releases = ["Fedora17", "Fedora18"] -rhel_releases = ["RHEL6", "RHEL7"] - def get_alphabet_manpages(manpage_list): alphabet_manpages = dict.fromkeys(string.ascii_letters, []) @@ -180,7 +177,7 @@ def convert_manpage_to_html(html_manpage, manpage): class HTMLManPages: """ - Generate a HHTML Manpages on an given SELinux domains + Generate a HTML Manpages on an given SELinux domains """ def __init__(self, manpage_roles, manpage_domains, path, os_version): @@ -188,18 +185,12 @@ class HTMLManPages: self.manpage_domains = get_alphabet_manpages(manpage_domains) self.os_version = os_version self.old_path = path + "/" - self.new_path = self.old_path + self.os_version + "/" - - if self.os_version in fedora_releases or self.os_version in rhel_releases: - self.__gen_html_manpages() - else: - print("SELinux HTML man pages can not be generated for this %s" % os_version) - exit(1) + self.new_path = self.old_path + self.__gen_html_manpages() def __gen_html_manpages(self): self._write_html_manpage() self._gen_index() - self._gen_body() self._gen_css() def _write_html_manpage(self): @@ -217,67 +208,21 @@ class HTMLManPages: convert_manpage_to_html((self.new_path + r.rsplit("_selinux", 1)[0] + ".html"), self.old_path + r) def _gen_index(self): - index = self.old_path + "index.html" - fd = open(index, 'w') - fd.write(""" - - - - SELinux man pages online - - -

SELinux man pages

-

-Fedora or Red Hat Enterprise Linux Man Pages. -

-
-

Fedora

- - -
-
-
-""")
-        for f in fedora_releases:
-            fd.write("""
-%s - SELinux man pages for %s """ % (f, f, f, f))
-
-        fd.write("""
-
-
-

RHEL

- - -
-
-
-""")
-        for r in rhel_releases:
-            fd.write("""
-%s - SELinux man pages for %s """ % (r, r, r, r))
-
-        fd.write("""
-
- """) - fd.close() - print("%s has been created" % index) - - def _gen_body(self): - html = self.new_path + self.os_version + ".html" + html = self.new_path + "index.html" fd = open(html, 'w') fd.write(""" - - Linux man-pages online for Fedora18 + + SELinux man pages -

SELinux man pages for Fedora18

+

SELinux man pages for %s


SELinux roles

-""") +""" % self.os_version) for letter in self.manpage_roles: if len(self.manpage_roles[letter]): fd.write("""