diff --git a/VERSION b/VERSION index 3bff059..7cbea07 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.1.1 \ No newline at end of file +5.2.0 \ No newline at end of file diff --git a/sandfly.agent.sha512.txt b/sandfly.agent.sha512.txt index f09c377..b90d372 100644 --- a/sandfly.agent.sha512.txt +++ b/sandfly.agent.sha512.txt @@ -1,13 +1,13 @@ -69a58538b99ab89a9f13ae1a5d89ae2eb2970878c899e03c76954284e650239183c2f9feeefa42fa5bcaaf1510a617ba9e06ceae3c6f1da00f27ba75d3178375 *sandfly.386 -9babfd742f384873f9da37f91f5a708f52982ff066ea92bd607ae182ce420a8ce0ca39eb381639c5fb6a786513e6eb7ac4db44d09acf8e54ddad18e651cb8acb *sandfly.amd64 -763a90e4d7b7d5d217bc06b2ca42f6de02557796d9ab22040a59e9dc4e44db34bc1c9c4de408c48c24163419727e31fa7c4e64b00ba47606b062ebd0d4d2e92d *sandfly.arm -eff96f49b6e8cedd1c03ffcfd5407f0f46e95c2c4cd7fb609cc6bb4cd7107b346b4e7ab96f3f63ba620e8a3f37f7f2bd973b842a644be13d87cd915aad2e34d6 *sandfly.arm5 -944bb197483967b12ddfed9fa951f3a3577fcb752ed19da2ba5281d44c5deeb65b70c669017e02199d68cfde225dd1040aa70f87d2f8a59eff5d05767f6961cb *sandfly.arm6 -cbe38e675ca43a0a775d89aebbdef856944c0d5933a25dec3c029fa64912740fd688c7cc53b27fa1a5f22fa985a0ba21fb4156de96542980e2421d2d9c572513 *sandfly.arm64 -2049944854a5effa77e7bbbfbc6823bf604c31bb0853addc4b9836af7c66c1c5192892be2e864b31df2890174ed0b5ba38cd606dd678579f05c728c15c764ec3 *sandfly.arm7 -af022e5423e409b597b63649a24755b9b2d607fc73b8fdfc5fb657a0a23e4eee5b89b824a9bcd335218281dd1ebdfc24fb583c8a2a2cc0520fd4e59a3059aa8c *sandfly.mips -55bfb49044bc36e738e86e267edf994d2a6ed51e4d93a5e48d74cc1c61fddd83bb145348f817f82ea212186f68ddb0552ee1d02d581fe9e717c5a2bd46c93928 *sandfly.mips64 -81122bdaf3401dfc80da154716ab19d2aea0a75ae36420eeb7c4ba633b003d3ed1c157aa1fb14e5efd95901d1778cf4935ed07db120e1d0b9a9a11febf3fb543 *sandfly.mips64le -72d582d3da3bbbdcbffa7ed49fc6bf1d5e03fedae05e1d82e5e0c5535c684dc92152d4a2e48af6c35980eca263a5eb6b4be02a6c32a91e61bbcb77b08892f355 *sandfly.mipsle -60d40155b019a34a284b9a112201883c0003e524c46b5d660943b87e0f33280ebf12a9ddf9869d0548c5512841c1dd8b1abb4213219a4f4f3597d8ace6156fce *sandfly.ppc64le -fe55a8d00ab8e14c696e370e4fa7866e6ac6d976ecaf2c7440c06ec87068cedb2f7f80ab3d83cd7932e728dbb37e9d004813410c60b7e0a6782ec2e4b1d2370e *sandfly.s390x +d25b24c65d9c6e9ed508d1a1af1ac5d43c23685579bd7227f24ff8add1ffb5cb06b78d4c282a26478efc24e70d8760ddd86ae01af4779ec4be32a55e0fcdf71f *sandfly.386 +a9604b5f514aba796acc768e2b9b4dc2945ef0043773916855ce2f6c7ba41d91840080e0fc192e766331f78e1f162f1dd982182c4caf25b970a7855ccb77359b *sandfly.amd64 +d5112d821263db811b87cff76cf8edbf93d9d6f207543f71aa4927ec0cdf5ff46fa0f22fcf323d9d2ecec8f26f769699b4c353166b0331929f58c46497863aa8 *sandfly.arm +8b47b935a68aa01c524a3d2fa7bbec2edaedf63a3bfd032fa609752ee9c25c3417036c739ef5278cf0019d23a782c29b5426a61777d7da49f979e082ea25e6ce *sandfly.arm5 +a7d07605fd836771565fce9649e241cfa17a2b9a68a71c3a91bbeb601c9e93ebf101e5ceed14a4a4ee10d8cbbcfd07a6b6de1b220d3dcdc5a9ee1e512d802e54 *sandfly.arm6 +7c493fef518d64881c93c3ebdd44e8d1516d27bbb8b746852170f705df39f38c3fc4e692555927f5c09dbd7598d1a5bd069200f8f2d8b330418074fd9ac98927 *sandfly.arm64 +bef4779a4de467f8a16a9d718cf229501728116c6d9b4636d4eee4bf12a93b066f9c5c59bfb21b6157bb587c8e768972db5a194c7588229f22d25647945cf43b *sandfly.arm7 +9a0fa1856f4f7678fa9a9e6b4c48980fa983f761ccc6a26dd4cb7bac015e85048f8bf140eb4b0c5922d3d7b4a0a66db49b520191f32a6d215ab610cdfe17a6f0 *sandfly.mips +1ad5e99c4b1b8c9286e5b1eadec24acb746acd0b476e6a4ab69f2152994ed4f865d0cc31ffcb7267f8fc0c422858097dca9346fab63ee7e30c616ca54f972f25 *sandfly.mips64 +70afe35bac14cb39e5ca8a7d185f42326c36c1cb540100312242c95672a857a0d8d8107ecff74202a26f814fc3d5ebf2ec099958dd4100bae16784e998365cd7 *sandfly.mips64le +e55d84055d2955d85e7abcb8e1447ceaf42d1decac8971cf33bfd7b8c738cb1c0d2677a8df16ebadaeb49e00be9957cf61cfd726c8c55c3eabe710dfbf3b842b *sandfly.mipsle +cb4e95125995a607307e8e742b9f016c8200b3dfb5393e1a0990fb17645bb511bf80c6d77f0a8d7723860af9983533afac73800dde522fed26baa7fab6b1dde5 *sandfly.ppc64le +440a86bd3192f90454350cac299d857dddb6d0152e66eb68d9def9e856ebc7d86967eb6b2d782db8b0dfed19d7ea9d50e4a1e5e8dc80a562548a95a8536ec698 *sandfly.s390x diff --git a/setup/clean_scripts.sh b/setup/clean_scripts.sh index 0442a36..8bd20f9 100755 --- a/setup/clean_scripts.sh +++ b/setup/clean_scripts.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # Sandfly Security LTD www.sandflysecurity.com -# Copyright (c) 2022-2023 Sandfly Security LTD, All Rights Reserved. +# Copyright (c) 2022-2024 Sandfly Security LTD, All Rights Reserved. # Make sure we run from the correct directory so relative paths work cd "$( dirname "${BASH_SOURCE[0]}" )" @@ -65,3 +65,10 @@ if [ -f migrate_es2pg.sh ]; then mv migrate_es2pg.sh $BACKUPFOLDER fi # End 5.0.0 + +# 5.2.0 - Offline package now provided as part of release bundle +if [ -f util_scripts/offline_packager.sh ]; then + mkdir -p $BACKUPFOLDER + mv util_scripts/offline_packager.sh $BACKUPFOLDER +fi +# End 5.2.0 diff --git a/setup/install.sh b/setup/install.sh index bd56f16..4500244 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -129,6 +129,13 @@ EOF docker network create sandfly-net 2>/dev/null docker rm sandfly-server-mgmt 2>/dev/null +# Load images if offline bundle is present and not already loaded +./setup_scripts/load_images.sh +if [ "$?" -ne 0 ]; then + echo "Error loading container images." + exit 1 +fi + # The first time we start Postgres, we need to assign a superuser password. POSTGRES_ADMIN_PASSWORD=$(< /dev/urandom tr -dc A-Za-z0-9 | head -c40) echo "$POSTGRES_ADMIN_PASSWORD" > $SETUP_DATA_DIR/postgres.admin.password.txt diff --git a/setup/setup_scripts/load_images.sh b/setup/setup_scripts/load_images.sh new file mode 100755 index 0000000..6f7b109 --- /dev/null +++ b/setup/setup_scripts/load_images.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +# Sandfly Security LTD www.sandflysecurity.com +# Copyright (c) 2024 Sandfly Security LTD, All Rights Reserved. + +# Make sure we run from the correct directory so relative paths work +cd "$( dirname "${BASH_SOURCE[0]}" )" + +SF_VERSION=${SANDFLY_VERSION:-$(cat ../../VERSION)} +PG_VERSION=${POSTGRES_VERSION:-$(grep -oP 'POSTGRES_VERSION:-\K([0-9.]+)' ../../start_scripts/start_postgres.sh)} + +# If we don't have the offline package, there's nothing to do +if [ ! -f ../../docker_images/sandfly-docker-images-${SF_VERSION}.tgz ]; then + exit +fi + +# See if we can run Docker (or the podman compatability shim) as the current +# user. +docker version >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo "This script must be run as root or as a user with access to the Docker daemon." + exit 1 +fi + +NEED_IMAGES=0 + +docker inspect quay.io/sandfly/sandfly:${SF_VERSION} >/dev/null 2>&1 +if [ "$?" -ne 0 ]; then + NEED_IMAGES=1 +fi + +docker inspect docker.io/library/postgres:${PG_VERSION} >/dev/null 2>&1 +if [ "$?" -ne 0 ]; then + NEED_IMAGES=1 +fi + +# If either image didn't exist, load the bundle. +if [ "$NEED_IMAGES" -gt 0 ]; then + echo "** Loading images from local archive:" + echo "** ../../docker_images/sandfly-docker-images-${SF_VERSION}.tgz" + echo "** There will be a slight delay before further output..." + zcat ../../docker_images/sandfly-docker-images-${SF_VERSION}.tgz | \ + docker image load + if [ "$?" -ne 0 ]; then + echo "** ERROR loading container images." + echo "" + echo "****************************************************************" + echo "* *" + echo "* Failed to load container images from: *" + echo "* sandfly-setup/docker_images/sandfly-docker-images-${SF_VERSION}.tgz *" + echo "* *" + echo "* Your sandfly-setup-offline package download may have been *" + echo "* corrupted; please try downloading again and extracting a *" + echo "* fresh copy. *" + echo "* *" + echo "* If you wish to try an online installation, you may delete *" + echo "* the sandfly-docker-images-${SF_VERSION}.tgz file from the *" + echo "* docker_images directory and try again. *" + echo "* *" + echo "****************************************************************" + exit 1 + fi + + # If restoring with podman, the postgres image may not get restored with + # the prefix docker.io/library. Look for the right postgres image version + # and tag it properly if it's not already there. + docker inspect docker.io/library/postgres:${PG_VERSION} >/dev/null 2>&1 + if [ "$?" -ne 0 ]; then + postgres_id=$(docker images -q postgres:${PG_VERSION}) + docker tag $postgres_id docker.io/library/postgres:${PG_VERSION} + fi +fi diff --git a/setup/util_scripts/delete_sandfly_installation.sh b/setup/util_scripts/delete_sandfly_installation.sh index c22e573..3f98318 100755 --- a/setup/util_scripts/delete_sandfly_installation.sh +++ b/setup/util_scripts/delete_sandfly_installation.sh @@ -42,15 +42,11 @@ fi # Our existing clean script will wipe containers and images $SETUP_DIR/clean_docker.sh -# Now blow away docker volumes. We'll leave off the -f flag, so the user will -# have to answer yes again. New versions of docker (but not podman) require the -# '-a' flag, which does not exist in podman or older versions of docker. -docker_major_version=$(docker version -f '{{index (split .Client.Version ".") 0}}') -if command -v podman > /dev/null || [ $docker_major_version -lt 23 ]; then - docker volume prune -else - docker volume prune -a -fi +# Now blow away our docker volume. +docker volume rm sandfly-pg14-db-vol + +# Now blow away our docker network. +docker network rm sandfly-net # Delete config rm -f $SETUP_DATA_DIR/*.json $SETUP_DATA_DIR/*.txt diff --git a/setup/util_scripts/offline_packager.sh b/setup/util_scripts/offline_packager.sh deleted file mode 100755 index 2fd3847..0000000 --- a/setup/util_scripts/offline_packager.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -# Sandfly Security LTD www.sandflysecurity.com -# Copyright (c) 2022-2024 Sandfly Security LTD, All Rights Reserved. - -# This script is for building an offline Sandfly installer package -# for use on systems that do not have connectivity to the Internet. -# Associated offline installation documentation is found at: -# https://support.sandflysecurity.com/support/solutions/articles/72000570042-offline-installation - -# Make sure we run from the correct directory so relative paths work -cd "$( dirname "${BASH_SOURCE[0]}" )" - -SF_VERSION=${SANDFLY_VERSION:-$(cat ../../VERSION)} -PG_VERSION=${POSTGRES_VERSION:-$(grep -oP 'POSTGRES_VERSION:-\K([0-9.]+)' ../../start_scripts/start_postgres.sh)} -WHOAMI=$(whoami) - -if ! command -v docker >/dev/null 2>&1; then - echo "No docker command found. docker or podman-docker must be installed." - exit 1 -fi - -# See if we can run Docker (or the podman compatability shim) as the current -# user. -docker version >/dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "This script must be run as root or as a user with access to the Docker daemon." - exit 1 -fi - -DOCKER_BASE=quay.io/sandfly -IMAGELIST="" - -# Build up the list of images to pass to `docker image save`, and pull them. -for x in sandfly; do - IMAGE=${DOCKER_BASE}/${x}:${SF_VERSION} - IMAGELIST="${IMAGELIST} ${IMAGE}" - docker pull $IMAGE -done - -# Pull PostgreSQL image -IMAGELIST="${IMAGELIST} docker.io/library/postgres:${PG_VERSION}" - -docker pull docker.io/library/postgres:${PG_VERSION} - -echo "Saving images: $IMAGELIST" -echo "**" -echo "** Exporting Docker images to: ~/sandfly-docker-images-$SF_VERSION.tgz" -echo "**" -echo "** To restore on a system, use:" -echo "** zcat sandfly-docker-images-$SF_VERSION.tgz | docker image load" -echo "**" -echo "This will take a few minutes." - -# If "docker" is really podman, we need to use the -m argument to the save -# command. -SAVECMD="docker image save" -if command -v podman >/dev/null 2>&1; then - SAVECMD="podman image save -m" -fi - -$SAVECMD $IMAGELIST | gzip > ~/sandfly-docker-images-$SF_VERSION.tgz - -echo "Done!" -echo diff --git a/start_scripts/start_node.sh b/start_scripts/start_node.sh index 119f631..a98de62 100755 --- a/start_scripts/start_node.sh +++ b/start_scripts/start_node.sh @@ -48,6 +48,17 @@ if [ ! -f $SETUP_DATA/config.node.json ]; then exit 1 fi +# See if we can run Docker +which docker >/dev/null 2>&1 || { echo "Unable to locate docker binary; please install Docker."; exit 1; } +docker version >/dev/null 2>&1 || { echo "This script must be run as root or as a user with access to the Docker daemon."; exit 1; } + +# Load images if offline bundle is present and not already loaded +../setup/setup_scripts/load_images.sh +if [ "$?" -ne 0 ]; then + echo "Error loading container images." + exit 1 +fi + # Populate env variables. CONFIG_JSON=$(cat $SETUP_DATA/config.node.json) export CONFIG_JSON diff --git a/start_scripts/start_postgres.sh b/start_scripts/start_postgres.sh index f7e46ff..17bd016 100755 --- a/start_scripts/start_postgres.sh +++ b/start_scripts/start_postgres.sh @@ -6,7 +6,7 @@ cd "$( dirname "${BASH_SOURCE[0]}" )" IMAGE_BASE=${POSTGRES_IMAGE_BASE:-docker.io/library} -VERSION=${POSTGRES_VERSION:-14.12} +VERSION=${POSTGRES_VERSION:-14.13} LOG_MAX_SIZE="20m" @@ -25,6 +25,17 @@ if [ -f "/snap/bin/docker" ]; then exit 1 fi +# See if we can run Docker +which docker >/dev/null 2>&1 || { echo "Unable to locate docker binary; please install Docker."; exit 1; } +docker version >/dev/null 2>&1 || { echo "This script must be run as root or as a user with access to the Docker daemon."; exit 1; } + +# Load images if offline bundle is present and not already loaded +../setup/setup_scripts/load_images.sh +if [ "$?" -ne 0 ]; then + echo "Error loading container images." + exit 1 +fi + # After the first time Postgres starts, the admin password will be set in the # database in the Docker volume we use, and setting the password through the # docker run command will have no effect (e.g. it doesn't try to change it if diff --git a/start_scripts/start_server.sh b/start_scripts/start_server.sh index 1fbbb05..0bdcae9 100755 --- a/start_scripts/start_server.sh +++ b/start_scripts/start_server.sh @@ -110,6 +110,17 @@ if [ $? -ne 0 ]; then exit 1 fi +# See if we can run Docker +which docker >/dev/null 2>&1 || { echo "Unable to locate docker binary; please install Docker."; exit 1; } +docker version >/dev/null 2>&1 || { echo "This script must be run as root or as a user with access to the Docker daemon."; exit 1; } + +# Load images if offline bundle is present and not already loaded +../setup/setup_scripts/load_images.sh +if [ "$?" -ne 0 ]; then + echo "Error loading container images." + exit 1 +fi + # Old versions of Sandfly may have left behind a temporary volume for the # old rabbit container. Clean it up if present. docker volume rm sandfly-rabbitmq-tmp-vol 2>/dev/null diff --git a/third_party_licenses.txt b/third_party_licenses.txt index 04c3b4d..4f9afe4 100644 --- a/third_party_licenses.txt +++ b/third_party_licenses.txt @@ -28,6 +28,212 @@ SOFTWARE. +=============================================================================== +For code derived from https://github.com/masahiro331/go-xfs-filesystem: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + =============================================================================== MIT License @@ -82,7 +288,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =============================================================================== -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright (c) 2009-2020 The Go Authors. All rights reserved. +Copyright (c) 2024 Solar Designer. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -111,6 +318,36 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +=============================================================================== +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + =============================================================================== Copyright 2015-2024 Brett Vickers. All rights reserved.