[asterisk-commits] rmudgett: branch 13 r428572 - in /branches/13: ./ main/manager.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Nov 21 13:09:18 CST 2014
Author: rmudgett
Date: Fri Nov 21 13:09:13 2014
New Revision: 428572
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=428572
Log:
manager: Fix could not extend string messages.
When shutting down Asterisk that has an active AMI connection, you get
several "failed to extend from %d to %d" messages because use of the
EVENT_FLAG_SHUTDOWN attempts to add all AMI permission strings to the
event.
* Created MAX_AUTH_PERM_STRING to use when creating stack based struct
ast_str variables used with the authority_to_str() and
user_authority_to_str() functions instead of a variety of magic numbers
that could be too small.
* Added a special check for EVENT_FLAG_SHUTDOWN to authority_to_str() so
it will not attempt to add all permission level strings.
Review: https://reviewboard.asterisk.org/r/4200/
........
Merged revisions 428570 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 428571 from http://svn.asterisk.org/svn/asterisk/branches/12
Modified:
branches/13/ (props changed)
branches/13/main/manager.c
Propchange: branches/13/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.
Modified: branches/13/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/branches/13/main/manager.c?view=diff&rev=428572&r1=428571&r2=428572
==============================================================================
--- branches/13/main/manager.c (original)
+++ branches/13/main/manager.c Fri Nov 21 13:09:13 2014
@@ -1846,6 +1846,9 @@
{ 0, "none" },
};
+/*! Maximum string length of the AMI authority permission string buildable from perms[]. */
+#define MAX_AUTH_PERM_STRING 150
+
/*! \brief Checks to see if a string which can be used to evaluate functions should be rejected */
static int function_capable_string_allowed_with_auths(const char *evaluating, int writepermlist)
{
@@ -1874,8 +1877,10 @@
}
}
- if (ast_str_strlen(*res) == 0) /* replace empty string with something sensible */
+ if (ast_str_strlen(*res) == 0) {
+ /* replace empty string with something sensible */
ast_str_append(res, 0, "<none>");
+ }
return ast_str_buffer(*res);
}
@@ -1889,15 +1894,19 @@
char *sep = "";
ast_str_reset(*res);
- for (i = 0; i < ARRAY_LEN(perms) - 1; i++) {
- if (authority & perms[i].num) {
- ast_str_append(res, 0, "%s%s", sep, perms[i].label);
- sep = ",";
- }
- }
-
- if (ast_str_strlen(*res) == 0) /* replace empty string with something sensible */
+ if (authority != EVENT_FLAG_SHUTDOWN) {
+ for (i = 0; i < ARRAY_LEN(perms) - 1; i++) {
+ if (authority & perms[i].num) {
+ ast_str_append(res, 0, "%s%s", sep, perms[i].label);
+ sep = ",";
+ }
+ }
+ }
+
+ if (ast_str_strlen(*res) == 0) {
+ /* replace empty string with something sensible */
ast_str_append(res, 0, "<none>");
+ }
return ast_str_buffer(*res);
}
@@ -2166,7 +2175,7 @@
AST_RWLIST_UNLOCK(&actions);
return ret;
}
- authority = ast_str_alloca(80);
+ authority = ast_str_alloca(MAX_AUTH_PERM_STRING);
if (a->argc < 4) {
return CLI_SHOWUSAGE;
}
@@ -2271,8 +2280,8 @@
struct ast_manager_user *user = NULL;
int l, which;
char *ret = NULL;
- struct ast_str *rauthority = ast_str_alloca(128);
- struct ast_str *wauthority = ast_str_alloca(128);
+ struct ast_str *rauthority = ast_str_alloca(MAX_AUTH_PERM_STRING);
+ struct ast_str *wauthority = ast_str_alloca(MAX_AUTH_PERM_STRING);
struct ast_variable *v;
switch (cmd) {
@@ -3960,7 +3969,7 @@
static int action_listcommands(struct mansession *s, const struct message *m)
{
struct manager_action *cur;
- struct ast_str *temp = ast_str_alloca(256);
+ struct ast_str *temp = ast_str_alloca(MAX_AUTH_PERM_STRING);
astman_start_ack(s, m);
AST_RWLIST_RDLOCK(&actions);
@@ -4049,8 +4058,9 @@
if ((s->session->send_events & EVENT_FLAG_SYSTEM)
&& (s->session->readperm & EVENT_FLAG_SYSTEM)
&& ast_test_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED)) {
- struct ast_str *auth = ast_str_alloca(80);
+ struct ast_str *auth = ast_str_alloca(MAX_AUTH_PERM_STRING);
const char *cat_str = authority_to_str(EVENT_FLAG_SYSTEM, &auth);
+
astman_append(s, "Event: FullyBooted\r\n"
"Privilege: %s\r\n"
"Status: Fully Booted\r\n\r\n", cat_str);
@@ -6540,7 +6550,7 @@
RAII_VAR(struct ao2_container *, sessions, ao2_global_obj_ref(mgr_sessions), ao2_cleanup);
struct mansession_session *session;
struct manager_custom_hook *hook;
- struct ast_str *auth = ast_str_alloca(80);
+ struct ast_str *auth = ast_str_alloca(MAX_AUTH_PERM_STRING);
const char *cat_str;
va_list ap;
struct timeval now;
More information about the asterisk-commits
mailing list