Commit 59692221 authored by Michael Smith's avatar Michael Smith
Browse files

Fix relay stream listing. Remove seperate relay password, there's no

need for it.

svn path=/trunk/icecast/; revision=4464
parent df443176
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
/* Global commands */ /* Global commands */
#define COMMAND_LIST_MOUNTS 101 #define COMMAND_LIST_MOUNTS 101
#define COMMAND_RAW_STATS 102 #define COMMAND_RAW_STATS 102
#define COMMAND_RAW_LISTSTREAM 103
int admin_get_command(char *command) int admin_get_command(char *command)
{ {
...@@ -44,6 +45,8 @@ int admin_get_command(char *command) ...@@ -44,6 +45,8 @@ int admin_get_command(char *command)
return COMMAND_RAW_STATS; return COMMAND_RAW_STATS;
else if(!strcmp(command, "listmounts")) else if(!strcmp(command, "listmounts"))
return COMMAND_LIST_MOUNTS; return COMMAND_LIST_MOUNTS;
else if(!strcmp(command, "streamlist"))
return COMMAND_RAW_LISTSTREAM;
else else
return COMMAND_ERROR; return COMMAND_ERROR;
} }
...@@ -53,7 +56,7 @@ static void command_metadata(client_t *client, source_t *source); ...@@ -53,7 +56,7 @@ static void command_metadata(client_t *client, source_t *source);
static void command_show_listeners(client_t *client, source_t *source); static void command_show_listeners(client_t *client, source_t *source);
static void command_raw_stats(client_t *client); static void command_raw_stats(client_t *client);
static void command_list_mounts(client_t *client); static void command_list_mounts(client_t *client, int formatted);
static void admin_handle_mount_request(client_t *client, source_t *source, static void admin_handle_mount_request(client_t *client, source_t *source,
int command); int command);
...@@ -132,7 +135,10 @@ static void admin_handle_general_request(client_t *client, int command) ...@@ -132,7 +135,10 @@ static void admin_handle_general_request(client_t *client, int command)
command_raw_stats(client); command_raw_stats(client);
break; break;
case COMMAND_LIST_MOUNTS: case COMMAND_LIST_MOUNTS:
command_list_mounts(client); command_list_mounts(client, 1);
break;
case COMMAND_RAW_LISTSTREAM:
command_list_mounts(client, 0);
break; break;
default: default:
WARN0("General admin request not recognised"); WARN0("General admin request not recognised");
...@@ -300,17 +306,28 @@ static void command_raw_stats(client_t *client) { ...@@ -300,17 +306,28 @@ static void command_raw_stats(client_t *client) {
return; return;
} }
static void command_list_mounts(client_t *client) { static void command_list_mounts(client_t *client, int formatted) {
avl_node *node; avl_node *node;
source_t *source; source_t *source;
int bytes;
DEBUG0("List mounts request"); DEBUG0("List mounts request");
html_head(client); if(formatted) {
html_head(client);
html_write(client, html_write(client,
"<table><tr><td>Mountpoint</td><td>Fallback</td>" "<table><tr><td>Mountpoint</td><td>Fallback</td>"
"<td>Format</td><td>Listeners</td></tr>"); "<td>Format</td><td>Listeners</td></tr>");
}
else {
client->respcode = 200;
bytes = sock_write(client->con->sock,
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"\r\n");
if(bytes > 0) client->con->sent_bytes = bytes;
}
avl_tree_rlock(global.source_tree); avl_tree_rlock(global.source_tree);
...@@ -318,18 +335,25 @@ static void command_list_mounts(client_t *client) { ...@@ -318,18 +335,25 @@ static void command_list_mounts(client_t *client) {
while(node) { while(node) {
source = (source_t *)node->key; source = (source_t *)node->key;
html_write(client, if(formatted) {
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%ld</td></tr>", html_write(client,
source->mount, (source->fallback_mount != NULL)? "<tr><td>%s</td><td>%s</td><td>%s</td><td>%ld</td></tr>",
source->fallback_mount:"", source->format->format_description, source->mount, (source->fallback_mount != NULL)?
source->listeners); source->fallback_mount:"",
source->format->format_description, source->listeners);
}
else {
bytes = sock_write(client->con->sock, "%s\r\n", source->mount);
if(bytes > 0) client->con->sent_bytes += bytes;
}
node = avl_get_next(node); node = avl_get_next(node);
} }
avl_tree_unlock(global.source_tree); avl_tree_unlock(global.source_tree);
html_write(client, "</table></body></html>"); if(formatted)
html_write(client, "</table></body></html>");
client_destroy(client); client_destroy(client);
return; return;
......
...@@ -109,8 +109,6 @@ void config_clear(ice_config_t *c) ...@@ -109,8 +109,6 @@ void config_clear(ice_config_t *c)
xmlFree(c->admin); xmlFree(c->admin);
if (c->source_password && c->source_password != CONFIG_DEFAULT_SOURCE_PASSWORD) if (c->source_password && c->source_password != CONFIG_DEFAULT_SOURCE_PASSWORD)
xmlFree(c->source_password); xmlFree(c->source_password);
if (c->relay_password && c->relay_password != CONFIG_DEFAULT_SOURCE_PASSWORD)
xmlFree(c->relay_password);
if (c->admin_username) if (c->admin_username)
xmlFree(c->admin_username); xmlFree(c->admin_username);
if (c->admin_password) if (c->admin_password)
...@@ -260,7 +258,6 @@ static void _set_defaults(ice_config_t *configuration) ...@@ -260,7 +258,6 @@ static void _set_defaults(ice_config_t *configuration)
configuration->header_timeout = CONFIG_DEFAULT_HEADER_TIMEOUT; configuration->header_timeout = CONFIG_DEFAULT_HEADER_TIMEOUT;
configuration->source_timeout = CONFIG_DEFAULT_SOURCE_TIMEOUT; configuration->source_timeout = CONFIG_DEFAULT_SOURCE_TIMEOUT;
configuration->source_password = CONFIG_DEFAULT_SOURCE_PASSWORD; configuration->source_password = CONFIG_DEFAULT_SOURCE_PASSWORD;
configuration->relay_password = CONFIG_DEFAULT_RELAY_PASSWORD;
configuration->ice_login = CONFIG_DEFAULT_ICE_LOGIN; configuration->ice_login = CONFIG_DEFAULT_ICE_LOGIN;
configuration->fileserve = CONFIG_DEFAULT_FILESERVE; configuration->fileserve = CONFIG_DEFAULT_FILESERVE;
configuration->touch_interval = CONFIG_DEFAULT_TOUCH_FREQ; configuration->touch_interval = CONFIG_DEFAULT_TOUCH_FREQ;
...@@ -314,10 +311,6 @@ static void _parse_root(xmlDocPtr doc, xmlNodePtr node, ...@@ -314,10 +311,6 @@ static void _parse_root(xmlDocPtr doc, xmlNodePtr node,
if (configuration->source_password && configuration->source_password != CONFIG_DEFAULT_SOURCE_PASSWORD) xmlFree(configuration->source_password); if (configuration->source_password && configuration->source_password != CONFIG_DEFAULT_SOURCE_PASSWORD) xmlFree(configuration->source_password);
configuration->source_password = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); configuration->source_password = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
} }
} else if (strcmp(node->name, "relay-password") == 0) {
/* TODO: This is the backwards-compatibility location */
if (configuration->relay_password && configuration->relay_password != CONFIG_DEFAULT_RELAY_PASSWORD) xmlFree(configuration->relay_password);
configuration->relay_password = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
} else if (strcmp(node->name, "icelogin") == 0) { } else if (strcmp(node->name, "icelogin") == 0) {
tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
configuration->ice_login = atoi(tmp); configuration->ice_login = atoi(tmp);
...@@ -563,13 +556,6 @@ static void _parse_authentication(xmlDocPtr doc, xmlNodePtr node, ...@@ -563,13 +556,6 @@ static void _parse_authentication(xmlDocPtr doc, xmlNodePtr node,
configuration->source_password = configuration->source_password =
(char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1); (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
} }
} else if (strcmp(node->name, "relay-password") == 0) {
if (configuration->relay_password &&
configuration->relay_password !=
CONFIG_DEFAULT_RELAY_PASSWORD)
xmlFree(configuration->relay_password);
configuration->relay_password =
(char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
} else if (strcmp(node->name, "admin-password") == 0) { } else if (strcmp(node->name, "admin-password") == 0) {
if(configuration->admin_password) if(configuration->admin_password)
xmlFree(configuration->admin_password); xmlFree(configuration->admin_password);
......
...@@ -66,7 +66,6 @@ typedef struct ice_config_tag ...@@ -66,7 +66,6 @@ typedef struct ice_config_tag
int fileserve; int fileserve;
char *source_password; char *source_password;
char *relay_password;
char *admin_username; char *admin_username;
char *admin_password; char *admin_password;
......
...@@ -519,17 +519,6 @@ static int _check_pass_ice(http_parser_t *parser, char *correctpass) ...@@ -519,17 +519,6 @@ static int _check_pass_ice(http_parser_t *parser, char *correctpass)
return 1; return 1;
} }
int connection_check_relay_pass(http_parser_t *parser)
{
ice_config_t *config = config_get_config();
char *pass = config->relay_password;
if(!pass)
pass = config->source_password;
config_release_config();
return _check_pass_http(parser, "relay", pass);
}
int connection_check_admin_pass(http_parser_t *parser) int connection_check_admin_pass(http_parser_t *parser)
{ {
ice_config_t *config = config_get_config(); ice_config_t *config = config_get_config();
...@@ -769,35 +758,6 @@ static void _handle_get_request(connection_t *con, ...@@ -769,35 +758,6 @@ static void _handle_get_request(connection_t *con,
return; return;
} }
if (strcmp(uri, "/admin/streamlist") == 0) {
if (!connection_check_relay_pass(parser)) {
INFO0("Client attempted to fetch /admin/streamlist with bad password");
client_send_401(client);
} else {
avl_node *node;
source_t *s;
client->respcode = 200;
bytes = sock_write(client->con->sock,
"HTTP/1.0 200 OK\r\n\r\n");
if(bytes > 0) client->con->sent_bytes = bytes;
avl_tree_rlock(global.source_tree);
node = avl_get_first(global.source_tree);
while (node) {
s = (source_t *)node->key;
bytes = sock_write(client->con->sock, "%s\r\n", s->mount);
if(bytes > 0) client->con->sent_bytes += bytes;
else break;
node = avl_get_next(node);
}
avl_tree_unlock(global.source_tree);
client_destroy(client);
}
return;
}
global_lock(); global_lock();
if (global.clients >= client_limit) { if (global.clients >= client_limit) {
client_send_504(client, client_send_504(client,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment