[asterisk-commits] bkruse: branch 1.6.0 r156652 - in /branches/1.6.0: ./ main/manager.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Nov 13 13:23:38 CST 2008


Author: bkruse
Date: Thu Nov 13 13:23:37 2008
New Revision: 156652

URL: http://svn.digium.com/view/asterisk?view=rev&rev=156652
Log:
Merged revisions 156017 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

........
r156017 | pari | 2008-11-11 17:02:43 -0600 (Tue, 11 Nov 2008) | 5 lines


 Patch by Ryan Brindley -- Make sure that manager refuses any duplicate 'new category' requests in updateconfig

(closes issue #13539)

........

Modified:
    branches/1.6.0/   (props changed)
    branches/1.6.0/main/manager.c

Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.0/main/manager.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/main/manager.c?view=diff&rev=156652&r1=156651&r2=156652
==============================================================================
--- branches/1.6.0/main/manager.c (original)
+++ branches/1.6.0/main/manager.c Thu Nov 13 13:23:37 2008
@@ -80,6 +80,7 @@
 	UNSPECIFIED_CATEGORY,
 	UNSPECIFIED_ARGUMENT,
 	FAILURE_ALLOCATION,
+	FAILURE_NEWCAT,
 	FAILURE_DELCAT,
 	FAILURE_EMPTYCAT,
 	FAILURE_UPDATE,
@@ -1244,30 +1245,38 @@
 	struct ast_category *category;
 	struct ast_variable *v;
 
-	for (x = 0; x < 100000; x++) {
+	for (x = 0; x < 100000; x++) {	//100000 = the max number of allowed updates + 1
 		unsigned int object = 0;
 
 		snprintf(hdr, sizeof(hdr), "Action-%06d", x);
 		action = astman_get_header(m, hdr);
-		if (ast_strlen_zero(action))
-			break;
+		if (ast_strlen_zero(action))		// breaks the for loop if no action header
+			break;				// this could cause problems if actions come in misnumbered
+
 		snprintf(hdr, sizeof(hdr), "Cat-%06d", x);
 		cat = astman_get_header(m, hdr);
+		if (ast_strlen_zero(cat))		//every action needs a category
+			return UNSPECIFIED_CATEGORY;
+
 		snprintf(hdr, sizeof(hdr), "Var-%06d", x);
 		var = astman_get_header(m, hdr);
+
 		snprintf(hdr, sizeof(hdr), "Value-%06d", x);
 		value = astman_get_header(m, hdr);
 		if (!ast_strlen_zero(value) && *value == '>') {
 			object = 1;
 			value++;
 		}
+
 		snprintf(hdr, sizeof(hdr), "Match-%06d", x);
 		match = astman_get_header(m, hdr);
+
 		snprintf(hdr, sizeof(hdr), "Line-%06d", x);
 		line = astman_get_header(m, hdr);
+
 		if (!strcasecmp(action, "newcat")) {
-			if (ast_strlen_zero(cat))
-				return UNSPECIFIED_CATEGORY;
+			if (ast_category_get(cfg,cat))	//check to make sure the cat doesn't
+				return FAILURE_NEWCAT;	//already exist
 			if (!(category = ast_category_new(cat, dfn, -1)))
 				return FAILURE_ALLOCATION;
 			if (ast_strlen_zero(match)) {
@@ -1275,37 +1284,33 @@
 			} else
 				ast_category_insert(cfg, category, match);
 		} else if (!strcasecmp(action, "renamecat")) {
-			if (ast_strlen_zero(cat) || ast_strlen_zero(value))
+			if (ast_strlen_zero(value))
 				return UNSPECIFIED_ARGUMENT;
 			if (!(category = ast_category_get(cfg, cat)))
 				return UNKNOWN_CATEGORY;
 			ast_category_rename(category, value);
 		} else if (!strcasecmp(action, "delcat")) {
-			if (ast_strlen_zero(cat))
-				return UNSPECIFIED_CATEGORY;
 			if (ast_category_delete(cfg, cat))
 				return FAILURE_DELCAT;
 		} else if (!strcasecmp(action, "emptycat")) {
-			if (ast_strlen_zero(cat))
-				return UNSPECIFIED_CATEGORY;
 			if (ast_category_empty(cfg, cat))
 				return FAILURE_EMPTYCAT;
 		} else if (!strcasecmp(action, "update")) {
-			if (ast_strlen_zero(cat) || ast_strlen_zero(var))
+			if (ast_strlen_zero(var))
 				return UNSPECIFIED_ARGUMENT;
 			if (!(category = ast_category_get(cfg,cat)))
 				return UNKNOWN_CATEGORY;
 			if (ast_variable_update(category, var, value, match, object))
 				return FAILURE_UPDATE;
 		} else if (!strcasecmp(action, "delete")) {
-			if (ast_strlen_zero(cat) || (ast_strlen_zero(var) && ast_strlen_zero(line)))
+			if ((ast_strlen_zero(var) && ast_strlen_zero(line)))
 				return UNSPECIFIED_ARGUMENT;
 			if (!(category = ast_category_get(cfg, cat)))
 				return UNKNOWN_CATEGORY;
 			if (ast_variable_delete(category, var, match, line))
 				return FAILURE_DELETE;
 		} else if (!strcasecmp(action, "append")) {
-			if (ast_strlen_zero(cat) || ast_strlen_zero(var))
+			if (ast_strlen_zero(var))
 				return UNSPECIFIED_ARGUMENT;
 			if (!(category = ast_category_get(cfg, cat)))
 				return UNKNOWN_CATEGORY;	
@@ -1315,7 +1320,7 @@
 				v->object = 1;
 			ast_variable_append(category, v);
 		} else if (!strcasecmp(action, "insert")) {
-			if (ast_strlen_zero(cat) || ast_strlen_zero(var) || ast_strlen_zero(line))
+			if (ast_strlen_zero(var) || ast_strlen_zero(line))
 				return UNSPECIFIED_ARGUMENT;
 			if (!(category = ast_category_get(cfg, cat)))
 				return UNKNOWN_CATEGORY;
@@ -1395,6 +1400,9 @@
 			break;
 		case FAILURE_ALLOCATION:
 			astman_send_error(s, m, "Memory allocation failure, this should not happen");
+			break;
+		case FAILURE_NEWCAT:
+			astman_send_error(s, m, "Create category did not complete successfully");
 			break;
 		case FAILURE_DELCAT:
 			astman_send_error(s, m, "Delete category did not complete successfully");




More information about the asterisk-commits mailing list