Review: golang-github-gocsaf-csaf 3.6.0+dfsg-1
Package Information
| Description | Go library for CSAF 2.0 security advisories (library) The Common Security Advisory Framework (CSAF) 2.0 is the OASIS standard for machine-readable security advisories and VEX documents. This package provides the Go packages of the csaf project, which implements a CSAF trusted provider, checker, aggregator and downloader: * csaf: data types for CSAF advisories, provider metadata, aggregator documents and ROLIE feeds, validation against the CSAF 2.0 JSON schemas, which Debian reads from disk instead of compiling in because OASIS does not license them freely, and an optional remote validation service client with a local result cache; * util: helpers used by the tools, among them JSONPath evaluation on decoded JSON documents, file name and URL checks, and hashing. Upstream states that library use is not officially supported and that the API may change. The command-line tools are in csaf-tools. |
|---|---|
| Maintainer | Debian Go Packaging Team <team+pkg-go@tracker.debian.org> |
| Changed By | Juan Manuel Méndez Rey <juan.mendezr@proton.me> |
| Sponsor | tsimonq2@debian.org |
| Distribution | unstable |
| Architecture | any all |
| VCS | git: https://salsa.debian.org/go-team/packages/golang-github-gocsaf-csaf.git (browse) |
| Closes | #1148988 |
| Tracker | https://tracker.debian.org/pkg/golang-github-gocsaf-csaf |
| Uploaded | 11 days ago |
New Package Report
.changes
| Changed-By | Juan Manuel Méndez Rey <juan.mendezr@proton.me> |
|---|---|
| Architecture | source amd64 all |
| Distribution | unstable |
| Date | Mon, 26 Oct 2026 05:24:17 +0100 |
| Source | golang-github-gocsaf-csaf |
| Version | 3.6.0+dfsg-1 |
Changelog
golang-github-gocsaf-csaf (3.6.0+dfsg-1) unstable; urgency=medium
.
* Initial release (Closes: #1148988)
* Ship the six command-line tools as csaf-tools, in contrib because they
need the OASIS schemas from non-free to validate anything..dsc
| Priority | optional |
|---|---|
| Component | main |
| Package-List | csaf-tools deb contrib/utils optional arch=any golang-github-gocsaf-csaf-v3-dev deb golang optional arch=all |
| Section | contrib/utils |
debian/copyright
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: csaf
Files-Excluded: csaf/schema/csaf_json_schema.json
csaf/schema/provider_json_schema.json
csaf/schema/aggregator_json_schema.json
csaf/schema/ROLIE_feed_json_schema.json
Comment: The four OASIS CSAF 2.0 JSON schemas carry no licence of their own.
The CSAF 2.0 OASIS Standard notice that covers them says the document "may not
be modified in any way", which is not DFSG free, and debian-legal agreed
(https://lists.debian.org/debian-legal/2026/09/msg00019.html). They are
removed from the tarball and read from
/usr/share/golang-github-gocsaf-csaf/schema at run time instead, so validation
works as soon as a user installs them. See debian/README.source.
Upstream-Contact: Sascha L. Teichmann <sascha.teichmann@intevation.de>
Source: https://github.com/gocsaf/csaf
Files: *
Copyright: 2021-2026 German Federal Office for Information Security (BSI) <https://www.bsi.bund.de>
License: Apache-2.0
Comment: Nearly every source file carries an SPDX header naming the BSI as
the copyright holder ("SPDX-FileCopyrightText") and, on a separate line,
"Software-Engineering: <year> Intevation GmbH <https://intevation.de>",
which credits the contractor that wrote the code for the BSI; it is not a
copyright statement. Files without a header (documentation, test data,
CI configuration, and the five code files csaf/advisory_test.go,
examples/product_lister/main.go, examples/purls_searcher/main.go,
docs/scripts/signing_tool.sh and
docs/scripts/prepareUbuntuInstanceForITests.sh) fall under the project
licence stated in README.md.
LICENSES/ holds the licence texts that the SPDX headers refer to, as
REUSE lays out, not copies of dependency licences; 3rdpartylicenses.md
only lists the licences of dependencies.
Files: cmd/csaf_aggregator/client_test.go
Copyright: 2022 German Federal Office for Information Security (BSI) <https://www.bsi.bund.de>
License: Expat
Files: csaf/cvss20enums.go
csaf/cvss3enums.go
csaf/schema/cvss-v2.0.json
csaf/schema/cvss-v2.0.json.license
csaf/schema/cvss-v3.0.json
csaf/schema/cvss-v3.0.json.license
Copyright: 2017 FIRST.ORG, INC.
License: BSD-3-clause
Comment: The CVSS v2.0 and v3.0 JSON schemas published by FIRST, which carry
their licence in a "license" member. The two Go files are generated from
them by csaf/generate_cvss_enums.go (see the go:generate lines in
csaf/doc.go) and keep FIRST's notice. The generator itself is Apache-2.0
(BSI); the BSD-3-Clause identifier and FIRST.ORG notice that licensecheck
finds in it are the header it writes into its output.
Files: csaf/schema/cvss-v3.1.json
csaf/schema/cvss-v3.1.json.license
Copyright: 2021 FIRST.ORG, INC.
License: BSD-3-clause
Comment: The CVSS v3.1 JSON schema published by FIRST, which carries its
licence in a "license" member.
Files: debian/*
Copyright: 2026 Juan Manuel Méndez Rey <juan.mendezr@proton.me>
License: Apache-2.0
Comment: Debian packaging is licensed under the same terms as upstream
License: Apache-2.0
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.
.
On Debian systems, the complete text of the Apache License, Version 2.0
can be found in "/usr/share/common-licenses/Apache-2.0".
License: BSD-3-clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. 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.
3. Neither the name of the copyright holder 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 HOLDER 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.
License: Expat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
DFSG Assistant LLM REVIEW 0 blocker, 0 important, 1 minor
This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.
Reviewed 10 days ago.
Report
DFSG NEW review for golang-github-gocsaf-csaf version 3.6.0+dfsg-1
Summary
- Licensing is DFSG-compliant and
debian/copyrightis accurate: Yes - Packaging is of good quality: Yes
- Issues: 0 blocker, 0 important, 1 minor
- debian/watch: version 5
- debian/copyright: machine-readable
- Scan before the review: nothing found
Licensing
The tree is DFSG-free and debian/copyright is DEP-5 and accurate. The project is Apache-2.0 (BSI) with two well-scoped exceptions: the three FIRST.ORG CVSS JSON schemas and the two Go enum files generated from them (BSD-3-Clause, full text reproduced) and cmd/csaf_aggregator/client_test.go (Expat/MIT, full text reproduced); the four OASIS CSAF schemas that carry no free licence are removed with Files-Excluded and the +dfsg suffix, correctly and with the reason documented. The 'Software-Engineering: Intevation GmbH' line in 112 headers is a credit, not a copyright claim: no file has an SPDX-FileCopyrightText or Copyright line naming Intevation, so Files: * naming only the BSI is right. Only the Comment's runtime path for the schemas is wrong (one minor issue).
Packaging
Solid packaging: debhelper compat 14 with dh-go, a single DEP-3 patch that is needed for the DFSG repack, precise Build-Depends (all used, none missing; cmd-only deps kept out of the -dev package) and a complete Depends for the library, hand-written accurate man pages, and a justified contrib placement for csaf-tools, which Policy 2.2.1 permits for a main source package. The only defect found is a wrong schema directory in debian/copyright's Comment.
Issues
minor packaging 1. debian/copyright says the OASIS schemas are read from /usr/share/golang-github-gocsaf-csaf/schema, but the code reads /usr/share/csaf/schemas ◂
- Files:
debian/copyright:5-9,debian/patches/0001-read-oasis-schemas-from-disk.patch:41-47,csaf/validation.go:37-47 - Basis: checked, in the package or with a reference tool
- Evidence: debian/copyright Comment: "read from /usr/share/golang-github-gocsaf-csaf/schema at run time instead, so validation works as soon as a user installs them"; the patch adds
const defaultSchemaDir = "/usr/share/csaf/schemas"and README.source and the six man pages all name /usr/share/csaf/schemas. - Problem: The copyright file tells users and administrators to put the non-free OASIS schemas in a directory the library never looks in, so the documented fix for the "schema ... is not installed" error does not work. Internal inconsistency between debian/copyright and the code.
- Fix: Change the Comment to /usr/share/csaf/schemas (or CSAF_SCHEMA_DIR), or, if /usr/share/golang-github-gocsaf-csaf/schema is the intended location, change defaultSchemaDir, README.source and the man pages together so that all four agree.
Verified ◂
- debian/copyright is DEP-5 (Format, Upstream-Name, Source, Upstream-Contact, Files-Excluded, four Files stanzas, three stand-alone License stanzas); Files: * is the catch-all and later stanzas override it.
- All 203 files accounted for: 112 carry
SPDX-FileCopyrightText: <year> German Federal Office for Information Security (BSI)(years 2021-2026 only), 7 carry a FIRST.ORG SPDX notice covered by the two FIRST stanzas, 5 code files have no header exactly as the Comment states (csaf/advisory_test.go, examples/product_lister/main.go, examples/purls_searcher/main.go, docs/scripts/signing_tool.sh, docs/scripts/prepareUbuntuInstanceForITests.sh), and the remaining docs/testdata/CI files have no header and are covered by Files: * with the project licence stated in README.md. - Prescan holder "Intevation GmbH": appears only in the
Software-Engineering: <year> Intevation GmbH <https://intevation.de>credit line of 112 headers;grep -i 'copyright.*intevation|intevation.*copyright'finds nothing, and no SPDX-FileCopyrightText names it, so the BSI-only Copyright in Files: * is correct and no stanza is missing. - Prescan holder
%s FIRST.ORG, INC.", m[1])is the format string of the licence header the generator writes (csaf/generate_cvss_enums.go:149), not a copyright notice; FIRST's own holders (cvss20enums.go, cvss3enums.go, the three cvss schemas and their .license sidecars) are covered by the two FIRST stanzas and the full BSD-3-Clause text is reproduced. - Prescan "German Federal Office ... Software-Engineering" is the scanner joining the BSI SPDX line with the Software-Engineering credit line of the same header block; the holder itself is named in debian/copyright.
- csaf/cvss20enums.go and csaf/cvss3enums.go are generated, not orphaned build output: csaf/generate_cvss_enums.go (Apache-2.0, BSI) is present, csaf/doc.go has the two go:generate lines, and the input files csaf/schema/cvss-v2.0.json and cvss-v3.0.json are in the tree.
- The four OASIS CSAF schemas (csaf_json_schema, provider_json_schema, aggregator_json_schema, ROLIE_feed_json_schema) are absent from csaf/schema and listed in Files-Excluded; the +dfsg version records the repack and debian/README.source explains the OASIS no-modification notice. Only the three BSD-3 CVSS schemas remain.
- LICENSES/Apache-2.0.txt, BSD-3-Clause.txt and MIT.txt are REUSE licence texts with unfilled template holder lines (
Copyright (c) <year> <owner>.); they are not dependency code, and debian/lrc.config excludes them from licenserecon for that reason. LICENSE-Apache-2.0.txt is a second copy of the Apache text. - No other licence or holder appears in the tree:
SPDX-License-Identifier,Copyright (c),All rights reserved,Permission is hereby granted, GNU/Lesser/Apache/Mozilla and non-commercial/no-modification searches hit only the CVSS BSD-3 notices, the licence texts and debian/README.source's quotation of the OASIS terms. - testdata/ (fictional "ACME Inc." advisories, provider fixtures, test OpenPGP keys and certs) and docs/ (markdown, scripts, test keys) contain no third-party copyright or licence statement; cmd/*/tmpl are plain HTML with no bundled third-party JS/CSS.
- Licences combined in the binaries (Apache-2.0, BSD-3-Clause, Expat) are mutually compatible.
- Man pages in debian/man/ match the code: --validator, --validator_cache, --validator_preset, -o/--output and the 1/2/4/8 exit bits (cmd/csaf_validator/main.go), the -i/--interim and -c/--config of csaf_aggregator, -u/-a/-t/-p of csaf_uploader, and the config search order ~/.config/csaf/.toml, ~/.csaf_.toml, ./csaf_*.toml in each tool.
- The -dev Depends covers exactly the external imports of the installed packages (csaf, util, internal/options): santhosh-tekuri/jsonschema, Intevation gval and jsonpath, go.etcd.io/bbolt, BurntSushi/toml, jessevdk/go-flags, mitchellh/go-homedir, golang.org/x/time; the cmd-only deps (gopenpgp, goquery, flock, x/crypto, x/term) are correctly in Build-Depends only.
- Built-Using: ${misc:Built-Using} and Static-Built-Using: ${misc:Static-Built-Using} are not empty leftovers: /usr/bin/dh_golang sets both for arch:any packages from
go list -depsand dpkg-query. - Policy 2.2.1 area rules: the source is in main, the -dev package is in main, csaf-tools in contrib is allowed because it Depends on non-free csaf-oasis-schemas; the source has no Build-Depends outside main, and the contrib binary may have runtime deps outside main.
- Standards-Version 4.7.4 matches Policy 4.7.4.1 (first two components).
- dh-go 1.69 exists in the archive and Conflicts: dh-golang; the source lintian override for missing-build-dependency-for-dh-addon golang is therefore justified.
- gbp.conf's
dist = DEP14is accepted by gbp: /usr/lib/python3/dist-packages/gbp/scripts/buildpackage.py accepts both 'DEP-14' and 'DEP14'. - The DH_GOLANG_EXCLUDES regex is anchored and covers both forms: build targets are import paths (github.com/gocsaf/csaf/v3/examples/...) and install matches paths relative to build/src/$DH_GOPKG (examples/...), per Buildsystem/golang.pm get_targets() and install().
- The single patch 0001-read-oasis-schemas-from-disk.patch has DEP-3 headers (Description, Author, Forwarded, Last-Update), is the only one in series, and is necessary rather than obsolete: it replaces the go:embed of files that are no longer shipped and lets the library work without them.
- The three skipped tests are all in cmd/, whose sources are removed from the -dev package, so the autopkgtest-pkg-go suite is unaffected; at compat 14 dh skips override_dh_auto_test entirely under DEB_BUILD_OPTIONS=nocheck.
- uscan found upstream releases with
debian/watch; a newer upstream version is available (upstream3.7.0, packaged3.6.0+dfsg), which is not a fault of the package. - Every pointer of
debian/copyrightto /usr/share/common-licenses names a file that is there (Apache-2.0).
Not confirmed ◂
- golang-github-intevation-jsonpath-dev is not in the archive lists nor in ftp-master's NEW queue as of 2026-10-28; if it does not exist the build fails. The lists can be some days old, so this is not proof.
- csaf-oasis-schemas is built by source csaf-oasis-schemas 2.0-1 in NEW; whether it installs the schemas as /usr/share/csaf/schemas/{csaf,provider,aggregator}_json_schema.json, the names the patched code reads, could not be checked.
Proposed changes ◂
None.
Uploader's response to the LLM review
Fixed, and the merge request is linked below.
https://salsa.debian.org/go-team/packages/golang-github-gocsaf-csaf/-/merge_requests/2
It is one line in a Comment field, nothing about the licences or the Files-Excluded, so it will go in the next revision.
— Juan Manuel Méndez Rey (mendezr), 10 days ago
Review Information
accepted — allocated to awm 10 days ago, started 10 days ago, completed 10 days ago.