saltcorn-samba 0.4.11 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,107 @@ All notable changes to `saltcorn-samba` are documented here.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [0.4.13] – 2026-07-06
8
+
9
+ ### Fixed – **QUERY_DIRECTORY leere Patterns → 0xC0000033 (die eigentliche Ursache)**
10
+
11
+ Mit v0.4.12 wurde ein Wire-Bug in smb3-client (FileNameOffset) gefixt,
12
+ aber Samba lehnte weiterhin ab. Mit dem neuen `tools/diag-wire.js` konnte
13
+ die tatsächliche Ursache byteweise verifiziert werden:
14
+
15
+ **Bug:** smb3-client's `readdirAll` sendet ab der 2. Enumeration-Seite
16
+ `searchPattern=""` (leerer String). Windows toleriert das, aber Samba's
17
+ `source3/smbd/smb2_query_directory.c` enthält den strikten Check:
18
+
19
+ ```c
20
+ if (state->in_file_name[0] == '\0') {
21
+ tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_INVALID);
22
+ return tevent_req_post(req, ev);
23
+ }
24
+ ```
25
+
26
+ Das ergibt exakt den STATUS_OBJECT_NAME_INVALID (0xC0000033), den wir
27
+ seit v0.4.0 sehen.
28
+
29
+ **Fix in `readdir-compat.js`:** Der eigene Enumeration-Loop sendet auf
30
+ **jeder** Seite `searchPattern="*"`, nicht nur beim ersten Request.
31
+ `RESTART_SCANS` wird nur beim ersten Request gesetzt; ab dann sendet
32
+ Samba nach dem letzten Batch korrekt STATUS_NO_MORE_FILES, was den Loop
33
+ sauber terminiert. Verifiziert via `diag-wire.js`:
34
+
35
+ - Probe 1 (pat=`*`, RESTART): STATUS_SUCCESS, 8 Einträge
36
+ - Probe 2 (pat=`*`, ohne RESTART): STATUS_NO_MORE_FILES → Loop-Ende
37
+ - Probe 6 (pat=`""`, offset=0): **0xC0000033** ← der Bug
38
+
39
+ ### Added
40
+
41
+ - `tools/diag-wire.js` – Wire-Level-Diagnose mit Hex-Dump der SMB2-Bytes,
42
+ testet 6 verschiedene QUERY_DIRECTORY-Varianten (Info-Class, Buffer-
43
+ Größe, mit/ohne Pattern). Nützlich für zukünftige Kompatibilitäts-
44
+ probleme mit anderen SMB-Servern.
45
+
46
+ ### Upstream-Report aktualisiert
47
+
48
+ `smb3-client-bug-report.md` beschreibt jetzt beide Bugs (FileNameOffset
49
+ **und** leeres Pattern gegen Samba). Beide Fixes sind identisch simpel:
50
+ auf jeder Page `*` senden.
51
+
52
+ ## [0.4.12] – 2026-07-06
53
+
54
+ ### Fixed – **`0xC0000033` beim readdir gegen Samba 4.23 endgültig behoben (Root Cause identifiziert)**
55
+
56
+ Nach ausführlicher Wire-Level-Analyse (siehe `smb-diag-report.txt`
57
+ aus 0.4.11) ist die eigentliche Ursache identifiziert:
58
+
59
+ **Bug in `smb3-client@0.2.0`, Datei `dist/wire/structs/queryDirectory.js`:**
60
+ Der Encoder für SMB2 QUERY_DIRECTORY setzt das `FileNameOffset`-Feld
61
+ immer hart auf 96, auch wenn `FileNameLength = 0` gesendet wird
62
+ (z. B. auf der 2. und folgenden Enumeration-Seite).
63
+ [MS-SMB2 §2.2.33](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/10906442-294c-46d3-8515-c277efe1f752)
64
+ verlangt für diesen Fall **`FileNameOffset = 0`**.
65
+ Windows Server toleriert die Fehlbelegung, Samba 4.23 lehnt sie
66
+ strikt mit `STATUS_OBJECT_NAME_INVALID` (`0xC0000033`) ab —
67
+ deshalb funktioniert nichts, was das Listing über mehrere Pages
68
+ braucht, wovon `smb3-client` grundsätzlich ausgeht.
69
+
70
+ ### Fix
71
+
72
+ Die frühere `readdir-compat.js` (die 3 FileInformationClass-Werte
73
+ durchprobierte) ist ersetzt durch einen echten **Wire-Format-Patch**:
74
+
75
+ - Eigener spec-konformer `encodeQueryDirectoryRequest`-Encoder in
76
+ `readdir-compat.js`
77
+ - Eigene QUERY_DIRECTORY-Loop, die den gepatchten Encoder verwendet
78
+ - Wiederverwendung von `Open.withOpen` aus `smb3-client` (Open, Close,
79
+ Tree-Connect bleiben unverändert) via dynamischem ESM-Import über
80
+ `file://` URLs (das `exports`-Gate von `smb3-client` sperrt sonst
81
+ jeden Subpath-Import)
82
+ - `smb-client.js` nutzt jetzt ausschließlich `readdirCompat` als
83
+ readdir-Pfad. Kein Fallback mehr auf das kaputte `client.readdir()`.
84
+ - Bonus: Die Rich-Dirents aus dem gepatchten QUERY_DIRECTORY liefern
85
+ Name, Größe, mtime und ctime in einem Roundtrip. Der bisherige
86
+ Fan-out mit einem `stat()`-Aufruf pro Eintrag entfällt — große
87
+ Verzeichnisse werden dadurch **deutlich schneller**.
88
+
89
+ ### Bekannt – Upstream-Fix eingereicht
90
+
91
+ Parallel wurde ein Bug-Report an `smb3-client` (GitHub:
92
+ `euricojardim/smb3-client`) vorbereitet inklusive Reproduktions-
93
+ Diagnose und Patch-Vorschlag. Sobald der Upstream-Fix in einer
94
+ neuen `smb3-client`-Version verfügbar ist, kann dieses Plugin die
95
+ `readdir-compat.js` wieder entfernen und die eingebaute API direkt
96
+ nutzen.
97
+
98
+ ### Migration – keine Konfigurationsänderung nötig
99
+
100
+ Der Fix greift automatisch. Der gelbe Hinweis „Basispfad bestätigt,
101
+ aber Auflisten funktioniert nicht“ aus 0.4.9–0.4.11 fällt weg, weil
102
+ das Auflisten jetzt tatsächlich funktioniert. Der File-Manager
103
+ zeigt Ordner-Inhalte, die Baum-Ansicht rendert Verzeichnis-Bäume,
104
+ PDF-Ansicht und Datei-Downloads funktionieren unverändert.
105
+
106
+ ---
107
+
7
108
  ## [0.4.11] – 2026-07-06
8
109
 
9
110
  ### Changed – **Ehrliche Fehlerpropagation statt stiller Fallback**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "saltcorn-samba",
3
- "version": "0.4.11",
3
+ "version": "0.4.13",
4
4
  "description": "Saltcorn plugin: browse, upload, rename and delete files on a Samba/CIFS share via SMB 3.1.1 (AES-CMAC signing, optional encryption). File-manager view, directory tree, inline PDF viewer, external-app open (smb://).",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -44,6 +44,7 @@
44
44
  "filemanager-view.js",
45
45
  "pdf-view.js",
46
46
  "public/",
47
+ "tools/",
47
48
  "README.md",
48
49
  "CHANGELOG.md",
49
50
  "LICENSE"