diff options
-rw-r--r-- | Makefile | 4 | ||||
-rwxr-xr-x | build_tools/make_defaults_h | 1 | ||||
-rw-r--r-- | configs/asterisk.conf.sample | 1 | ||||
-rw-r--r-- | include/asterisk/paths.h | 1 | ||||
-rw-r--r-- | main/asterisk.c | 18 | ||||
-rw-r--r-- | main/db.c | 2 |
6 files changed, 16 insertions, 11 deletions
@@ -40,6 +40,8 @@ export ASTERISKVERSIONNUM # DESTDIR is the staging (or final) directory where files are copied # during the install process. Define it before 'export', otherwise # export will set it to the empty string making ?= fail. +# Trying to run asterisk from the DESTDIR is completely unsupported +# behavior. # WARNING: do not put spaces or comments after the value. DESTDIR?=$(INSTALL_PATH) export DESTDIR @@ -405,7 +407,7 @@ $(MOD_SUBDIRS): $(OTHER_SUBDIRS): +@_ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(_ASTCFLAGS)" ASTCFLAGS="$(ASTCFLAGS)" _ASTLDFLAGS="$(_ASTLDFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all -defaults.h: makeopts +defaults.h: makeopts build_tools/make_defaults_h @build_tools/make_defaults_h > $@.tmp @cmp -s $@.tmp $@ || mv $@.tmp $@ @rm -f $@.tmp diff --git a/build_tools/make_defaults_h b/build_tools/make_defaults_h index f7b13da4c..3f39dbc07 100755 --- a/build_tools/make_defaults_h +++ b/build_tools/make_defaults_h @@ -25,4 +25,5 @@ cat << END #define DEFAULT_SPOOL_DIR "${INSTALL_PATH}${ASTSPOOLDIR}" #define DEFAULT_TMP_DIR "${INSTALL_PATH}${ASTSPOOLDIR}/tmp" +#define DEFAULT_SBIN_DIR "${INSTALL_PATH}${ASTSBINDIR}" END diff --git a/configs/asterisk.conf.sample b/configs/asterisk.conf.sample index 618eceab5..cc9933044 100644 --- a/configs/asterisk.conf.sample +++ b/configs/asterisk.conf.sample @@ -9,6 +9,7 @@ astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk +astsbindir => /usr/sbin [options] ;verbose = 3 diff --git a/include/asterisk/paths.h b/include/asterisk/paths.h index c161c284d..987ac8158 100644 --- a/include/asterisk/paths.h +++ b/include/asterisk/paths.h @@ -35,5 +35,6 @@ extern const char *ast_config_AST_RUN_DIR; extern const char *ast_config_AST_RUN_GROUP; extern const char *ast_config_AST_RUN_USER; extern const char *ast_config_AST_SYSTEM_NAME; +extern const char *ast_config_AST_SBIN_DIR; #endif /* _ASTERISK_PATHS_H */ diff --git a/main/asterisk.c b/main/asterisk.c index 8924fe70a..48baa2a3d 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -242,6 +242,7 @@ struct _cfg_paths { char config_file[PATH_MAX]; char db_path[PATH_MAX]; + char sbin_dir[PATH_MAX]; char pid_path[PATH_MAX]; char socket_path[PATH_MAX]; char run_user[PATH_MAX]; @@ -262,6 +263,7 @@ const char *ast_config_AST_LOG_DIR = cfg_paths.log_dir; const char *ast_config_AST_AGI_DIR = cfg_paths.agi_dir; const char *ast_config_AST_KEY_DIR = cfg_paths.key_dir; const char *ast_config_AST_RUN_DIR = cfg_paths.run_dir; +const char *ast_config_AST_SBIN_DIR = cfg_paths.sbin_dir; const char *ast_config_AST_DB = cfg_paths.db_path; const char *ast_config_AST_PID = cfg_paths.pid_path; @@ -2968,6 +2970,7 @@ static void ast_readconfig(void) ast_copy_string(cfg_paths.log_dir, DEFAULT_LOG_DIR, sizeof(cfg_paths.log_dir)); ast_copy_string(cfg_paths.agi_dir, DEFAULT_AGI_DIR, sizeof(cfg_paths.agi_dir)); ast_copy_string(cfg_paths.db_path, DEFAULT_DB, sizeof(cfg_paths.db_path)); + ast_copy_string(cfg_paths.sbin_dir, DEFAULT_SBIN_DIR, sizeof(cfg_paths.sbin_dir)); ast_copy_string(cfg_paths.key_dir, DEFAULT_KEY_DIR, sizeof(cfg_paths.key_dir)); ast_copy_string(cfg_paths.pid_path, DEFAULT_PID, sizeof(cfg_paths.pid_path)); ast_copy_string(cfg_paths.socket_path, DEFAULT_SOCKET, sizeof(cfg_paths.socket_path)); @@ -3021,6 +3024,8 @@ static void ast_readconfig(void) ast_copy_string(cfg_paths.run_dir, v->value, sizeof(cfg_paths.run_dir)); } else if (!strcasecmp(v->name, "astmoddir")) { ast_copy_string(cfg_paths.module_dir, v->value, sizeof(cfg_paths.module_dir)); + } else if (!strcasecmp(v->name, "astsbindir")) { + ast_copy_string(cfg_paths.sbin_dir, v->value, sizeof(cfg_paths.sbin_dir)); } } @@ -3738,7 +3743,7 @@ int main(int argc, char *argv[]) canary_pid = fork(); if (canary_pid == 0) { - char canary_binary[128], *lastslash, ppid[12]; + char canary_binary[PATH_MAX], ppid[12]; /* Reset signal handler */ signal(SIGCHLD, SIG_DFL); @@ -3748,14 +3753,9 @@ int main(int argc, char *argv[]) ast_set_priority(0); snprintf(ppid, sizeof(ppid), "%d", (int) ast_mainpid); - execlp("astcanary", "astcanary", canary_filename, ppid, (char *)NULL); - - /* If not found, try the same path as used to execute asterisk */ - ast_copy_string(canary_binary, argv[0], sizeof(canary_binary)); - if ((lastslash = strrchr(canary_binary, '/'))) { - ast_copy_string(lastslash + 1, "astcanary", sizeof(canary_binary) + canary_binary - (lastslash + 1)); - execl(canary_binary, "astcanary", canary_filename, ppid, (char *)NULL); - } + /* Use the astcanary binary that we installed */ + snprintf(canary_binary, sizeof(canary_binary), "%s/astcanary", ast_config_AST_SBIN_DIR); + execl(canary_binary, "astcanary", canary_filename, ppid, (char *)NULL); /* Should never happen */ _exit(1); @@ -156,7 +156,7 @@ static int convert_bdb_to_sqlite3(void) char *cmd; int res; - ast_asprintf(&cmd, "astdb2sqlite3 '%s'\n", ast_config_AST_DB); + ast_asprintf(&cmd, "%s/astdb2sqlite3 '%s'\n", ast_config_AST_SBIN_DIR, ast_config_AST_DB); res = ast_safe_system(cmd); ast_free(cmd); |