v3.1.7: Log-Passwort per HTTPS-Kopfzeile (POST-Inhalt kam nicht an)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nico Meister
2026-10-26 21:46:53 +01:00
co-authored by Claude Opus 5.5
parent 7d49f1f342
commit e9a7bfb712
4 changed files with 13 additions and 6 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ SOURCES := source
INCLUDES := source INCLUDES := source
# Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer
VERSION := 3.1.6 VERSION := 3.1.7
APP_TITLE := MBMNET APP_TITLE := MBMNET
APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk
+1 -1
View File
@@ -35,7 +35,7 @@ u32 https_request(const char *server, const char *path, const char *form, const
httpcSetKeepAlive(&ctx, HTTPC_KEEPALIVE_DISABLED); httpcSetKeepAlive(&ctx, HTTPC_KEEPALIVE_DISABLED);
httpcAddTrustedRootCA(&ctx, caDer, caLen); // nur der MBMNET-CA vertrauen wir zusätzlich httpcAddTrustedRootCA(&ctx, caDer, caLen); // nur der MBMNET-CA vertrauen wir zusätzlich
if (header && value) httpcAddRequestHeaderField(&ctx, header, value); if (header && value) httpcAddRequestHeaderField(&ctx, header, value);
if (form) { if (form && form[0]) { // leerer Text: POST ohne Inhalt
u32 n = strlen(form); u32 n = strlen(form);
if (n >= sizeof(formBuf)) n = sizeof(formBuf) - 1; if (n >= sizeof(formBuf)) n = sizeof(formBuf) - 1;
memcpy(formBuf, form, n); memcpy(formBuf, form, n);
+2 -1
View File
@@ -5,7 +5,8 @@
// HTTPS zum MBMNET-Server mit der eigenen MBMNET-CA (dieselbe wie für Miiverse, siehe olvpatch.c). // HTTPS zum MBMNET-Server mit der eigenen MBMNET-CA (dieselbe wie für Miiverse, siehe olvpatch.c).
// Für alles mit Geheimnissen (Log-Passwort, Anmelde-Nachweis): nie im Klartext übers Netz. // Für alles mit Geheimnissen (Log-Passwort, Anmelde-Nachweis): nie im Klartext übers Netz.
// form: POST-Daten (application/x-www-form-urlencoded), NULL = GET // form: POST-Daten (application/x-www-form-urlencoded), "" = POST ohne Inhalt, NULL = GET
// Achtung: Der HTTP-Dienst des 3DS schickte POST-Inhalt bei uns nicht mit - Geheimnisse in Kopfzeilen.
// header: zusätzliche Kopfzeile "Name" mit Wert value (NULL = keine) // header: zusätzliche Kopfzeile "Name" mit Wert value (NULL = keine)
// date: bekommt die Date-Kopfzeile der Antwort (NULL = egal) // date: bekommt die Date-Kopfzeile der Antwort (NULL = egal)
// Gibt den HTTP-Status zurück, 0 bei Netzwerkfehler (*rcOut = Code). out wird mit 0 abgeschlossen. // Gibt den HTTP-Status zurück, 0 bei Netzwerkfehler (*rcOut = Code). out wird mit 0 abgeschlossen.
+9 -3
View File
@@ -261,13 +261,19 @@ static void worker(void *arg)
if (j == JOB_NONE || !buf) continue; if (j == JOB_NONE || !buf) continue;
busy = true; busy = true;
if (j == JOB_LOGIN) { if (j == JOB_LOGIN) {
char form[160], enc[140]; // Passwort in der Kopfzeile X-Logs-Password (URL-kodiert, nur HTTPS). Als POST-Inhalt kam es nicht an:
// Der HTTP-Dienst des 3DS schickte 0 Bytes.
char enc[200];
url_encode(enc, sizeof(enc), password); url_encode(enc, sizeof(enc), password);
snprintf(form, sizeof(form), "password=%s", enc);
memset(password, 0, sizeof(password)); memset(password, 0, sizeof(password));
token[0] = 0; token[0] = 0;
u32 len; u32 len;
u32 code = request("/mbmnet/logs/login", form, buf, 256, &len); char date[64];
Result hrc = 0;
u32 code = https_request(server, "/mbmnet/logs/login", "", "X-Logs-Password", enc, buf, 256, &len, date, sizeof(date), &hrc);
memset(enc, 0, sizeof(enc));
if (date[0]) sync_clock(date);
if (!code) snprintf(status, sizeof(status), "Keine Verbindung (%08lX)", (unsigned long)hrc);
if (code == 200 && len == 64) { if (code == 200 && len == 64) {
memcpy(token, buf, 64); memcpy(token, buf, 64);
token[64] = 0; token[64] = 0;