Skip to content

Commit 121f7b6

Browse files
NookieAIclaude
andcommitted
Release v2.4.12 — fix GoldHEN/2121 directory listing (MLSD->LIST) + prefer port 2121
Root cause (found by testing against a live console): some PS5 FTP payloads (GoldHEN, usually port 2121) advertise MLSD in FEAT but return an EMPTY MLSD listing for non-empty dirs. basic-ftp trusted it and locked to MLSD, so every directory looked empty and 2121 scans found no games — even though plain LIST (what FileZilla uses) returns the contents. Override useDefaultSettings to force ['LIST','LIST -a'] for all FTP clients. Also: Find PS5 now scans/prefers 2121 before 1337 (PS5_PORTS + portPriority). Verified live: 2121 root now lists 29 entries (was 0), /data/etaHEN/games shows the game, 1337 still works, and an end-to-end API scan over 2121 finds the installed title. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 98f389d commit 121f7b6

5 files changed

Lines changed: 48 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,26 @@ All notable changes to PS5 Vault are documented here.
44

55
---
66

7+
## [2.4.12] — 2026
8+
9+
### Bug Fixes
10+
11+
**Directories now read correctly on GoldHEN-style FTP (port 2121)**
12+
Some PS5 FTP payloads (notably GoldHEN, usually on port 2121) advertise MLSD in their
13+
feature list but return an *empty* MLSD listing for non-empty folders. The FTP library
14+
trusted that empty result and showed every directory as empty — so scanning over 2121
15+
found no games even though the files were right there (FileZilla, which uses the plain
16+
LIST command, showed them fine). PS5 Vault now always uses LIST, so 2121/GoldHEN consoles
17+
scan correctly. Verified live: a scan over port 2121 now finds the installed games.
18+
19+
### Changes
20+
21+
**Find PS5 now tries and prefers port 2121 before 1337.** Discovery scans
22+
2121, 1337, 1338, 21, 9090 (in that order) and, when more than one is a valid FTP server
23+
on the same console, prefers 2121.
24+
25+
---
26+
727
## [2.4.11] — 2026
828

929
### Bug Fixes

help.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@
1111
<li><kbd>F1</kbd> opens this help at any time.</li>
1212
</ul>
1313
14-
<h3>What's New (v2.4.11)</h3>
14+
<h3>What's New (v2.4.12)</h3>
15+
<ul>
16+
<li><strong>GoldHEN / port 2121 fix</strong>: Consoles whose FTP runs on port 2121 (GoldHEN) now scan correctly. Previously their folders showed as empty because the payload's MLSD listing returns nothing — PS5 Vault now uses the plain LIST command, like FileZilla, so all your games are found.</li>
17+
<li><strong>Find PS5 port order</strong>: Discovery now tries and prefers port 2121 before 1337 (then 1338, 21, 9090).</li>
18+
</ul>
19+
20+
<h3>v2.4.11</h3>
1521
<ul>
1622
<li><strong>Verified release</strong>: This build passed an end-to-end test pass against a live PS5 — local and FTP scanning, local copy and FTP upload/download transfers, and the auto-updater all confirmed working. Also tightened the local developer API so a transfer of anything outside your scanned library is refused immediately.</li>
1723
</ul>

main.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,20 @@ const { execFile } = require('child_process');
1616
const ftp = require('basic-ftp');
1717
const os = require('os');
1818

19+
// ── PS5 FTP compatibility: force LIST instead of MLSD ─────────────────────────
20+
// Some PS5 FTP payloads (notably GoldHEN, commonly on port 2121) advertise MLST in
21+
// FEAT but return an EMPTY MLSD listing for non-empty directories. basic-ftp then
22+
// "succeeds" with 0 entries and locks to MLSD, so the app sees every directory as
23+
// empty even though a plain LIST returns the real contents (which is what FileZilla
24+
// uses). Override useDefaultSettings so every client uses LIST and never MLSD.
25+
{
26+
const _useDefaultSettings = ftp.Client.prototype.useDefaultSettings;
27+
ftp.Client.prototype.useDefaultSettings = async function () {
28+
await _useDefaultSettings.call(this);
29+
this.availableListCommands = ['LIST', 'LIST -a'];
30+
};
31+
}
32+
1933
const MAX_SCAN_DEPTH = 12;
2034
// Maximum concurrent dlClient connections during FTP scan.
2135
// PS5 FTP daemons (etaHEN/ftpsrv) support 3–4 simultaneous connections total.
@@ -3752,9 +3766,9 @@ ipcMain.handle('ps5-discover', async (_event, timeoutMs = 3000) => {
37523766
}
37533767
}
37543768

3755-
// Known PS5 homebrew FTP ports. 1337 (etaHEN/ftpsrv/John) and 2121 (GoldHEN) are
3756-
// the common ones and are tried/preferred first; the rest cover other payloads.
3757-
const PS5_PORTS = [1337, 2121, 1338, 21, 9090];
3769+
// Known PS5 homebrew FTP ports. 2121 (GoldHEN) and 1337 (etaHEN/ftpsrv/John) are the
3770+
// common ones and are tried/preferred first; the rest cover other payloads.
3771+
const PS5_PORTS = [2121, 1337, 1338, 21, 9090];
37583772
const tcpHits = []; // [{ip, port}] — raw TCP open
37593773
// Per-probe timeout — generous enough for Wi-Fi PS5s (~200ms RTT + buffer).
37603774
const perProbeTimeout = Math.max(800, Math.floor(timeoutMs / 4));
@@ -3827,7 +3841,7 @@ ipcMain.handle('ps5-discover', async (_event, timeoutMs = 3000) => {
38273841
// while its real server runs on 1337. Deduping first (picking 2121) would verify
38283842
// only 2121, get no banner, and discard the working 1337 — so the console was
38293843
// never found even though it was right there.
3830-
const portPriority = { 1337: 0, 2121: 1, 1338: 2, 21: 3, 9090: 4 };
3844+
const portPriority = { 2121: 0, 1337: 1, 1338: 2, 21: 3, 9090: 4 };
38313845
const verifiedAll = await Promise.all(
38323846
tcpHits.map(async h => ({ ...h, ok: await verifyFtp(h.ip, h.port) }))
38333847
);

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ps5-vault",
3-
"version": "2.4.11",
3+
"version": "2.4.12",
44
"description": "PS5 game library manager \u2014 scan, organise and transfer games via USB or FTP",
55
"main": "main.js",
66
"author": "PS5 Vault",

0 commit comments

Comments
 (0)