From 0d47952611198ef6b1163f366dc03922d20b1475 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:42:04 +0200 Subject: Adding upstream version 7.94+git20230807.3be01efb1+dfsg. Signed-off-by: Daniel Baumann --- zenmap/install_scripts/utils/get_deps.py | 80 ++++++++++++++++++ zenmap/install_scripts/utils/version_update.py | 107 +++++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100755 zenmap/install_scripts/utils/get_deps.py create mode 100644 zenmap/install_scripts/utils/version_update.py (limited to 'zenmap/install_scripts/utils') diff --git a/zenmap/install_scripts/utils/get_deps.py b/zenmap/install_scripts/utils/get_deps.py new file mode 100755 index 0000000..631bae6 --- /dev/null +++ b/zenmap/install_scripts/utils/get_deps.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 + +import modulefinder +import configparser +import sys +import os.path +import site +import encodings + +site_package_deps = ("gi", "cairo") + +# These items are unneeded, large, and on macOS _ssl causes dependency problems. +pyd_remove = ("_decimal", "_ssl", "_testcapi", "_hashlib") + +def module_paths(mods): + for m in mods: + if m.__name__ in pyd_remove: + continue + elif getattr(m, "__file__", None) and m.__file__.startswith(sys.prefix): + yield m.__file__ + +def get_deps(): + # Start with pygobject and zenmap itself + sitedirs = site.getsitepackages() + files = set(os.path.join(sitedirs[0], name) for name in site_package_deps) + + # These items are missed by modulefinder + files.add(encodings.__path__[0]) # All encodings just in case + for path in module_paths((site, site._sitebuiltins)): + files.add(path) + + # Now use modulefinder to get the rest + mfind = modulefinder.ModuleFinder() + mfind.run_script(os.path.normpath(__file__ + '/../../../zenmapGUI/App.py')) + for path in module_paths(mfind.modules.values()): + parent = os.path.dirname(path) + found_parent = False + # If a parent dir is already included, don't bother listing the file. + while parent not in sys.path and len(parent) > 2: + if parent in files: + found_parent = True + break + parent = os.path.dirname(parent) + if not found_parent: + files.add(path) + return files + +def read_cfg(filename): + cfg = configparser.ConfigParser() + cfg.read(filename) + return cfg + +def write_cfg(cfg, filename): + with open(filename, "w") as f: + cfg.write(f) + +def update_cfg(cfg, files): + filestr = "\nmingw*".join((f.removeprefix(sys.prefix) for f in files)) + oldvalue = cfg.get('bundle', 'nodelete') + cfg.set('bundle', 'nodelete', oldvalue + "\nmingw*" + filestr) + +def write_xml(filename, files): + with open(filename, "w") as f: + for file in files: + fname = r"${prefix}" + file.removeprefix(sys.prefix) + fmt = "{}" + if file.endswith(".so"): + fmt = "{}" + print(fmt.format(fname), file=f) + +if __name__ == "__main__": + files = get_deps() + if sys.platform == "win32": + cfg = read_cfg(sys.argv[2]) + update_cfg(cfg, files) + write_cfg(cfg, sys.argv[1]) + elif sys.platform == "darwin": + write_xml(sys.argv[1], files) + else: + raise NotImplementedError diff --git a/zenmap/install_scripts/utils/version_update.py b/zenmap/install_scripts/utils/version_update.py new file mode 100644 index 0000000..8ff9d84 --- /dev/null +++ b/zenmap/install_scripts/utils/version_update.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +# ***********************IMPORTANT NMAP LICENSE TERMS************************ +# * +# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap +# * Project"). Nmap is also a registered trademark of the Nmap Project. +# * +# * This program is distributed under the terms of the Nmap Public Source +# * License (NPSL). The exact license text applying to a particular Nmap +# * release or source code control revision is contained in the LICENSE +# * file distributed with that version of Nmap or source code control +# * revision. More Nmap copyright/legal information is available from +# * https://nmap.org/book/man-legal.html, and further information on the +# * NPSL license itself can be found at https://nmap.org/npsl/ . This +# * header summarizes some key points from the Nmap license, but is no +# * substitute for the actual license text. +# * +# * Nmap is generally free for end users to download and use themselves, +# * including commercial use. It is available from https://nmap.org. +# * +# * The Nmap license generally prohibits companies from using and +# * redistributing Nmap in commercial products, but we sell a special Nmap +# * OEM Edition with a more permissive license and special features for +# * this purpose. See https://nmap.org/oem/ +# * +# * If you have received a written Nmap license agreement or contract +# * stating terms other than these (such as an Nmap OEM license), you may +# * choose to use and redistribute Nmap under those terms instead. +# * +# * The official Nmap Windows builds include the Npcap software +# * (https://npcap.com) for packet capture and transmission. It is under +# * separate license terms which forbid redistribution without special +# * permission. So the official Nmap Windows builds may not be redistributed +# * without special permission (such as an Nmap OEM license). +# * +# * Source is provided to this software because we believe users have a +# * right to know exactly what a program is going to do before they run it. +# * This also allows you to audit the software for security holes. +# * +# * Source code also allows you to port Nmap to new platforms, fix bugs, and add +# * new features. You are highly encouraged to submit your changes as a Github PR +# * or by email to the dev@nmap.org mailing list for possible incorporation into +# * the main distribution. Unless you specify otherwise, it is understood that +# * you are offering us very broad rights to use your submissions as described in +# * the Nmap Public Source License Contributor Agreement. This is important +# * because we fund the project by selling licenses with various terms, and also +# * because the inability to relicense code has caused devastating problems for +# * other Free Software projects (such as KDE and NASM). +# * +# * The free version of Nmap is distributed in the hope that it will be +# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties, +# * indemnification and commercial support are all available through the +# * Npcap OEM program--see https://nmap.org/oem/ +# * +# ***************************************************************************/ + +# This program updates the version number in all the places it needs to be +# updated. It takes a single command-line argument, which is the new version +# number. For example: +# python install_scripts/utils/version_update.py X.YY + +import os +import sys +import re +from datetime import datetime + +VERSION = os.path.join("share", "zenmap", "config", "zenmap_version") +VERSION_PY = os.path.join("zenmapCore", "Version.py") +NAME_PY = os.path.join("zenmapCore", "Name.py") + + +def update_date(base_dir): + name_file = os.path.join(base_dir, NAME_PY) + print(">>> Updating %s" % name_file) + nf = open(name_file, "r") + ncontent = nf.read() + nf.close() + ncontent = re.sub(r'APP_COPYRIGHT *= *"Copyright 2005-....', + 'APP_COPYRIGHT = "Copyright 2005-%d' % (datetime.today().year), + ncontent) + # Write the modified file. + nf = open(name_file, "w") + nf.write(ncontent) + nf.close() + + +def update_version(base_dir, version): + print(">>> Updating %s" % os.path.join(base_dir, VERSION)) + vf = open(os.path.join(base_dir, VERSION), "w") + print(version, file=vf) + vf.close() + print(">>> Updating %s" % os.path.join(base_dir, VERSION_PY)) + vf = open(os.path.join(base_dir, VERSION_PY), "w") + print("VERSION = \"%s\"" % version, file=vf) + vf.close() + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: %s " % sys.argv[0], file=sys.stderr) + sys.exit(1) + + version = sys.argv[1] + print(">>> Updating version number to \"%s\"" % version) + update_version(".", version) + update_date(".") -- cgit v1.2.3