]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Several manager changes:
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 10 Jan 2008 00:12:35 +0000 (00:12 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 10 Jan 2008 00:12:35 +0000 (00:12 +0000)
1) Add the Dialplan class, for NewExten and VarSet events, which should cut
down on the volume of traffic in the Call class.
2) Permit some commands to be run from multiple classes, such as allowing
DBGet to be run from either the System or the Reporting class.
3) Heavily document each class in the sample config, as there were several
that made no sense to be in the write= line, and two that made no sense to be
in the read= line (since they controlled no permissions there).

(Closes issue #10386)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@97651 65c4cc65-6c06-0410-ace0-fbb531ad65f3

12 files changed:
CHANGES
apps/app_stack.c
apps/app_voicemail.c
channels/chan_iax2.c
channels/chan_sip.c
configs/manager.conf.sample
include/asterisk/manager.h
main/db.c
main/manager.c
main/pbx.c
pbx/pbx_realtime.c
res/res_features.c

diff --git a/CHANGES b/CHANGES
index 3080c2f0563dd460c8cc99a22fb95bdb52b6c10d..8200fb89f0e4e975a0a6eb2ddab9bfcb9967671f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -35,6 +35,10 @@ AMI - The manager (TCP/TLS/HTTP)
   * Added Masquerade manager event for when a masquerade happens between
      two channels.
   * Added "manager reload" command for the CLI
+  * Lots of commands that only provided information are now allowed under the
+     Reporting privilege, instead of only under Call or System.
+  * The IAX* commands now require either System or Reporting privilege, to
+     mirror the privileges of the SIP* commands.
 
 Dialplan functions
 ------------------
index 341b4c1d995ff4686969775576843847ec9febe0..7f53aff15205b9a38f513b6ddb3a55b24fbe32f4 100644 (file)
@@ -100,7 +100,7 @@ static int frame_set_var(struct ast_channel *chan, struct gosub_stack_frame *fra
                } else
                        pbx_builtin_setvar_helper(chan, var, value);
 
-               manager_event(EVENT_FLAG_CALL, "VarSet", 
+               manager_event(EVENT_FLAG_DIALPLAN, "VarSet", 
                        "Channel: %s\r\n"
                        "Variable: LOCAL(%s)\r\n"
                        "Value: %s\r\n"
index 67d605d1fefe2ae85ac1665ab15bd6b0d09dcd73..f0b137cfc4f19cd405d9a98f157264fb19c9a0da 100644 (file)
@@ -8745,7 +8745,7 @@ static int load_module(void)
        res |= ast_register_application(app3, vm_box_exists, synopsis_vm_box_exists, descrip_vm_box_exists);
        res |= ast_register_application(app4, vmauthenticate, synopsis_vmauthenticate, descrip_vmauthenticate);
        res |= ast_custom_function_register(&mailbox_exists_acf);
-       res |= ast_manager_register("VoicemailUsersList", EVENT_FLAG_CALL, manager_list_voicemail_users, "List All Voicemail User Information");
+       res |= ast_manager_register("VoicemailUsersList", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, manager_list_voicemail_users, "List All Voicemail User Information");
        if (res)
                return res;
 
index 35107fa7b1afa7b2f502e26549cd4c3c1d9c0a16..2ad6d8c9fe0ae415186b89bffadfedea9926f40a 100644 (file)
@@ -11670,9 +11670,9 @@ static int load_module(void)
 
        ast_register_application(papp, iax2_prov_app, psyn, pdescrip);
        
-       ast_manager_register( "IAXpeers", 0, manager_iax2_show_peers, "List IAX Peers" );
-       ast_manager_register( "IAXpeerlist", 0, manager_iax2_show_peer_list, "List IAX Peers" );
-       ast_manager_register( "IAXnetstats", 0, manager_iax2_show_netstats, "Show IAX Netstats" );
+       ast_manager_register( "IAXpeers", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_iax2_show_peers, "List IAX Peers" );
+       ast_manager_register( "IAXpeerlist", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_iax2_show_peer_list, "List IAX Peers" );
+       ast_manager_register( "IAXnetstats", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_iax2_show_netstats, "Show IAX Netstats" );
 
        if(set_config(config, 0) == -1)
                return AST_MODULE_LOAD_DECLINE;
index df20aee03189c7c86234f3fd9843370387212205..3d1b3158f85041da39c309510db4ddab9da83583 100644 (file)
@@ -19590,11 +19590,11 @@ static int load_module(void)
        ast_custom_function_register(&checksipdomain_function);
 
        /* Register manager commands */
-       ast_manager_register2("SIPpeers", EVENT_FLAG_SYSTEM, manager_sip_show_peers,
+       ast_manager_register2("SIPpeers", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_sip_show_peers,
                        "List SIP peers (text format)", mandescr_show_peers);
-       ast_manager_register2("SIPshowpeer", EVENT_FLAG_SYSTEM, manager_sip_show_peer,
+       ast_manager_register2("SIPshowpeer", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_sip_show_peer,
                        "Show SIP peer (text format)", mandescr_show_peer);
-       ast_manager_register2("SIPshowregistry", EVENT_FLAG_SYSTEM, manager_show_registry,
+       ast_manager_register2("SIPshowregistry", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_show_registry,
                        "Show SIP registrations (text format)", mandescr_show_registry);
        sip_poke_all_peers();   
        sip_send_all_registers();
index b4d6a0909e1f02430a3d8c0730cc7898be1f9108..80bea5a700786f97e9845ebcaca71e00fc14b1f8 100644 (file)
@@ -71,5 +71,27 @@ bindaddr = 0.0.0.0
 ;displayconnects = yes ; Display on CLI user login/logoff
 ;
 ; Authorization for various classes 
-;read = system,call,log,verbose,command,agent,user,config,dtmf,reporting,cdr
-;write = system,call,log,verbose,command,agent,user,config,dtmf,reporting,cdr
+;
+; Read authorization permits you to receive asynchronous events, in general.
+; Write authorization permits you to send commands and get back responses.  The
+; following classes exist:
+;
+; system    - General information about the system and ability to run system
+;             management commands, such as Shutdown, Restart, and Reload.
+; call      - Information about channels and ability to set information in a
+;             running channel.
+; log       - Logging information.  Read-only.
+; verbose   - Verbose information.  Read-only.
+; agent     - Information about queues and agents and ability to add queue
+;             members to a queue.
+; user      - Permission to send and receive UserEvent.
+; config    - Ability to read and write configuration files.
+; command   - Permission to run CLI commands.  Write-only.
+; dtmf      - Receive DTMF events.  Read-only.
+; reporting - Ability to get information about the system.
+; cdr       - Output of cdr_manager, if loaded.  Read-only.
+; dialplan  - Receive NewExten and VarSet events.  Read-only.
+;
+;read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
+;write = system,call,agent,user,config,command,reporting
+
index 8e63acfeeb55fffc1e64744c4bcfd5f3f7c5a166..327f674f80663b98ec5ec979a5f6b043d2336406 100644 (file)
@@ -68,6 +68,7 @@
 #define EVENT_FLAG_DTMF                (1 << 8) /* Ability to read DTMF events */
 #define EVENT_FLAG_REPORTING           (1 << 9) /* Reporting events such as rtcp sent */
 #define EVENT_FLAG_CDR                 (1 << 10) /* CDR events */
+#define EVENT_FLAG_DIALPLAN            (1 << 11) /* Dialplan events (VarSet, NewExten) */
 /*@} */
 
 /*! \brief Export manager structures */
index 39d898d13374b3740ab7240147af19e90cc4d0dc..94bf4f0012c55d515fd3484f99ca6050b4ac86d6 100644 (file)
--- a/main/db.c
+++ b/main/db.c
@@ -663,7 +663,7 @@ int astdb_init(void)
 {
        dbinit();
        ast_cli_register_multiple(cli_database, sizeof(cli_database) / sizeof(struct ast_cli_entry));
-       ast_manager_register("DBGet", EVENT_FLAG_SYSTEM, manager_dbget, "Get DB Entry");
+       ast_manager_register("DBGet", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, manager_dbget, "Get DB Entry");
        ast_manager_register("DBPut", EVENT_FLAG_SYSTEM, manager_dbput, "Put DB Entry");
        ast_manager_register("DBDel", EVENT_FLAG_SYSTEM, manager_dbdel, "Delete DB Entry");
        ast_manager_register("DBDelTree", EVENT_FLAG_SYSTEM, manager_dbdeltree, "Delete DB Tree");
index 99fe49c4d7a9b22142b8f01bc50e0c58c260de24..ba3ad926480fe5db03c10ab5551f4b05a5604fe6 100644 (file)
@@ -312,6 +312,7 @@ static struct permalias {
        { EVENT_FLAG_DTMF, "dtmf" },
        { EVENT_FLAG_REPORTING, "reporting" },
        { EVENT_FLAG_CDR, "cdr" },
+       { EVENT_FLAG_DIALPLAN, "dialplan" },
        { -1, "all" },
        { 0, "none" },
 };
@@ -1391,7 +1392,7 @@ static int action_listcommands(struct mansession *s, const struct message *m)
 
        astman_start_ack(s, m);
        AST_RWLIST_TRAVERSE(&actions, cur, list) {
-               if ((s->writeperm & cur->authority) == cur->authority)
+               if (s->writeperm & cur->authority)
                        astman_append(s, "%s: %s (Priv: %s)\r\n",
                                cur->action, cur->synopsis, authority_to_str(cur->authority, &temp));
        }
@@ -2509,7 +2510,7 @@ static int process_message(struct mansession *s, const struct message *m)
        AST_RWLIST_TRAVERSE(&actions, tmp, list) {
                if (strcasecmp(action, tmp->action))
                        continue;
-               if ((s->writeperm & tmp->authority) == tmp->authority)
+               if (s->writeperm & tmp->authority)
                        ret = tmp->func(s, m);
                else
                        astman_send_error(s, m, "Permission denied");
@@ -3467,28 +3468,28 @@ static int __init_manager(int reload)
                ast_manager_register2("Logoff", 0, action_logoff, "Logoff Manager", mandescr_logoff);
                ast_manager_register2("Login", 0, action_login, "Login Manager", NULL);
                ast_manager_register2("Challenge", 0, action_challenge, "Generate Challenge for MD5 Auth", NULL);
-               ast_manager_register2("Hangup", EVENT_FLAG_CALL, action_hangup, "Hangup Channel", mandescr_hangup);
-               ast_manager_register("Status", EVENT_FLAG_CALL, action_status, "Lists channel status" );
+               ast_manager_register2("Hangup", EVENT_FLAG_SYSTEM | EVENT_FLAG_CALL, action_hangup, "Hangup Channel", mandescr_hangup);
+               ast_manager_register("Status", EVENT_FLAG_SYSTEM | EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_status, "Lists channel status" );
                ast_manager_register2("Setvar", EVENT_FLAG_CALL, action_setvar, "Set Channel Variable", mandescr_setvar );
-               ast_manager_register2("Getvar", EVENT_FLAG_CALL, action_getvar, "Gets a Channel Variable", mandescr_getvar );
-               ast_manager_register2("GetConfig", EVENT_FLAG_CONFIG, action_getconfig, "Retrieve configuration", mandescr_getconfig);
-               ast_manager_register2("GetConfigJSON", EVENT_FLAG_CONFIG, action_getconfigjson, "Retrieve configuration (JSON format)", mandescr_getconfigjson);
+               ast_manager_register2("Getvar", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_getvar, "Gets a Channel Variable", mandescr_getvar );
+               ast_manager_register2("GetConfig", EVENT_FLAG_SYSTEM | EVENT_FLAG_CONFIG, action_getconfig, "Retrieve configuration", mandescr_getconfig);
+               ast_manager_register2("GetConfigJSON", EVENT_FLAG_SYSTEM | EVENT_FLAG_CONFIG, action_getconfigjson, "Retrieve configuration (JSON format)", mandescr_getconfigjson);
                ast_manager_register2("UpdateConfig", EVENT_FLAG_CONFIG, action_updateconfig, "Update basic configuration", mandescr_updateconfig);
                ast_manager_register2("Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect (transfer) a call", mandescr_redirect );
                ast_manager_register2("Originate", EVENT_FLAG_CALL, action_originate, "Originate Call", mandescr_originate);
                ast_manager_register2("Command", EVENT_FLAG_COMMAND, action_command, "Execute Asterisk CLI Command", mandescr_command );
-               ast_manager_register2("ExtensionState", EVENT_FLAG_CALL, action_extensionstate, "Check Extension Status", mandescr_extensionstate );
-               ast_manager_register2("AbsoluteTimeout", EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout", mandescr_timeout );
-               ast_manager_register2("MailboxStatus", EVENT_FLAG_CALL, action_mailboxstatus, "Check Mailbox", mandescr_mailboxstatus );
-               ast_manager_register2("MailboxCount", EVENT_FLAG_CALL, action_mailboxcount, "Check Mailbox Message Count", mandescr_mailboxcount );
+               ast_manager_register2("ExtensionState", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_extensionstate, "Check Extension Status", mandescr_extensionstate );
+               ast_manager_register2("AbsoluteTimeout", EVENT_FLAG_SYSTEM | EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout", mandescr_timeout );
+               ast_manager_register2("MailboxStatus", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_mailboxstatus, "Check Mailbox", mandescr_mailboxstatus );
+               ast_manager_register2("MailboxCount", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_mailboxcount, "Check Mailbox Message Count", mandescr_mailboxcount );
                ast_manager_register2("ListCommands", 0, action_listcommands, "List available manager commands", mandescr_listcommands);
                ast_manager_register2("SendText", EVENT_FLAG_CALL, action_sendtext, "Send text message to channel", mandescr_sendtext);
                ast_manager_register2("UserEvent", EVENT_FLAG_USER, action_userevent, "Send an arbitrary event", mandescr_userevent);
                ast_manager_register2("WaitEvent", 0, action_waitevent, "Wait for an event to occur", mandescr_waitevent);
-               ast_manager_register2("CoreSettings", EVENT_FLAG_SYSTEM, action_coresettings, "Show PBX core settings (version etc)", mandescr_coresettings);
-               ast_manager_register2("CoreStatus", EVENT_FLAG_SYSTEM, action_corestatus, "Show PBX core status variables", mandescr_corestatus);
-               ast_manager_register2("Reload", EVENT_FLAG_CONFIG, action_reload, "Send a reload event", mandescr_reload);
-               ast_manager_register2("CoreShowChannels", EVENT_FLAG_SYSTEM, action_coreshowchannels, "List currently active channels", mandescr_coreshowchannels);
+               ast_manager_register2("CoreSettings", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, action_coresettings, "Show PBX core settings (version etc)", mandescr_coresettings);
+               ast_manager_register2("CoreStatus", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, action_corestatus, "Show PBX core status variables", mandescr_corestatus);
+               ast_manager_register2("Reload", EVENT_FLAG_CONFIG | EVENT_FLAG_SYSTEM, action_reload, "Send a reload event", mandescr_reload);
+               ast_manager_register2("CoreShowChannels", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, action_coreshowchannels, "List currently active channels", mandescr_coreshowchannels);
                ast_manager_register2("ModuleLoad", EVENT_FLAG_SYSTEM, manager_moduleload, "Module management", mandescr_moduleload);
                ast_manager_register2("ModuleCheck", EVENT_FLAG_SYSTEM, manager_modulecheck, "Check if module is loaded", mandescr_modulecheck);
 
index 3085600638e545e205c1c436d6a06a646566447b..6da44b7c3606e3db956312fc1bc8f14961428cda 100644 (file)
@@ -2659,7 +2659,7 @@ static int pbx_extension_helper(struct ast_channel *c, struct ast_context *con,
                                        term_color(tmp3, passdata, COLOR_BRMAGENTA, 0, sizeof(tmp3)),
                                        "in new stack");
                        }
-                       manager_event(EVENT_FLAG_CALL, "Newexten",
+                       manager_event(EVENT_FLAG_DIALPLAN, "Newexten",
                                        "Channel: %s\r\n"
                                        "Context: %s\r\n"
                                        "Extension: %s\r\n"
@@ -7232,7 +7232,7 @@ void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const
                        ast_verb(2, "Setting global variable '%s' to '%s'\n", name, value);
                newvariable = ast_var_assign(name, value);
                AST_LIST_INSERT_HEAD(headp, newvariable, entries);
-               manager_event(EVENT_FLAG_CALL, "VarSet", 
+               manager_event(EVENT_FLAG_DIALPLAN, "VarSet", 
                        "Channel: %s\r\n"
                        "Variable: %s\r\n"
                        "Value: %s\r\n"
@@ -7465,7 +7465,7 @@ int load_pbx(void)
        }
        
        /* Register manager application */
-       ast_manager_register2("ShowDialPlan", EVENT_FLAG_CONFIG, manager_show_dialplan, "List dialplan", mandescr_show_dialplan);
+       ast_manager_register2("ShowDialPlan", EVENT_FLAG_CONFIG | EVENT_FLAG_REPORTING, manager_show_dialplan, "List dialplan", mandescr_show_dialplan);
 
        ast_mutex_init(&device_state.lock);
        ast_cond_init(&device_state.cond, NULL);
index 6b9a0fbff7cd4ac355c3df9d9012cf93056e12af..d4876bd7fe9aa0d638e01167e5740b9896655cc6 100644 (file)
@@ -195,7 +195,7 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch
                                                 term_color(tmp1, app, COLOR_BRCYAN, 0, sizeof(tmp1)),
                                                 term_color(tmp2, chan->name, COLOR_BRMAGENTA, 0, sizeof(tmp2)),
                                                 term_color(tmp3, S_OR(appdata, ""), COLOR_BRMAGENTA, 0, sizeof(tmp3)));
-                               manager_event(EVENT_FLAG_CALL, "Newexten",
+                               manager_event(EVENT_FLAG_DIALPLAN, "Newexten",
                                                          "Channel: %s\r\n"
                                                          "Context: %s\r\n"
                                                          "Extension: %s\r\n"
index 1427038d9dcb98cf7496c8ba6e464d5a43f721ef..36617da5a2e834f1f7f51e85d979ae801115386a 100644 (file)
@@ -3409,7 +3409,7 @@ static int load_module(void)
                ast_manager_register("ParkedCalls", 0, manager_parking_status, "List parked calls");
                ast_manager_register2("Park", EVENT_FLAG_CALL, manager_park,
                        "Park a channel", mandescr_park); 
-               ast_manager_register2("Bridge", EVENT_FLAG_COMMAND, action_bridge, "Bridge two channels already in the PBX", mandescr_bridge);
+               ast_manager_register2("Bridge", EVENT_FLAG_CALL, action_bridge, "Bridge two channels already in the PBX", mandescr_bridge);
        }
 
        res |= ast_devstate_prov_add("Park", metermaidstate);