diff --git a/Makefile b/Makefile index 4cccaab..621febb 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ SOURCES := source INCLUDES := source # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer -VERSION := 3.1.6 +VERSION := 3.1.7 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk diff --git a/source/https.c b/source/https.c index 6a73c0b..f4804ef 100644 --- a/source/https.c +++ b/source/https.c @@ -35,7 +35,7 @@ u32 https_request(const char *server, const char *path, const char *form, const httpcSetKeepAlive(&ctx, HTTPC_KEEPALIVE_DISABLED); httpcAddTrustedRootCA(&ctx, caDer, caLen); // nur der MBMNET-CA vertrauen wir zusätzlich if (header && value) httpcAddRequestHeaderField(&ctx, header, value); - if (form) { + if (form && form[0]) { // leerer Text: POST ohne Inhalt u32 n = strlen(form); if (n >= sizeof(formBuf)) n = sizeof(formBuf) - 1; memcpy(formBuf, form, n); diff --git a/source/https.h b/source/https.h index 6aa9866..5fedb84 100644 --- a/source/https.h +++ b/source/https.h @@ -5,7 +5,8 @@ // 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. -// 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) // 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. diff --git a/source/logview.c b/source/logview.c index e7d126f..07706d2 100644 --- a/source/logview.c +++ b/source/logview.c @@ -261,13 +261,19 @@ static void worker(void *arg) if (j == JOB_NONE || !buf) continue; busy = true; 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); - snprintf(form, sizeof(form), "password=%s", enc); memset(password, 0, sizeof(password)); token[0] = 0; 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) { memcpy(token, buf, 64); token[64] = 0;