From e306bbf72ed6bd6cd149b28f30f22d1777e2f657 Mon Sep 17 00:00:00 2001 From: "F. Duncanh" Date: Thu, 5 Jun 2025 12:49:04 -0400 Subject: [PATCH] cleanup to fix bug/regression in -reg option --- lib/pairing.c | 5 ++--- lib/pairing.h | 2 +- lib/raop_handlers.h | 13 ++++--------- uxplay.cpp | 2 +- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/pairing.c b/lib/pairing.c index b6141bd..3660e6e 100644 --- a/lib/pairing.c +++ b/lib/pairing.c @@ -626,11 +626,10 @@ srp_confirm_pair_setup(pairing_session_t *session, pairing_t *pairing, return epk_len; } -void access_client_session_data(pairing_session_t *session, char **username, char **client_pk64, bool *setup) { +void get_pairing_session_client_data(pairing_session_t *session, char **username, char **client_pk64) { int len64 = 4 * (1 + (ED25519_KEY_SIZE / 3)) + 1; - setup = &(session->pair_setup); *username = session->username; - if (setup) { + if (session->pair_setup) { *client_pk64 = (char *) malloc(len64); pk_to_base64(session->client_pk, ED25519_KEY_SIZE, *client_pk64, len64); } else { diff --git a/lib/pairing.h b/lib/pairing.h index 83075d0..cdb1374 100644 --- a/lib/pairing.h +++ b/lib/pairing.h @@ -60,7 +60,7 @@ int srp_validate_proof(pairing_session_t *session, pairing_t *pairing, const uns int len_A, unsigned char *proof, int client_proof_len, int proof_len); int srp_confirm_pair_setup(pairing_session_t *session, pairing_t *pairing, unsigned char *epk, unsigned char *auth_tag); -void access_client_session_data(pairing_session_t *session, char **username, char **client_pk, bool *setup); +void get_pairing_session_client_data(pairing_session_t *session, char **username, char **client_pk); void ed25519_pk_to_base64(const unsigned char *pk, char **pk64); int pairing_session_make_nonce(pairing_session_t *session, uint64_t *local_time, const char *client_data, unsigned char *nonce, int len); bool pairing_digest_verify(const char *method, const char * authorization, const char *password); diff --git a/lib/raop_handlers.h b/lib/raop_handlers.h index 81dbf0b..37d3db9 100644 --- a/lib/raop_handlers.h +++ b/lib/raop_handlers.h @@ -690,16 +690,11 @@ raop_handler_setup(raop_conn_t *conn, conn->raop->callbacks.report_client_request(conn->raop->callbacks.cls, deviceID, model, name, &admit_client); } if (admit_client && deviceID && name && conn->raop->callbacks.register_client) { - bool pending_registration = false;; char *client_device_id = NULL; - char *client_pk = NULL; /* encoded as null-terminated base64 string*/ - access_client_session_data(conn->session, &client_device_id, &client_pk, &pending_registration); - if (pending_registration) { - if (client_pk && !strcmp(deviceID, client_device_id)) { - conn->raop->callbacks.register_client(conn->raop->callbacks.cls, client_device_id, client_pk, name); - } - } - if (client_pk) { + char *client_pk = NULL; /* encoded as null-terminated base64 string, must be freed*/ + get_pairing_session_client_data(conn->session, &client_device_id, &client_pk); + if (client_pk && !strcmp(deviceID, client_device_id)) { + conn->raop->callbacks.register_client(conn->raop->callbacks.cls, client_device_id, client_pk, name); free (client_pk); } } diff --git a/uxplay.cpp b/uxplay.cpp index 7fb0815..b869806 100644 --- a/uxplay.cpp +++ b/uxplay.cpp @@ -1226,7 +1226,7 @@ static void parse_arguments (int argc, char *argv[]) { pairing_register.append(argv[++i]); const char * fn = pairing_register.c_str(); if (!file_has_write_access(fn)) { - fprintf(stderr, "%s cannot be written to:\noption \"-key \" must be to a file with write access\n", fn); + fprintf(stderr, "%s cannot be written to:\noption \"-reg \" must be to a file with write access\n", fn); exit(1); } }