[xiph-commits] r13792 - icecast/trunk/icecast/src
karl at svn.xiph.org
karl at svn.xiph.org
Wed Sep 12 18:32:16 PDT 2007
Author: karl
Date: 2007-09-12 18:32:15 -0700 (Wed, 12 Sep 2007)
New Revision: 13792
Modified:
icecast/trunk/icecast/src/admin.c
Log:
make sure config lock is released in all failure cases of manageauth
Modified: icecast/trunk/icecast/src/admin.c
===================================================================
--- icecast/trunk/icecast/src/admin.c 2007-09-12 18:29:39 UTC (rev 13791)
+++ icecast/trunk/icecast/src/admin.c 2007-09-13 01:32:15 UTC (rev 13792)
@@ -711,23 +711,34 @@
xmlNodePtr node, srcnode, msgnode;
const char *action = NULL;
const char *username = NULL;
- const char *password = NULL;
char *message = NULL;
int ret = AUTH_OK;
ice_config_t *config = config_get_config ();
mount_proxy *mountinfo = config_find_mount (config, source->mount);
- if((COMMAND_OPTIONAL(client, "action", action))) {
+ do
+ {
if (mountinfo == NULL || mountinfo->auth == NULL)
{
WARN1 ("manage auth request for %s but no facility available", source->mount);
- config_release_config ();
- client_send_404 (client, "no such auth facility");
- return;
+ break;
}
- if (!strcmp(action, "add")) {
- COMMAND_REQUIRE(client, "username", username);
- COMMAND_REQUIRE(client, "password", password);
+ COMMAND_OPTIONAL(client, "action", action);
+ COMMAND_OPTIONAL (client, "username", username);
+
+ if (action == NULL)
+ break;
+
+ if (!strcmp(action, "add"))
+ {
+ const char *password = NULL;
+ COMMAND_OPTIONAL (client, "password", password);
+
+ if (username == NULL || password == NULL)
+ {
+ WARN1 ("manage auth request add for %s but no user/pass", source->mount);
+ break;
+ }
ret = mountinfo->auth->adduser(mountinfo->auth, username, password);
if (ret == AUTH_FAILED) {
message = strdup("User add failed - check the icecast error log");
@@ -739,8 +750,13 @@
message = strdup("User already exists - not added");
}
}
- if (!strcmp(action, "delete")) {
- COMMAND_REQUIRE(client, "username", username);
+ if (!strcmp(action, "delete"))
+ {
+ if (username == NULL)
+ {
+ WARN1 ("manage auth request delete for %s but no username", source->mount);
+ break;
+ }
ret = mountinfo->auth->deleteuser(mountinfo->auth, username);
if (ret == AUTH_FAILED) {
message = strdup("User delete failed - check the icecast error log");
@@ -749,31 +765,33 @@
message = strdup("User deleted");
}
}
- }
- doc = xmlNewDoc("1.0");
- node = xmlNewDocNode(doc, NULL, "icestats", NULL);
- srcnode = xmlNewChild(node, NULL, "source", NULL);
- xmlSetProp(srcnode, "mount", source->mount);
+ doc = xmlNewDoc("1.0");
+ node = xmlNewDocNode(doc, NULL, "icestats", NULL);
+ srcnode = xmlNewChild(node, NULL, "source", NULL);
+ xmlSetProp(srcnode, "mount", source->mount);
- if (message) {
- msgnode = xmlNewChild(node, NULL, "iceresponse", NULL);
- xmlNewChild(msgnode, NULL, "message", message);
- }
+ if (message) {
+ msgnode = xmlNewChild(node, NULL, "iceresponse", NULL);
+ xmlNewChild(msgnode, NULL, "message", message);
+ }
- xmlDocSetRootElement(doc, node);
+ xmlDocSetRootElement(doc, node);
- if (mountinfo && mountinfo->auth && mountinfo->auth->listuser)
- mountinfo->auth->listuser (mountinfo->auth, srcnode);
+ if (mountinfo && mountinfo->auth && mountinfo->auth->listuser)
+ mountinfo->auth->listuser (mountinfo->auth, srcnode);
+ config_release_config ();
+
+ admin_send_response(doc, client, response,
+ MANAGEAUTH_TRANSFORMED_REQUEST);
+ free (message);
+ xmlFreeDoc(doc);
+ return;
+ } while (0);
+
config_release_config ();
-
- admin_send_response(doc, client, response,
- MANAGEAUTH_TRANSFORMED_REQUEST);
- if (message) {
- free(message);
- }
- xmlFreeDoc(doc);
+ client_send_400 (client, "missing parameter");
}
static void command_kill_source(client_t *client, source_t *source,
More information about the commits
mailing list