From 10f70a8321d064d77106d056a361876d4d36628d Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Tue, 18 Dec 2007 10:24:58 +0000 Subject: make configuration variable const so they are not accidentally modified. This requires casting the strings in asterisk.c when writing to them, so we do it through a macro to do it consistently. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@93603 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/asterisk.c | 122 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 62 insertions(+), 60 deletions(-) (limited to 'main/asterisk.c') diff --git a/main/asterisk.c b/main/asterisk.c index ae825126e..d869d3cbf 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -92,6 +92,7 @@ int daemon(int, int); /* defined in libresolv of all places */ #include #endif +#include "asterisk/paths.h" /* we define here the variables so better agree on the prototype */ #include "asterisk/network.h" #include "asterisk/cli.h" #include "asterisk/channel.h" @@ -199,27 +200,27 @@ static int ast_el_add_history(char *); static int ast_el_read_history(char *); static int ast_el_write_history(char *); -char ast_config_AST_CONFIG_DIR[PATH_MAX]; -char ast_config_AST_CONFIG_FILE[PATH_MAX]; -char ast_config_AST_MODULE_DIR[PATH_MAX]; -char ast_config_AST_SPOOL_DIR[PATH_MAX]; -char ast_config_AST_MONITOR_DIR[PATH_MAX]; -char ast_config_AST_VAR_DIR[PATH_MAX]; -char ast_config_AST_DATA_DIR[PATH_MAX]; -char ast_config_AST_LOG_DIR[PATH_MAX]; -char ast_config_AST_AGI_DIR[PATH_MAX]; -char ast_config_AST_DB[PATH_MAX]; -char ast_config_AST_KEY_DIR[PATH_MAX]; -char ast_config_AST_PID[PATH_MAX]; -char ast_config_AST_SOCKET[PATH_MAX]; -char ast_config_AST_RUN_DIR[PATH_MAX]; -char ast_config_AST_RUN_USER[PATH_MAX]; -char ast_config_AST_RUN_GROUP[PATH_MAX]; -char ast_config_AST_CTL_PERMISSIONS[PATH_MAX]; -char ast_config_AST_CTL_OWNER[PATH_MAX] = "\0"; -char ast_config_AST_CTL_GROUP[PATH_MAX] = "\0"; -char ast_config_AST_CTL[PATH_MAX] = "asterisk.ctl"; -char ast_config_AST_SYSTEM_NAME[20] = ""; +const char ast_config_AST_CONFIG_DIR[PATH_MAX]; +const char ast_config_AST_CONFIG_FILE[PATH_MAX]; +const char ast_config_AST_MODULE_DIR[PATH_MAX]; +const char ast_config_AST_SPOOL_DIR[PATH_MAX]; +const char ast_config_AST_MONITOR_DIR[PATH_MAX]; +const char ast_config_AST_VAR_DIR[PATH_MAX]; +const char ast_config_AST_DATA_DIR[PATH_MAX]; +const char ast_config_AST_LOG_DIR[PATH_MAX]; +const char ast_config_AST_AGI_DIR[PATH_MAX]; +const char ast_config_AST_DB[PATH_MAX]; +const char ast_config_AST_KEY_DIR[PATH_MAX]; +const char ast_config_AST_PID[PATH_MAX]; +const char ast_config_AST_SOCKET[PATH_MAX]; +const char ast_config_AST_RUN_DIR[PATH_MAX]; +const char ast_config_AST_RUN_USER[PATH_MAX]; +const char ast_config_AST_RUN_GROUP[PATH_MAX]; +static const char ast_config_AST_CTL_PERMISSIONS[PATH_MAX]; +static const char ast_config_AST_CTL_OWNER[PATH_MAX] = "\0"; +static const char ast_config_AST_CTL_GROUP[PATH_MAX] = "\0"; +static const char ast_config_AST_CTL[PATH_MAX] = "asterisk.ctl"; +const char ast_config_AST_SYSTEM_NAME[20] = ""; extern const char *ast_build_hostname; extern const char *ast_build_kernel; @@ -2419,19 +2420,20 @@ static void ast_readconfig(void) cfg = ast_config_load(config, config_flags); /* init with buildtime config */ - ast_copy_string(ast_config_AST_CONFIG_DIR, DEFAULT_CONFIG_DIR, sizeof(ast_config_AST_CONFIG_DIR)); - ast_copy_string(ast_config_AST_SPOOL_DIR, DEFAULT_SPOOL_DIR, sizeof(ast_config_AST_SPOOL_DIR)); - ast_copy_string(ast_config_AST_MODULE_DIR, DEFAULT_MODULE_DIR, sizeof(ast_config_AST_MODULE_DIR)); - snprintf(ast_config_AST_MONITOR_DIR, sizeof(ast_config_AST_MONITOR_DIR) - 1, "%s/monitor", ast_config_AST_SPOOL_DIR); - ast_copy_string(ast_config_AST_VAR_DIR, DEFAULT_VAR_DIR, sizeof(ast_config_AST_VAR_DIR)); - ast_copy_string(ast_config_AST_DATA_DIR, DEFAULT_DATA_DIR, sizeof(ast_config_AST_DATA_DIR)); - ast_copy_string(ast_config_AST_LOG_DIR, DEFAULT_LOG_DIR, sizeof(ast_config_AST_LOG_DIR)); - ast_copy_string(ast_config_AST_AGI_DIR, DEFAULT_AGI_DIR, sizeof(ast_config_AST_AGI_DIR)); - ast_copy_string(ast_config_AST_DB, DEFAULT_DB, sizeof(ast_config_AST_DB)); - ast_copy_string(ast_config_AST_KEY_DIR, DEFAULT_KEY_DIR, sizeof(ast_config_AST_KEY_DIR)); - ast_copy_string(ast_config_AST_PID, DEFAULT_PID, sizeof(ast_config_AST_PID)); - ast_copy_string(ast_config_AST_SOCKET, DEFAULT_SOCKET, sizeof(ast_config_AST_SOCKET)); - ast_copy_string(ast_config_AST_RUN_DIR, DEFAULT_RUN_DIR, sizeof(ast_config_AST_RUN_DIR)); +#define _SETVAR(dst, src) ast_copy_string((char *)dst, src, sizeof(dst)) + _SETVAR(ast_config_AST_CONFIG_DIR, DEFAULT_CONFIG_DIR); + _SETVAR(ast_config_AST_SPOOL_DIR, DEFAULT_SPOOL_DIR); + _SETVAR(ast_config_AST_MODULE_DIR, DEFAULT_MODULE_DIR); + snprintf((char *)ast_config_AST_MONITOR_DIR, sizeof(ast_config_AST_MONITOR_DIR) - 1, "%s/monitor", ast_config_AST_SPOOL_DIR); + _SETVAR(ast_config_AST_VAR_DIR, DEFAULT_VAR_DIR); + _SETVAR(ast_config_AST_DATA_DIR, DEFAULT_DATA_DIR); + _SETVAR(ast_config_AST_LOG_DIR, DEFAULT_LOG_DIR); + _SETVAR(ast_config_AST_AGI_DIR, DEFAULT_AGI_DIR); + _SETVAR(ast_config_AST_DB, DEFAULT_DB); + _SETVAR(ast_config_AST_KEY_DIR, DEFAULT_KEY_DIR); + _SETVAR(ast_config_AST_PID, DEFAULT_PID); + _SETVAR(ast_config_AST_SOCKET, DEFAULT_SOCKET); + _SETVAR(ast_config_AST_RUN_DIR, DEFAULT_RUN_DIR); /* no asterisk.conf? no problem, use buildtime config! */ if (!cfg) { @@ -2440,45 +2442,45 @@ static void ast_readconfig(void) for (v = ast_variable_browse(cfg, "files"); v; v = v->next) { if (!strcasecmp(v->name, "astctlpermissions")) - ast_copy_string(ast_config_AST_CTL_PERMISSIONS, v->value, sizeof(ast_config_AST_CTL_PERMISSIONS)); + _SETVAR(ast_config_AST_CTL_PERMISSIONS, v->value); else if (!strcasecmp(v->name, "astctlowner")) - ast_copy_string(ast_config_AST_CTL_OWNER, v->value, sizeof(ast_config_AST_CTL_OWNER)); + _SETVAR(ast_config_AST_CTL_OWNER, v->value); else if (!strcasecmp(v->name, "astctlgroup")) - ast_copy_string(ast_config_AST_CTL_GROUP, v->value, sizeof(ast_config_AST_CTL_GROUP)); + _SETVAR(ast_config_AST_CTL_GROUP, v->value); else if (!strcasecmp(v->name, "astctl")) - ast_copy_string(ast_config_AST_CTL, v->value, sizeof(ast_config_AST_CTL)); + _SETVAR(ast_config_AST_CTL, v->value); } for (v = ast_variable_browse(cfg, "directories"); v; v = v->next) { if (!strcasecmp(v->name, "astetcdir")) { - ast_copy_string(ast_config_AST_CONFIG_DIR, v->value, sizeof(ast_config_AST_CONFIG_DIR)); + _SETVAR(ast_config_AST_CONFIG_DIR, v->value); } else if (!strcasecmp(v->name, "astspooldir")) { - ast_copy_string(ast_config_AST_SPOOL_DIR, v->value, sizeof(ast_config_AST_SPOOL_DIR)); - snprintf(ast_config_AST_MONITOR_DIR, sizeof(ast_config_AST_MONITOR_DIR) - 1, "%s/monitor", v->value); + _SETVAR(ast_config_AST_SPOOL_DIR, v->value); + snprintf((char *)ast_config_AST_MONITOR_DIR, sizeof(ast_config_AST_MONITOR_DIR) - 1, "%s/monitor", v->value); } else if (!strcasecmp(v->name, "astvarlibdir")) { - ast_copy_string(ast_config_AST_VAR_DIR, v->value, sizeof(ast_config_AST_VAR_DIR)); + _SETVAR(ast_config_AST_VAR_DIR, v->value); if (!found.dbdir) - snprintf(ast_config_AST_DB, sizeof(ast_config_AST_DB), "%s/astdb", v->value); + snprintf((char *)ast_config_AST_DB, sizeof(ast_config_AST_DB), "%s/astdb", v->value); } else if (!strcasecmp(v->name, "astdbdir")) { - snprintf(ast_config_AST_DB, sizeof(ast_config_AST_DB), "%s/astdb", v->value); + snprintf((char *)ast_config_AST_DB, sizeof(ast_config_AST_DB), "%s/astdb", v->value); found.dbdir = 1; } else if (!strcasecmp(v->name, "astdatadir")) { - ast_copy_string(ast_config_AST_DATA_DIR, v->value, sizeof(ast_config_AST_DATA_DIR)); + _SETVAR(ast_config_AST_DATA_DIR, v->value); if (!found.keydir) - snprintf(ast_config_AST_KEY_DIR, sizeof(ast_config_AST_KEY_DIR), "%s/keys", v->value); + snprintf((char *)ast_config_AST_KEY_DIR, sizeof(ast_config_AST_KEY_DIR), "%s/keys", v->value); } else if (!strcasecmp(v->name, "astkeydir")) { - snprintf(ast_config_AST_KEY_DIR, sizeof(ast_config_AST_KEY_DIR), "%s/keys", v->value); + snprintf((char *)ast_config_AST_KEY_DIR, sizeof(ast_config_AST_KEY_DIR), "%s/keys", v->value); found.keydir = 1; } else if (!strcasecmp(v->name, "astlogdir")) { - ast_copy_string(ast_config_AST_LOG_DIR, v->value, sizeof(ast_config_AST_LOG_DIR)); + _SETVAR(ast_config_AST_LOG_DIR, v->value); } else if (!strcasecmp(v->name, "astagidir")) { - ast_copy_string(ast_config_AST_AGI_DIR, v->value, sizeof(ast_config_AST_AGI_DIR)); + _SETVAR(ast_config_AST_AGI_DIR, v->value); } else if (!strcasecmp(v->name, "astrundir")) { - snprintf(ast_config_AST_PID, sizeof(ast_config_AST_PID), "%s/%s", v->value, "asterisk.pid"); - snprintf(ast_config_AST_SOCKET, sizeof(ast_config_AST_SOCKET), "%s/%s", v->value, ast_config_AST_CTL); - ast_copy_string(ast_config_AST_RUN_DIR, v->value, sizeof(ast_config_AST_RUN_DIR)); + snprintf((char *)ast_config_AST_PID, sizeof(ast_config_AST_PID), "%s/%s", v->value, "asterisk.pid"); + snprintf((char *)ast_config_AST_SOCKET, sizeof(ast_config_AST_SOCKET), "%s/%s", v->value, ast_config_AST_CTL); + _SETVAR(ast_config_AST_RUN_DIR, v->value); } else if (!strcasecmp(v->name, "astmoddir")) { - ast_copy_string(ast_config_AST_MODULE_DIR, v->value, sizeof(ast_config_AST_MODULE_DIR)); + _SETVAR(ast_config_AST_MODULE_DIR, v->value); } } @@ -2561,19 +2563,19 @@ static void ast_readconfig(void) set_ulimit(option_maxfiles); /* What user to run as */ } else if (!strcasecmp(v->name, "runuser")) { - ast_copy_string(ast_config_AST_RUN_USER, v->value, sizeof(ast_config_AST_RUN_USER)); + _SETVAR(ast_config_AST_RUN_USER, v->value); /* What group to run as */ } else if (!strcasecmp(v->name, "rungroup")) { - ast_copy_string(ast_config_AST_RUN_GROUP, v->value, sizeof(ast_config_AST_RUN_GROUP)); + _SETVAR(ast_config_AST_RUN_GROUP, v->value); } else if (!strcasecmp(v->name, "systemname")) { - ast_copy_string(ast_config_AST_SYSTEM_NAME, v->value, sizeof(ast_config_AST_SYSTEM_NAME)); + _SETVAR(ast_config_AST_SYSTEM_NAME, v->value); } else if (!strcasecmp(v->name, "autosystemname")) { if (ast_true(v->value)) { if (!gethostname(hostname, sizeof(hostname) - 1)) - ast_copy_string(ast_config_AST_SYSTEM_NAME, hostname, sizeof(ast_config_AST_SYSTEM_NAME)); + _SETVAR(ast_config_AST_SYSTEM_NAME, hostname); else { if (ast_strlen_zero(ast_config_AST_SYSTEM_NAME)){ - ast_copy_string(ast_config_AST_SYSTEM_NAME, "localhost", sizeof(ast_config_AST_SYSTEM_NAME)); + _SETVAR(ast_config_AST_SYSTEM_NAME, "localhost"); } ast_log(LOG_ERROR, "Cannot obtain hostname for this system. Using '%s' instead.\n", ast_config_AST_SYSTEM_NAME); } @@ -2636,7 +2638,7 @@ int main(int argc, char *argv[]) int num; int isroot = 1; char *buf; - char *runuser = NULL, *rungroup = NULL; + const char *runuser = NULL, *rungroup = NULL; /* Remember original args for restart */ if (argc > sizeof(_argv) / sizeof(_argv[0]) - 1) { @@ -2732,7 +2734,7 @@ int main(int argc, char *argv[]) xarg = optarg; break; case 'C': - ast_copy_string(ast_config_AST_CONFIG_FILE, optarg, sizeof(ast_config_AST_CONFIG_FILE)); + _SETVAR(ast_config_AST_CONFIG_FILE, optarg); ast_set_flag(&ast_options, AST_OPT_FLAG_OVERRIDE_CONFIG); break; case 'I': -- cgit v1.2.3