* An 'X' option has been added to the asterisk application which enables #exec support.
This allows #exec to be used in asterisk.conf.
* jabber.conf supports a new option auth_policy that toggles auto user registration.
+ * A new lockconfdir option has been added to asterisk.conf to protect the
+ AST_CONFIG_DIR during reloads.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2 -------------
echo ";lightbackground = yes ; If your terminal is set for a light-colored background" ; \
echo "documentation_language = en_US ; Set the Language you want Documentation displayed in. Value is in the same format as locale names" ; \
echo ";hideconnect = yes ; Hide messages displayed when a remote console connects and disconnects" ; \
+ echo ";lockconfdir = no ; Protect the directory containing the configuration files (/etc/asterisk) with a lock" ; \
echo "" ; \
echo "; Changing the following lines may compromise your security." ; \
echo ";[files]" ; \
AST_OPT_FLAG_FORCE_BLACK_BACKGROUND = (1 << 27),
/*! Hide remote console connect messages on console */
AST_OPT_FLAG_HIDE_CONSOLE_CONNECT = (1 << 28),
+ /*! Protect the configuration file path with a lock */
+ AST_OPT_FLAG_LOCK_CONFIG_DIR = (1 << 29),
};
/*! These are the options that set by default when Asterisk starts */
#define ast_opt_light_background ast_test_flag(&ast_options, AST_OPT_FLAG_LIGHT_BACKGROUND)
#define ast_opt_force_black_background ast_test_flag(&ast_options, AST_OPT_FLAG_FORCE_BLACK_BACKGROUND)
#define ast_opt_hide_connect ast_test_flag(&ast_options, AST_OPT_FLAG_HIDE_CONSOLE_CONNECT)
+#define ast_opt_lock_confdir ast_test_flag(&ast_options, AST_OPT_FLAG_LOCK_CONFIG_DIR)
extern struct ast_flags ast_options;
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_FORCE_BLACK_BACKGROUND);
} else if (!strcasecmp(v->name, "hideconnect")) {
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_HIDE_CONSOLE_CONNECT);
+ } else if (!strcasecmp(v->name, "lockconfdir")) {
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_LOCK_CONFIG_DIR);
}
}
for (v = ast_variable_browse(cfg, "compat"); v; v = v->next) {
#include "asterisk/dsp.h"
#include "asterisk/udptl.h"
#include "asterisk/heap.h"
+#include "asterisk/app.h"
#include <dlfcn.h>
}
ast_lastreloadtime = ast_tvnow();
+ if (ast_opt_lock_confdir) {
+ int try;
+ int res;
+ for (try = 1, res = AST_LOCK_TIMEOUT; try < 6 && (res == AST_LOCK_TIMEOUT); try++) {
+ res = ast_lock_path(ast_config_AST_CONFIG_DIR);
+ if (res == AST_LOCK_TIMEOUT) {
+ ast_log(LOG_WARNING, "Failed to grab lock on %s, try %d\n", ast_config_AST_CONFIG_DIR, try);
+ }
+ }
+ if (res != AST_LOCK_SUCCESS) {
+ ast_verbose("Cannot grab lock on %s\n", ast_config_AST_CONFIG_DIR);
+ ast_mutex_unlock(&reloadlock);
+ return -1;
+ }
+ }
+
/* Call "predefined" reload here first */
for (i = 0; reload_classes[i].name; i++) {
if (!name || !strcasecmp(name, reload_classes[i].name)) {
}
if (name && res) {
+ if (ast_opt_lock_confdir) {
+ ast_unlock_path(ast_config_AST_CONFIG_DIR);
+ }
ast_mutex_unlock(&reloadlock);
return res;
}
}
AST_LIST_UNLOCK(&module_list);
+ if (ast_opt_lock_confdir) {
+ ast_unlock_path(ast_config_AST_CONFIG_DIR);
+ }
ast_mutex_unlock(&reloadlock);
return res;