[asterisk-commits] qwell: branch 1.4 r92696 - in /branches/1.4: channels/ main/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Dec 12 18:11:09 CST 2007
Author: qwell
Date: Wed Dec 12 18:11:09 2007
New Revision: 92696
URL: http://svn.digium.com/view/asterisk?view=rev&rev=92696
Log:
If a typo is found in a config file, we previous continued on with what was already loaded.
We do not want to do this (see bug below for details).
This makes it so that if a [ is found without a ], the entire config will fail, and nothing in it will be loaded.
Isue #10690.
Modified:
branches/1.4/channels/chan_h323.c
branches/1.4/channels/chan_iax2.c
branches/1.4/channels/chan_sip.c
branches/1.4/main/config.c
Modified: branches/1.4/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_h323.c?view=diff&rev=92696&r1=92695&r2=92696
==============================================================================
--- branches/1.4/channels/chan_h323.c (original)
+++ branches/1.4/channels/chan_h323.c Wed Dec 12 18:11:09 2007
@@ -2710,6 +2710,56 @@
show_tokens_usage },
};
+static void delete_users(void)
+{
+ int pruned = 0;
+
+ /* Delete all users */
+ ASTOBJ_CONTAINER_WRLOCK(&userl);
+ ASTOBJ_CONTAINER_TRAVERSE(&userl, 1, do {
+ ASTOBJ_RDLOCK(iterator);
+ ASTOBJ_MARK(iterator);
+ ++pruned;
+ ASTOBJ_UNLOCK(iterator);
+ } while (0) );
+ if (pruned) {
+ ASTOBJ_CONTAINER_PRUNE_MARKED(&userl, oh323_destroy_user);
+ }
+ ASTOBJ_CONTAINER_UNLOCK(&userl);
+
+ ASTOBJ_CONTAINER_WRLOCK(&peerl);
+ ASTOBJ_CONTAINER_TRAVERSE(&peerl, 1, do {
+ ASTOBJ_RDLOCK(iterator);
+ ASTOBJ_MARK(iterator);
+ ASTOBJ_UNLOCK(iterator);
+ } while (0) );
+ ASTOBJ_CONTAINER_UNLOCK(&peerl);
+}
+
+static void delete_aliases(void)
+{
+ int pruned = 0;
+
+ /* Delete all aliases */
+ ASTOBJ_CONTAINER_WRLOCK(&aliasl);
+ ASTOBJ_CONTAINER_TRAVERSE(&aliasl, 1, do {
+ ASTOBJ_RDLOCK(iterator);
+ ASTOBJ_MARK(iterator);
+ ++pruned;
+ ASTOBJ_UNLOCK(iterator);
+ } while (0) );
+ if (pruned) {
+ ASTOBJ_CONTAINER_PRUNE_MARKED(&aliasl, oh323_destroy_alias);
+ }
+ ASTOBJ_CONTAINER_UNLOCK(&aliasl);
+}
+
+static void prune_peers(void)
+{
+ /* Prune peers who still are supposed to be deleted */
+ ASTOBJ_CONTAINER_PRUNE_MARKED(&peerl, oh323_destroy_peer);
+}
+
static int reload_config(int is_reload)
{
int format;
@@ -2731,6 +2781,12 @@
if (!cfg) {
ast_log(LOG_NOTICE, "Unable to load config %s, H.323 disabled\n", config);
return 1;
+ }
+
+ if (is_reload) {
+ delete_users();
+ delete_aliases();
+ prune_peers();
}
/* fire up the H.323 Endpoint */
@@ -2923,56 +2979,6 @@
return 0;
}
-static void delete_users(void)
-{
- int pruned = 0;
-
- /* Delete all users */
- ASTOBJ_CONTAINER_WRLOCK(&userl);
- ASTOBJ_CONTAINER_TRAVERSE(&userl, 1, do {
- ASTOBJ_RDLOCK(iterator);
- ASTOBJ_MARK(iterator);
- ++pruned;
- ASTOBJ_UNLOCK(iterator);
- } while (0) );
- if (pruned) {
- ASTOBJ_CONTAINER_PRUNE_MARKED(&userl, oh323_destroy_user);
- }
- ASTOBJ_CONTAINER_UNLOCK(&userl);
-
- ASTOBJ_CONTAINER_WRLOCK(&peerl);
- ASTOBJ_CONTAINER_TRAVERSE(&peerl, 1, do {
- ASTOBJ_RDLOCK(iterator);
- ASTOBJ_MARK(iterator);
- ASTOBJ_UNLOCK(iterator);
- } while (0) );
- ASTOBJ_CONTAINER_UNLOCK(&peerl);
-}
-
-static void delete_aliases(void)
-{
- int pruned = 0;
-
- /* Delete all aliases */
- ASTOBJ_CONTAINER_WRLOCK(&aliasl);
- ASTOBJ_CONTAINER_TRAVERSE(&aliasl, 1, do {
- ASTOBJ_RDLOCK(iterator);
- ASTOBJ_MARK(iterator);
- ++pruned;
- ASTOBJ_UNLOCK(iterator);
- } while (0) );
- if (pruned) {
- ASTOBJ_CONTAINER_PRUNE_MARKED(&aliasl, oh323_destroy_alias);
- }
- ASTOBJ_CONTAINER_UNLOCK(&aliasl);
-}
-
-static void prune_peers(void)
-{
- /* Prune peers who still are supposed to be deleted */
- ASTOBJ_CONTAINER_PRUNE_MARKED(&peerl, oh323_destroy_peer);
-}
-
static int h323_reload(int fd, int argc, char *argv[])
{
ast_mutex_lock(&h323_reload_lock);
@@ -2988,9 +2994,6 @@
static int h323_do_reload(void)
{
- delete_users();
- delete_aliases();
- prune_peers();
reload_config(1);
return 0;
}
Modified: branches/1.4/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_iax2.c?view=diff&rev=92696&r1=92695&r2=92696
==============================================================================
--- branches/1.4/channels/chan_iax2.c (original)
+++ branches/1.4/channels/chan_iax2.c Wed Dec 12 18:11:09 2007
@@ -9534,6 +9534,20 @@
#endif
}
+static void set_config_destroy(void)
+{
+ strcpy(accountcode, "");
+ strcpy(language, "");
+ strcpy(mohinterpret, "default");
+ strcpy(mohsuggest, "");
+ amaflags = 0;
+ delayreject = 0;
+ ast_clear_flag((&globalflags), IAX_NOTRANSFER);
+ ast_clear_flag((&globalflags), IAX_TRANSFERMEDIA);
+ ast_clear_flag((&globalflags), IAX_USEJITTERBUF);
+ ast_clear_flag((&globalflags), IAX_FORCEJITTERBUF);
+ delete_users();
+}
/*! \brief Load configuration */
static int set_config(char *config_file, int reload)
@@ -9559,6 +9573,10 @@
if (!cfg) {
ast_log(LOG_ERROR, "Unable to load config %s\n", config_file);
return -1;
+ }
+
+ if (reload) {
+ set_config_destroy();
}
/* Reset global codec prefs */
@@ -9886,7 +9904,7 @@
}
ast_config_destroy(cfg);
set_timing();
- return capability;
+ return 1;
}
static void poke_all_peers(void)
@@ -9905,26 +9923,16 @@
char *config = "iax.conf";
struct iax2_registry *reg;
- strcpy(accountcode, "");
- strcpy(language, "");
- strcpy(mohinterpret, "default");
- strcpy(mohsuggest, "");
- amaflags = 0;
- delayreject = 0;
- ast_clear_flag((&globalflags), IAX_NOTRANSFER);
- ast_clear_flag((&globalflags), IAX_TRANSFERMEDIA);
- ast_clear_flag((&globalflags), IAX_USEJITTERBUF);
- ast_clear_flag((&globalflags), IAX_FORCEJITTERBUF);
- delete_users();
- set_config(config, 1);
- prune_peers();
- prune_users();
- AST_LIST_LOCK(®istrations);
- AST_LIST_TRAVERSE(®istrations, reg, entry)
- iax2_do_register(reg);
- AST_LIST_UNLOCK(®istrations);
- /* Qualify hosts, too */
- poke_all_peers();
+ if (set_config(config, 1) > 0) {
+ prune_peers();
+ prune_users();
+ AST_LIST_LOCK(®istrations);
+ AST_LIST_TRAVERSE(®istrations, reg, entry)
+ iax2_do_register(reg);
+ AST_LIST_UNLOCK(®istrations);
+ /* Qualify hosts, too */
+ poke_all_peers();
+ }
reload_firmware(0);
iax_provision_reload();
Modified: branches/1.4/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_sip.c?view=diff&rev=92696&r1=92695&r2=92696
==============================================================================
--- branches/1.4/channels/chan_sip.c (original)
+++ branches/1.4/channels/chan_sip.c Wed Dec 12 18:11:09 2007
@@ -16660,6 +16660,36 @@
return -1;
}
+ if (option_debug > 3)
+ ast_log(LOG_DEBUG, "--------------- SIP reload started\n");
+
+ clear_realm_authentication(authl);
+ clear_sip_domains();
+ authl = NULL;
+
+ /* First, destroy all outstanding registry calls */
+ /* This is needed, since otherwise active registry entries will not be destroyed */
+ ASTOBJ_CONTAINER_TRAVERSE(®l, 1, do {
+ ASTOBJ_RDLOCK(iterator);
+ if (iterator->call) {
+ if (option_debug > 2)
+ ast_log(LOG_DEBUG, "Destroying active SIP dialog for registry %s@%s\n", iterator->username, iterator->hostname);
+ /* This will also remove references to the registry */
+ sip_destroy(iterator->call);
+ }
+ ASTOBJ_UNLOCK(iterator);
+
+ } while(0));
+
+ /* Then, actually destroy users and registry */
+ ASTOBJ_CONTAINER_DESTROYALL(&userl, sip_destroy_user);
+ if (option_debug > 3)
+ ast_log(LOG_DEBUG, "--------------- Done destroying user list\n");
+ ASTOBJ_CONTAINER_DESTROYALL(®l, sip_registry_destroy);
+ if (option_debug > 3)
+ ast_log(LOG_DEBUG, "--------------- Done destroying registry list\n");
+ ASTOBJ_CONTAINER_MARKALL(&peerl);
+
/* Initialize copy of current global_regcontext for later use in removing stale contexts */
ast_copy_string(oldcontexts, global_regcontext, sizeof(oldcontexts));
oldregcontext = oldcontexts;
@@ -17668,35 +17698,6 @@
/*! \brief Reload module */
static int sip_do_reload(enum channelreloadreason reason)
{
- if (option_debug > 3)
- ast_log(LOG_DEBUG, "--------------- SIP reload started\n");
-
- clear_realm_authentication(authl);
- clear_sip_domains();
- authl = NULL;
-
- /* First, destroy all outstanding registry calls */
- /* This is needed, since otherwise active registry entries will not be destroyed */
- ASTOBJ_CONTAINER_TRAVERSE(®l, 1, do {
- ASTOBJ_RDLOCK(iterator);
- if (iterator->call) {
- if (option_debug > 2)
- ast_log(LOG_DEBUG, "Destroying active SIP dialog for registry %s@%s\n", iterator->username, iterator->hostname);
- /* This will also remove references to the registry */
- sip_destroy(iterator->call);
- }
- ASTOBJ_UNLOCK(iterator);
-
- } while(0));
-
- /* Then, actually destroy users and registry */
- ASTOBJ_CONTAINER_DESTROYALL(&userl, sip_destroy_user);
- if (option_debug > 3)
- ast_log(LOG_DEBUG, "--------------- Done destroying user list\n");
- ASTOBJ_CONTAINER_DESTROYALL(®l, sip_registry_destroy);
- if (option_debug > 3)
- ast_log(LOG_DEBUG, "--------------- Done destroying registry list\n");
- ASTOBJ_CONTAINER_MARKALL(&peerl);
reload_config(reason);
/* Prune peers who still are supposed to be deleted */
Modified: branches/1.4/main/config.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/config.c?view=diff&rev=92696&r1=92695&r2=92696
==============================================================================
--- branches/1.4/main/config.c (original)
+++ branches/1.4/main/config.c Wed Dec 12 18:11:09 2007
@@ -745,7 +745,7 @@
if(!ast_strlen_zero(exec_file))
unlink(exec_file);
if(!do_include)
- return 0;
+ return -1;
} else {
ast_log(LOG_WARNING, "Directive '#%s' needs an argument (%s) at line %d of %s\n",
More information about the asterisk-commits
mailing list