DuQi
47d2303334
fix(inbounds): reject missing TLS certificates before saving ( #6429 )
...
An inbound could be saved with security "tls" and a certificate row carrying
neither a file path nor inline content. Nothing rejected it, so the row reached
xray-core, whose readFileOrString fails with "both file and bytes are empty"
and takes the whole config build down with it — every other inbound included.
Validate the credentials on both sides of the wire. validateInboundTLSCertificates
follows xray's file-over-inline precedence, requires a private key for every
non-verify certificate and insists on at least one server certificate, so a
verify-only CA list no longer passes as a server config. The inbound form's Zod
schema enforces the same rules per field and serializes only the editor mode the
operator actually used, and a failed save jumps to the Security tab naming the
certificate row that broke.
On update the guard is scoped to a real TLS edit. A row already stored
incomplete is grandfathered: it stays editable, and only a save that breaks a
previously valid block is refused.
A sub-node stores whatever the master pushes, and Remote.UpdateInbound falls
back to AddInbound when the node does not yet hold the tag, so a grandfathered
row could otherwise never be deployed or re-seeded — the rejection is swallowed
to a logger.Debug line and the node stays on a stale config while the panel
shows the client as cut off. The controller now marks a node-sync request (mTLS
or a node-sync token) on a per-request copy of InboundService, and the guard
steps aside for it on both add and update: the row was judged where the
operator acted, and a node that refuses it only falls out of sync. Operator and
admin-token saves are held to the guard as before.
The security union is parameterised on its tlsSettings branch instead of copied,
and tlsCertUsesFiles is the one file-vs-inline inference shared by the form
schema and the adapter, so the mode the editor opens in and the pair of fields
the save serializes cannot drift apart.
2026-09-08 18:08:24 +02:00
..
2026-07-17 00:33:06 +02:00
2026-09-02 20:20:10 +02:00
2026-09-02 20:46:49 +02:00
2026-09-08 14:15:37 +02:00
2026-09-08 14:12:13 +02:00
2026-07-17 00:33:06 +02:00
2026-08-15 16:50:20 +02:00
2026-06-27 12:08:20 +02:00
2026-07-05 02:06:58 +02:00
2026-07-17 00:33:06 +02:00
2026-08-18 12:46:00 +02:00
2026-08-18 12:46:00 +02:00
2026-07-05 21:17:25 +02:00
2026-08-24 02:41:15 +02:00
2026-08-24 02:41:15 +02:00
2026-07-17 00:33:06 +02:00
2026-08-24 02:41:15 +02:00
2026-09-07 02:19:16 +02:00
2026-06-27 15:42:22 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 20:53:42 +02:00
2026-09-07 14:24:14 +02:00
2026-09-04 01:01:20 +02:00
2026-07-11 22:48:51 +02:00
2026-08-24 02:41:15 +02:00
2026-09-07 02:19:16 +02:00
2026-07-11 22:48:57 +02:00
2026-07-07 15:05:22 +02:00
2026-07-05 20:28:26 +02:00
2026-08-01 15:19:08 +02:00
2026-09-07 01:51:18 +02:00
2026-06-24 13:02:42 +02:00
2026-06-10 15:19:22 +02:00
2026-08-23 21:57:03 +02:00
2026-08-18 13:55:04 +02:00
2026-06-11 12:04:02 +02:00
2026-08-14 19:50:06 +02:00
2026-08-23 23:17:56 +02:00
2026-07-02 09:17:47 +02:00
2026-08-14 19:50:06 +02:00
2026-08-21 14:17:05 +02:00
2026-08-21 14:17:05 +02:00
2026-08-20 04:09:57 +02:00
2026-08-24 02:41:15 +02:00
2026-09-07 14:24:14 +02:00
2026-08-24 13:27:40 +02:00
2026-08-20 04:09:57 +02:00
2026-08-20 04:09:57 +02:00
2026-07-17 00:33:06 +02:00
2026-08-23 23:17:56 +02:00
2026-07-28 22:38:44 +02:00
2026-08-24 02:41:15 +02:00
2026-09-07 14:24:14 +02:00
2026-07-30 02:49:32 +02:00
2026-09-04 15:23:41 +02:00
2026-08-18 13:08:44 +02:00
2026-08-15 16:50:20 +02:00
2026-07-07 12:00:43 +02:00
2026-06-10 15:19:22 +02:00
2026-08-23 23:17:56 +02:00
2026-08-01 15:19:08 +02:00
2026-08-23 21:57:03 +02:00
2026-08-18 13:08:44 +02:00
2026-09-07 14:24:14 +02:00
2026-08-24 02:41:15 +02:00
2026-08-15 16:50:20 +02:00
2026-09-07 14:24:14 +02:00
2026-08-15 16:50:20 +02:00
2026-08-15 16:50:20 +02:00
2026-07-05 20:28:26 +02:00
2026-08-24 02:41:15 +02:00
2026-08-24 02:41:15 +02:00
2026-08-15 16:50:20 +02:00
2026-07-23 15:34:42 +02:00
2026-07-05 20:28:26 +02:00
2026-08-18 15:24:59 +02:00
2026-06-27 15:42:22 +02:00
2026-07-28 14:43:55 +02:00
2026-08-15 17:12:59 +02:00
2026-08-14 19:42:09 +02:00
2026-07-30 03:14:22 +02:00
2026-07-08 23:35:20 +02:00
2026-07-23 18:52:42 +02:00
2026-08-18 15:24:59 +02:00
2026-08-24 02:41:15 +02:00
2026-08-24 02:41:15 +02:00
2026-08-23 21:57:03 +02:00
2026-08-22 23:12:33 +02:00
2026-08-18 11:53:11 +02:00
2026-08-14 19:42:09 +02:00
2026-09-02 20:39:03 +02:00
2026-08-14 19:42:09 +02:00
2026-06-10 15:19:22 +02:00
2026-08-24 13:27:40 +02:00
2026-07-23 15:34:42 +02:00
2026-07-02 16:24:18 +02:00
2026-08-20 04:09:57 +02:00
2026-08-18 11:48:40 +02:00
2026-08-15 23:09:16 +02:00
2026-08-14 19:42:09 +02:00
2026-09-08 18:08:24 +02:00
2026-08-01 15:19:08 +02:00
2026-07-17 00:33:06 +02:00
2026-07-28 13:14:06 +02:00
2026-06-24 13:02:42 +02:00
2026-08-15 23:09:16 +02:00
2026-08-22 23:11:42 +02:00
2026-09-08 15:36:57 +02:00
2026-07-21 15:57:55 +02:00
2026-08-14 20:10:39 +02:00
2026-08-15 23:09:16 +02:00
2026-07-07 01:13:24 +02:00
2026-07-07 01:13:24 +02:00
2026-08-01 15:19:08 +02:00
2026-07-06 17:55:57 +02:00
2026-07-17 00:33:06 +02:00
2026-08-01 15:19:08 +02:00
2026-06-22 20:20:55 +02:00
2026-08-24 13:27:40 +02:00
2026-09-04 02:34:53 +02:00
2026-08-23 23:17:56 +02:00
2026-09-07 14:24:14 +02:00
2026-07-03 01:12:32 +02:00
2026-08-24 02:41:15 +02:00
2026-08-24 02:41:15 +02:00
2026-07-08 20:31:00 +02:00
2026-08-20 04:09:57 +02:00
2026-06-12 12:03:22 +02:00
2026-06-27 11:22:45 +02:00
2026-08-15 21:48:24 +02:00
2026-07-05 20:18:59 +02:00
2026-09-08 18:08:24 +02:00
2026-08-24 02:41:15 +02:00
2026-07-27 14:21:56 +02:00
2026-07-28 23:27:09 +02:00
2026-09-07 14:24:14 +02:00
2026-09-08 15:36:57 +02:00
2026-06-12 12:03:22 +02:00
2026-09-08 18:08:24 +02:00
2026-07-17 00:33:06 +02:00
2026-06-26 00:10:30 +02:00
2026-07-25 16:08:09 +02:00
2026-07-07 01:13:24 +02:00
2026-09-04 01:01:20 +02:00
2026-07-08 22:12:28 +02:00
2026-08-23 23:17:56 +02:00
2026-07-07 15:05:23 +02:00
2026-08-23 23:17:56 +02:00
2026-07-23 15:35:11 +02:00
2026-07-23 15:35:11 +02:00
2026-06-20 01:09:53 +02:00
2026-08-23 23:17:56 +02:00
2026-09-03 18:06:35 +02:00
2026-08-23 23:17:56 +02:00
2026-09-07 14:24:14 +02:00
2026-08-15 16:03:42 +02:00
2026-08-15 21:31:31 +02:00
2026-06-16 12:19:33 +02:00
2026-08-23 23:17:56 +02:00
2026-09-08 14:12:13 +02:00
2026-08-01 15:19:08 +02:00
2026-06-22 20:20:55 +02:00
2026-08-23 23:17:56 +02:00
2026-08-20 04:09:57 +02:00
2026-08-23 23:17:56 +02:00
2026-08-14 20:01:35 +02:00
2026-08-15 16:48:50 +02:00
2026-07-08 22:12:28 +02:00
2026-07-23 15:35:11 +02:00
2026-09-04 02:35:11 +02:00
2026-07-23 15:34:42 +02:00
2026-09-02 20:46:20 +02:00
2026-09-02 20:46:20 +02:00
2026-08-24 02:41:15 +02:00
2026-08-24 02:41:15 +02:00
2026-08-18 13:47:59 +02:00
2026-08-18 13:47:59 +02:00
2026-07-17 00:33:06 +02:00
2026-07-08 22:10:54 +02:00
2026-09-05 20:49:15 +02:00
2026-07-12 20:14:22 +02:00
2026-07-12 20:14:22 +02:00
2026-07-06 09:24:18 +02:00
2026-06-24 21:22:42 +02:00
2026-06-20 00:37:35 +02:00
2026-09-08 14:12:13 +02:00
2026-07-14 13:01:40 +02:00
2026-08-14 20:03:54 +02:00
2026-08-15 21:31:31 +02:00
2026-08-23 21:57:03 +02:00
2026-08-15 21:31:31 +02:00
2026-08-18 16:02:11 +02:00
2026-09-03 16:34:37 +02:00
2026-07-28 22:12:52 +02:00
2026-09-08 17:14:01 +02:00
2026-09-08 17:14:01 +02:00
2026-06-17 14:11:35 +02:00
2026-07-12 00:30:47 +02:00
2026-08-23 22:34:20 +02:00
2026-09-02 20:21:27 +02:00
2026-09-02 20:21:27 +02:00
2026-06-10 15:19:22 +02:00
2026-07-05 20:28:26 +02:00
2026-07-17 00:33:06 +02:00
2026-07-02 16:12:46 +02:00
2026-08-14 19:42:09 +02:00
2026-06-10 15:19:22 +02:00
2026-06-17 15:55:47 +02:00
2026-08-24 13:27:40 +02:00
2026-08-24 13:27:40 +02:00
2026-07-02 16:12:46 +02:00
2026-07-27 14:37:57 +02:00
2026-08-24 02:41:15 +02:00
2026-07-02 16:12:46 +02:00
2026-07-29 21:00:29 +02:00
2026-09-03 18:06:15 +02:00
2026-07-23 15:34:42 +02:00
2026-07-23 15:34:42 +02:00
2026-07-17 00:33:06 +02:00
2026-07-23 15:34:42 +02:00
2026-07-23 15:34:42 +02:00
2026-07-17 00:33:06 +02:00
2026-07-17 00:33:06 +02:00
2026-07-21 15:51:46 +02:00
2026-07-29 21:00:29 +02:00
2026-06-15 00:43:49 +02:00
2026-09-02 20:45:11 +02:00
2026-06-23 17:38:16 +02:00
2026-09-03 18:06:15 +02:00