From 0d35359c4805a894293eb6ed19b305ff3b9a438b Mon Sep 17 00:00:00 2001 From: "C. S" Date: Tue, 13 Nov 2018 10:50:51 -0500 Subject: [PATCH] Add shoutcast user auth and mount designation --- src/admin.c | 15 ++++++++------- src/connection.c | 17 +++++++++-------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/admin.c b/src/admin.c index 8f2cb297..7591f232 100644 --- a/src/admin.c +++ b/src/admin.c @@ -335,21 +335,22 @@ int admin_handle_request (client_t *client, const char *uri) if(login_pass) *login_pass++ = '\0'; if(login_mount) *login_mount++ = '\0'; - client->username = strdup(login_pass && (!login_mount || (login_mount && login_mount > pass_copy +1)) ? pass_copy : "source"); - client->password = strdup(login_pass && login_pass < login_end ? login_pass : pass_copy); + client->username = strdup(login_pass && (!login_mount + || (login_mount && login_mount > pass_copy +1)) ? pass_copy : "source"); + client->password = strdup(login_pass && login_pass < login_end + ? login_pass : pass_copy); if (mount == NULL) { if (login_mount && login_mount < login_end) { - if(*login_mount != '/') - *--login_mount = '/'; - httpp_set_query_param (client->parser, "mount", login_mount); + if(*login_mount != '/') *--login_mount = '/'; + httpp_set_query_param (client->parser, "mount", login_mount); } else if (client->server_conn && client->server_conn->shoutcast_mount) { - httpp_set_query_param (client->parser, "mount", - client->server_conn->shoutcast_mount); + httpp_set_query_param (client->parser, "mount", + client->server_conn->shoutcast_mount); } mount = httpp_get_query_param (client->parser, "mount"); } diff --git a/src/connection.c b/src/connection.c index bb65c4e4..f6eba9bb 100644 --- a/src/connection.c +++ b/src/connection.c @@ -1163,20 +1163,21 @@ static int shoutcast_source_client (client_t *client) if(login_mount) *login_mount++ = '\0'; snprintf (header, sizeof(header), "%s:%s", - login_pass && (!login_mount || (login_mount && login_mount > refbuf->data +1)) ? refbuf->data : "source", + login_pass && (!login_mount || (login_mount && login_mount > refbuf->data +1)) + ? refbuf->data : "source", login_pass && login_pass < login_end ? login_pass : refbuf->data ); if(login_mount && login_mount < login_end) { - if(*login_mount != '/') - *--login_mount = '/'; + if(*login_mount != '/') *--login_mount = '/'; - // Reject mounts with "unsafe" characters. Behavior is unpredictable/undesirable - if (!util_url_safe(login_mount +1)) { - INFO1("rejected mount '%s'", login_mount); - break; - } + // Reject mounts with "unsafe" characters. Behavior is unpredictable/undesirable + if (!util_url_safe(login_mount +1)) + { + INFO1("rejected mount '%s'", login_mount); + break; + } } else { login_mount = client->server_conn->shoutcast_mount; }