-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdeny.toml
More file actions
256 lines (246 loc) · 11.8 KB
/
Copy pathdeny.toml
File metadata and controls
256 lines (246 loc) · 11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# cargo-deny Konfiguration.
# Durchgesetzt in CI gemaess 04_safety_by_architecture.md §3.2.
[graph]
all-features = false
no-default-features = false
# Opt-in-only backends/transports that a default build never pulls. They carry
# licenses/deps we deliberately keep out of the public default scan (see the GPL
# policy in licenses below, §2.3). Newer cargo-deny (the public GitHub mirror
# runs a newer version than GitLab's pinned 0.19.4) traverses the optional graph
# even with `all-features = false`, so exclude them explicitly — version-robust
# and policy-preserving (we do NOT allow GPL; we scope the opt-in crate out).
# * wolfCrypt backend (GPL-3.0 OR wolfSSL-commercial) — feature `wolfcrypt`,
# needs libwolfssl / WOLFSSL_SRC; opt-in for users with a wolfSSL licence.
# * quinn / quinn-proto (QUIC transport) — pulls RUSTSEC-2026-0185 and a
# duplicate `untrusted`; opt-in transport, not in the default build.
exclude = [
"wolfcrypt-ring-compat",
"wolfcrypt-rs",
"wolfcrypt-sys",
"quinn",
"quinn-proto",
]
[advisories]
version = 2
yanked = "deny"
ignore = [
# RUSTSEC-2025-0134 (rustls-pemfile v2.2.0): deprecated; PEM-API
# ist nach `rustls-pki-types::pem::PemObject` migriert. Begruendung:
# rustls-pemfile-Verwendung in unseren Bridges ist read-only PEM-
# Parsing fuer X.509-Cert-Loading aus dem Filesystem, kein Untrust-
# Input-Path. Migrations-Aufwand ist Folge-Aufgabe ueber alle
# bridge-Crates (amqp/grpc/corba/bridge-security). Wiedervorlage
# wenn rustls 0.24 mit voll-PemObject API gemerged ist.
"RUSTSEC-2025-0134",
# RUSTSEC-2026-0041 (Decompressing invalid data leaks uninit memory):
# transitive via Compression-Crate-Welle (rc.2). Workaround: nicht
# uninitialized buffer fuer decompression nutzen. In unseren Bridges
# nutzen wir die Decompression nur fuer trusted-input (wire-format
# frames mit Length-Prefix). RC3-Folge-Audit fuer end-to-end-Pfade.
"RUSTSEC-2026-0041",
# RUSTSEC-2024-0436 (paste): unmaintained — `paste` crate ist no
# longer maintained. Transitiv via mehrere proc-macro-deps. Kein
# safety-bug, nur Maintenance-Warning. RC3-Pickup: alternative
# zu paste-Macro suchen (z.B. `pastey`, ein Fork).
"RUSTSEC-2024-0436",
# RUSTSEC-2023-0071 (rsa 0.9.10): Marvin-Attack — timing-Sidechannel
# auf private-key. Transitiv via zenoh-transport -> zerodds-zenoh-
# bridge. Begruendung: KEIN safe upgrade verfuegbar (siehe
# https://github.com/RustCrypto/RSA/issues/626). Workaround: nicht
# benutzen wo Angreifer Timing-Info beobachten koennen (lokale Use-
# Cases ok). RC3-Pickup: zenoh-bridge optional + warning im
# /bindings/zenoh/ Page bei aktivierter RSA-Authentication.
"RUSTSEC-2023-0071",
# RUSTSEC-2025-0141 (bincode 1.3.3): unmaintained — das bincode-Team
# hat die Entwicklung dauerhaft eingestellt (kein Safety-Bug; 1.3.3
# gilt als vollstaendig). Transitiv via webrtc-dtls 0.12.0 (neueste
# Version) -> coap-bridge + xrce. Kein direkter Hebel; webrtc-dtls
# pinnt bincode 1.x. Wiedervorlage wenn webrtc-dtls auf bincode 2.x
# oder einen Maintained-Fork migriert.
"RUSTSEC-2025-0141",
]
[licenses]
version = 2
# Erlaubte Lizenzen fuer Dependencies.
# Inkompatibel: GPL (ausschliesst embedded Integration per 07_risks_and_strategy.md §2.3).
# Eintraege bleiben im Allow-Set, auch wenn sie aktuell nicht von einer
# Dependency verwendet werden (Vorrats-Allowlist fuer kuenftige Crates).
allow = [
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"MIT",
"BSD-2-Clause",
"BSD-3-Clause",
"0BSD",
"ISC",
"Unicode-DFS-2016",
"Unicode-3.0",
"CC0-1.0",
"CDLA-Permissive-2.0",
"Zlib",
]
confidence-threshold = 0.9
unused-allowed-license = "allow"
# Per-Crate-Ausnahmen. MPL-2.0 ist file-level Copyleft und damit fuer
# Build-only / Dev-Deps unkritisch (kein Linking gegen unsere Binaries),
# aber wir wollen es nicht global oeffnen.
exceptions = [
# cbindgen: build-dep von dds-c-api zur C-Header-Generierung.
# Laeuft nur im Build-Schritt, keine Runtime-Linkage.
{ allow = ["MPL-2.0"], crate = "cbindgen" },
# option-ext: transitive dep via dirs (config-loader). MPL-2.0 ist
# file-level Copyleft — option-ext exports 1 trait, kein eigener
# source kommt zu uns rueber. Acceptable.
{ allow = ["MPL-2.0"], crate = "option-ext" },
]
[bans]
# Hochgestuft auf `deny` (war `warn`): mehrfach-Versionen einer Crate
# brechen die Pipeline. Bekannte transitive Windows-Shim-Duplikate
# sind in der `skip`-Liste explizit gewhitelistet — neue Duplikate
# (z.B. wenn ein Dep eine zweite `serde`/`tokio`-Version zieht)
# muessen damit aktiv geloest oder bewusst gewhitelistet werden,
# statt unbemerkt durchzuwandern.
multiple-versions = "deny"
wildcards = "deny"
# Workspace-interne path-Deps haben keine `version = "..."` und wuerden
# sonst als Wildcard zaehlen — das ist die uebliche Cargo-Praxis fuer
# unveroeffentlichte Sub-Crates.
allow-wildcard-paths = true
# Transitive Duplikate, die wir nicht aufloesen koennen, aber auch nicht
# materialisieren (Windows-Shims sind `#[cfg(windows)]` gated und werden
# auf unserem Linux-Build-Target nicht kompiliert). Jeder Eintrag mit
# Begruendung.
skip = [
# windows-sys: 0.45 via jni 0.21 (in dds-java-jni), 0.52 via
# ring/rustix/socket2/walkdir, 0.61 via clap-Stack.
{ crate = "windows-sys" },
# windows-targets: 0.42 via jni 0.21 (windows-sys 0.45),
# 0.52 via ring + socket2.
{ crate = "windows-targets" },
# windows_* target-shims: 0.42 (transitiv via jni → windows-sys 0.45)
# vs. 0.52 (via ring + socket2 → windows-sys 0.52) vs. 0.34 (via
# shared_memory in dds-transport-shm). Alle `#[cfg(windows)]`
# gated, auf Linux/macOS nicht kompiliert — daher akzeptabel.
# Aufraeumen wenn `jni` 0.22+ und `shared_memory` modernisiert
# werden (Backlog).
{ crate = "windows_aarch64_gnullvm" },
{ crate = "windows_aarch64_msvc" },
{ crate = "windows_i686_gnu" },
{ crate = "windows_i686_msvc" },
{ crate = "windows_x86_64_gnu" },
{ crate = "windows_x86_64_gnullvm" },
{ crate = "windows_x86_64_msvc" },
# bitflags 1.3.2 transitiv via shared_memory 0.12.4 -> nix 0.23.2
# (nur dds-transport-shm). Rest des Workspaces ist auf bitflags 2.x.
# Aufraeumen sobald shared_memory modernisiert wird (Backlog).
{ crate = "bitflags" },
# getrandom 0.2.x via rand 0.8 (shared_memory) und ring; 0.3.x via
# rand 0.9 (proptest); 0.4.x via tempfile (cbindgen build-dep).
# Drei Major-Versionen zugleich, alles transitiv ohne direkten
# Hebel im Workspace. Aufraeumen wenn rand/proptest/tempfile-Stack
# konsolidiert sind.
{ crate = "getrandom" },
# winnow 0.7 vs 1.0 transitiv via cbindgen -> toml + toml_parser
# (build-dep). Faellt weg sobald cbindgen seinen toml-Stack auf
# einheitliches winnow zieht.
{ crate = "winnow" },
# wit-bindgen 0.51 (wasip3 rc) vs 0.57 (wasip2) — gezogen durch
# getrandom-Backends fuer WASI-Targets. Transitive Folge der
# getrandom-Version-Spreizung.
{ crate = "wit-bindgen" },
# ----- rc.2 transitive-Welle (alle 15 aus rc.2 neuen Crates) -----
# Aus zenoh + rdkafka + neuen idl-Crates gezogen. Alle transitiv,
# kein direkter Hebel im Workspace. Aufraeumen wenn upstreams
# konvergieren. RC3-Followup: dep-konsolidierung-Welle.
# foldhash 0.1 (hashbrown 0.16) vs 0.2 (alternativ via indexmap).
{ crate = "foldhash" },
# hashbrown 0.14 (jni 0.21) + 0.15 (indexmap 2.7) + 0.16 (std-internal)
# + 0.17 (zenoh) — 4 Versionen parallel.
{ crate = "hashbrown" },
# itertools 0.13 (rdkafka) vs 0.14 (zenoh).
{ crate = "itertools" },
# memoffset 0.6.5 (nix 0.23 via shared_memory) vs 0.9 (nix 0.30).
{ crate = "memoffset" },
# nix 0.23 (shared_memory) vs 0.30 (zenoh).
{ crate = "nix" },
# r-efi 4.5 (getrandom 0.2 backends) vs 5.0 (getrandom 0.3 backends).
# Reine UEFI-Target-Shims, auf Linux/macOS nicht kompiliert.
{ crate = "r-efi" },
# rand 0.8 (shared_memory + älterer Stack) vs 0.9 (proptest, zenoh).
{ crate = "rand" },
{ crate = "rand_chacha" },
{ crate = "rand_core" },
# socket2 0.5 (transport-udp direct) vs 0.6 (zenoh).
{ crate = "socket2" },
# spin 0.9 (ring) vs 0.10 (lazy_static-modern). Standard-transitiv-Skew.
{ crate = "spin" },
# syn 1.x (proc-macro2-Generation 1) vs 2.x (modern proc-macros).
# syn 1 wird nur in build-deps + Macros gebraucht (nicht im
# Runtime-Pfad). Akzeptabel bis alle proc-macro-Deps auf syn 2 sind.
{ crate = "syn" },
# thiserror 1.x (älterer Stack — rdkafka, einige bridges) vs 2.x
# (workspace-modern). Konsolidierungs-Welle siehe RC3 followup.
{ crate = "thiserror" },
{ crate = "thiserror-impl" },
# toml_datetime 0.6 (cbindgen build-dep) vs 0.7 (modern toml-Stack).
{ crate = "toml_datetime" },
# hashlink 0.9 vs 0.10 — transitiv via rusqlite/lru-Stacks
# (durability-store-sqlite). Kein direkter Hebel im Workspace.
{ crate = "hashlink" },
# rustix 0.38 (älterer Stack) vs 1.x (moderne tempfile/io-Stacks),
# mit linux-raw-sys 0.4 (rustix 0.38) vs 0.9 (rustix 1.x). Beide
# transitiv ohne direkten Hebel.
{ crate = "rustix" },
{ crate = "linux-raw-sys" },
# ----- rc.3 transitive-Welle: zwei inkompatible x509-Dep-Baeume -----
# Die x509-parser-Familie wird in ZWEI Generationen gezogen, je aus
# einer Fremd-Crate, die ihre Version hart pinnt — kein direkter Hebel
# im Workspace:
# * ALT (0.16-Familie): webrtc-dtls 0.12.0 (neueste Version!) ->
# coap-bridge + xrce. Pinnt x509-parser 0.16 / asn1-rs 0.6 /
# der-parser 9 / oid-registry 0.7 + rcgen 0.13.
# * NEU (0.18-Familie): zenoh-link-tls/-commons 1.9 -> zenoh-bridge.
# Pinnt x509-parser 0.18 / asn1-rs 0.7 / der-parser 10 /
# oid-registry 0.8 + rcgen 0.14.
# Aufloesbar erst wenn webrtc-dtls eine x509-parser-0.18-Linie
# veroeffentlicht (Upstream-Backlog), bis dahin gewhitelistet.
{ crate = "asn1-rs" },
{ crate = "asn1-rs-derive" },
{ crate = "der-parser" },
{ crate = "oid-registry" },
{ crate = "rcgen" },
{ crate = "x509-parser" },
# ----- crypto-backend transitive skew (surfaced under --all-features) -----
# untrusted 0.7.1 (via aws-lc-rs) vs 0.9.0 (via ring). The two crypto
# backends pin different versions of this tiny input-parsing crate; both are
# legitimate backends (ring/aws-lc-rs swap via the `backend` alias), so the
# duplicate is transitive with no direct workspace lever. Only visible when a
# build activates both backends (e.g. --all-features on the public mirror).
{ crate = "untrusted" },
# ----- rc.6 transitive wave: RustCrypto 0.11-era via postgres -----
# tokio-postgres -> postgres-protocol pins the newer RustCrypto line
# (digest 0.11 / block-buffer 0.12 / crypto-common 0.2 / const-oid 0.10 /
# hmac 0.13 / sha2 + cpufeatures 0.3) while the rest of the workspace stays
# on the 0.10 line. Introduced by zerodds-durability-store-postgres (O11);
# transitive, no direct workspace lever. Clean up when postgres-protocol
# and the RustCrypto ecosystem converge.
{ crate = "block-buffer" },
{ crate = "const-oid" },
{ crate = "cpufeatures" },
{ crate = "crypto-common" },
{ crate = "digest" },
{ crate = "hmac" },
{ crate = "sha2" },
# fallible-iterator 0.2 (postgres-protocol) vs 0.3 (tokio-postgres stack).
{ crate = "fallible-iterator" },
# wasi 0.11 vs 0.14 — getrandom backend split (parallels the getrandom skew).
{ crate = "wasi" },
]
# Verbotene Crates. Ergaenzt durch Clippy disallowed-types in Safe-Crates.
deny = [
# Keine global-allocator-Hijacks ohne explizite Freigabe.
]
[sources]
unknown-registry = "deny"
unknown-git = "deny"
allow-registry = ["https://github.com/rust-lang/crates.io-index"]