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 +101 -0
- package/package.json +2 -1
- package/readdir-compat.js +247 -419
- package/smb-client.js +37 -83
- package/tools/diag-basepath.js +115 -0
- package/tools/diag-wire.js +352 -0
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.
|
|
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"
|