diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-08-23 14:44:46 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-08-23 14:44:46 +0100 |
commit | cdfd4f0c915964d401cba19362c7dea8e89ad1da (patch) | |
tree | f6d313d1b57913d1309e00a578166e1e10fa6b8d /net-misc/asterisk/files | |
parent | 05a34d98821265bf73820931936f86704b9002c6 (diff) |
gentoo auto-resync : 23:08:2022 - 14:44:46
Diffstat (limited to 'net-misc/asterisk/files')
9 files changed, 0 insertions, 1271 deletions
diff --git a/net-misc/asterisk/files/asterisk-13.18.1-r2-autoconf-2.70.patch b/net-misc/asterisk/files/asterisk-13.18.1-r2-autoconf-2.70.patch deleted file mode 100644 index 68a5604757b2..000000000000 --- a/net-misc/asterisk/files/asterisk-13.18.1-r2-autoconf-2.70.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- asterisk-13.38.1/configure.ac.o 2021-01-08 18:33:41.360112920 +0200 -+++ asterisk-13.38.1/configure.ac 2021-01-08 18:38:26.649995123 +0200 -@@ -605,7 +605,6 @@ - - AC_FUNC_ALLOCA - AC_HEADER_DIRENT --AC_HEADER_STDC - AC_HEADER_SYS_WAIT - AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h libintl.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h strings.h sys/event.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h sys/types.h syslog.h termios.h unistd.h utime.h arpa/nameser.h sys/io.h]) - diff --git a/net-misc/asterisk/files/asterisk-13.38.1-r1-autoconf-lua-version.patch b/net-misc/asterisk/files/asterisk-13.38.1-r1-autoconf-lua-version.patch deleted file mode 100644 index 00a922ce0738..000000000000 --- a/net-misc/asterisk/files/asterisk-13.38.1-r1-autoconf-lua-version.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 61ef1a71e312f846b08ec4307c449f03907610a6 Mon Sep 17 00:00:00 2001 -From: Jaco Kroon <jaco@uls.co.za> -Date: Wed, 23 Dec 2020 19:41:10 +0200 -Subject: [PATCH] pbx_lua: Add LUA_VERSION environment variable to - ./configure. - -On Gentoo it's possible to have multiple lua versions installed, all -with a path of /usr, so it's not possible to use the current --with-lua -option to determisticly pin to a specific version as is required by the -Gentoo PMS standards. - -This environment variable allows to lock to specific versions, -unversioned check will be skipped if this variable is supplied. - -Change-Id: I8c403eda05df25ee0193960262ce849c7d2fd088 -Signed-off-by: Jaco Kroon <jaco@uls.co.za> ---- - configure | 7 ++++++- - configure.ac | 7 +++++-- - 2 files changed, 11 insertions(+), 3 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 64a0a5ace5..b380759b2b 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -511,6 +511,7 @@ AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2]) - AST_EXT_LIB_SETUP([LIBXSLT], [LibXSLT], [libxslt]) - AST_EXT_LIB_SETUP_OPTIONAL([LIBXSLT_CLEANUP], [LibXSLT Library Cleanup Function], [LIBXSLT], [libxslt]) - AST_EXT_LIB_SETUP([LUA], [Lua], [lua]) -+AC_ARG_VAR([LUA_VERSION],[A space separated list of target lua versions to test.]) - AST_EXT_LIB_SETUP([MISDN], [mISDN user], [misdn]) - AST_EXT_LIB_SETUP([MYSQLCLIENT], [MySQL client], [mysqlclient]) - AST_EXT_LIB_SETUP([NBS], [Network Broadcast Sound], [nbs]) -@@ -2559,7 +2560,7 @@ if test -z "$__opus_include" -o x"$__opus_include" = x" " ; then - fi - AST_EXT_LIB_CHECK([OPUSFILE], [opusfile], [op_open_callbacks], [opus/opusfile.h], [], [$__opus_include]) - --for ver in 5.4 5.3 5.2 5.1; do -+for ver in ${LUA_VERSION:-5.4 5.3 5.2 5.1}; do - AST_EXT_LIB_CHECK([LUA], lua${ver}, [luaL_newstate], lua${ver}/lua.h, [-lm]) - if test "x${PBX_LUA}" = "x1" ; then - if test x"${LUA_DIR}" = x; then -@@ -2572,7 +2573,9 @@ for ver in 5.4 5.3 5.2 5.1; do - done - - # Some distributions (like openSUSE and NetBSD) remove the 5.x suffix. --AST_EXT_LIB_CHECK([LUA], [lua], [luaL_newstate], [lua.h], [-lm]) -+if test "x${LUA_VERSION}" = "x"; then -+ AST_EXT_LIB_CHECK([LUA], [lua], [luaL_newstate], [lua.h], [-lm]) -+fi - - # Accept either RADIUS client library, their APIs are fully compatible, - # just different header filenames and different SONAMEs --- -2.26.2 - diff --git a/net-misc/asterisk/files/asterisk-13.38.2-r1-menuselect-exitcodes.patch b/net-misc/asterisk/files/asterisk-13.38.2-r1-menuselect-exitcodes.patch deleted file mode 100644 index 90c97e9df5e3..000000000000 --- a/net-misc/asterisk/files/asterisk-13.38.2-r1-menuselect-exitcodes.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 840eaa67e1ee0d10aa6bfb1e34659efa3095b772 Mon Sep 17 00:00:00 2001 -From: Jaco Kroon <jaco@uls.co.za> -Date: Sat, 13 Mar 2021 13:01:50 +0200 -Subject: [PATCH] menuselect: exit non-zero in case of failure on - --enable|disable options. - -Change-Id: I77e3466435f5a51a57538b29addb68d811af238d -Signed-off-by: Jaco Kroon <jaco@uls.co.za> ---- - menuselect/menuselect.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/menuselect/menuselect.c b/menuselect/menuselect.c -index 2eea3f09eb..adb6fa1777 100644 ---- a/menuselect/menuselect.c -+++ b/menuselect/menuselect.c -@@ -2090,6 +2090,7 @@ int main(int argc, char *argv[]) - /* Reset options processing */ - option_index = 0; - optind = 1; -+ res = 0; - - while ((c = getopt_long(argc, argv, "", long_options, &option_index)) != -1) { - print_debug("Got option %c\n", c); -@@ -2100,6 +2101,7 @@ int main(int argc, char *argv[]) - set_member_enabled(mem); - } else { - fprintf(stderr, "'%s' not found\n", optarg); -+ res = 1; - } - } - break; -@@ -2109,6 +2111,7 @@ int main(int argc, char *argv[]) - set_all(cat, 1); - } else { - fprintf(stderr, "'%s' not found\n", optarg); -+ res = 1; - } - } - break; -@@ -2123,6 +2126,7 @@ int main(int argc, char *argv[]) - clear_member_enabled(mem); - } else { - fprintf(stderr, "'%s' not found\n", optarg); -+ res = 1; - } - } - break; -@@ -2132,6 +2136,7 @@ int main(int argc, char *argv[]) - set_all(cat, 0); - } else { - fprintf(stderr, "'%s' not found\n", optarg); -+ res = 1; - } - } - break; -@@ -2146,7 +2151,6 @@ int main(int argc, char *argv[]) - break; - } - } -- res = 0; - } - - if (!res) { --- -2.26.2 - diff --git a/net-misc/asterisk/files/asterisk-13.38.2-r2-func_odbc_minargs-ARGC.patch b/net-misc/asterisk/files/asterisk-13.38.2-r2-func_odbc_minargs-ARGC.patch deleted file mode 100644 index db3817b5242b..000000000000 --- a/net-misc/asterisk/files/asterisk-13.38.2-r2-func_odbc_minargs-ARGC.patch +++ /dev/null @@ -1,180 +0,0 @@ -From d847f7e8f8736e5f51fd11df2992fac87131c1d8 Mon Sep 17 00:00:00 2001 -From: Jaco Kroon <jaco@uls.co.za> -Date: Wed, 17 Feb 2021 22:51:17 +0200 -Subject: [PATCH] func_odbc: Introduce minargs config and expose ARGC in - addition to ARGn. - -minargs enables enforcing of minimum count of arguments to pass to -func_odbc, so if you're unconditionally using ARG1 through ARG4 then -this should be set to 4. func_odbc will generate an error in this case, -so for example - -[FOO] -minargs = 4 - -and ODBC_FOO(a,b,c) in dialplan will now error out instead of using a -potentially leaked ARG4 from Gosub(). - -ARGC is needed if you're using optional argument, to verify whether or -not an argument has been passed, else it's possible to use a leaked ARGn -from Gosub (app_stack). So now you can safely do -${IF($[${ARGC}>3]?${ARGV}:default value)} kind of thing. - -Change-Id: I6ca0b137d90b03f6aa9c496991f6cbf1518f6c24 -Signed-off-by: Jaco Kroon <jaco@uls.co.za> ---- - configs/samples/func_odbc.conf.sample | 11 +++++++ - .../func_odbc_ARGC_minargs.txt | 20 ++++++++++++ - funcs/func_odbc.c | 31 +++++++++++++++++-- - 3 files changed, 60 insertions(+), 2 deletions(-) - create mode 100644 doc/CHANGES-staging/func_odbc_ARGC_minargs.txt - -diff --git a/configs/samples/func_odbc.conf.sample b/configs/samples/func_odbc.conf.sample -index c467f7ec06..b825974ea7 100644 ---- a/configs/samples/func_odbc.conf.sample -+++ b/configs/samples/func_odbc.conf.sample -@@ -23,6 +23,10 @@ - ; For substitution, you have ${ARG1}, ${ARG2} ... ${ARGn} - ; for the arguments to each SQL statement. - ; -+; Additionally you can use ${ARGC} to determine the number of arguments that -+; was actually passed (or risk using leaked ARGn variables from the channel). -+; Also reference the minargs configuration option. -+; - ; In addition, for write statements, you have ${VAL1}, ${VAL2} ... ${VALn} - ; parsed, just like arguments, for the values. In addition, if you want the - ; whole value, never mind the parsing, you can get that with ${VALUE}. -@@ -87,6 +91,13 @@ - ; These additional rows can be returned by using the name of the - ; function which was called to retrieve the first row as an - ; argument to ODBC_FETCH(). -+; minargs The minimum number of ARGUMENTS that has to be passed to the -+; function. If fewer arguments than this is passed, then the call -+; will fail. It is important to note that unlike Gosub() and friends, -+; func_odbc will not mask out ARGn variables that it's not actively -+; using, as such, without this, it's entirely possible to use say -+; ARG2 from the Gosub() inside func_odbc when the intent was to -+; use an argument passed to func_odbc, but it simply was never passed. - - - ; ODBC_SQL - Allow an SQL statement to be built entirely in the dialplan -diff --git a/doc/CHANGES-staging/func_odbc_ARGC_minargs.txt b/doc/CHANGES-staging/func_odbc_ARGC_minargs.txt -new file mode 100644 -index 0000000000..0984b5022d ---- /dev/null -+++ b/doc/CHANGES-staging/func_odbc_ARGC_minargs.txt -@@ -0,0 +1,20 @@ -+Subject: func_odbc -+ -+Introduce an ARGC variable for func_odbc functions, along with a minargs -+per-function configuration option. -+ -+minargs enables enforcing of minimum count of arguments to pass to -+func_odbc, so if you're unconditionally using ARG1 through ARG4 then -+this should be set to 4. func_odbc will generate an error in this case, -+so for example -+ -+[FOO] -+minargs = 4 -+ -+and ODBC_FOO(a,b,c) in dialplan will now error out instead of using a -+potentially leaked ARG4 from Gosub(). -+ -+ARGC is needed if you're using optional argument, to verify whether or -+not an argument has been passed, else it's possible to use a leaked ARGn -+from Gosub (app_stack). So now you can safely do -+${IF($[${ARGC}>3]?${ARGV}:default value)} kind of thing. -diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c -index 5cc0faaa98..9d6d0fc304 100644 ---- a/funcs/func_odbc.c -+++ b/funcs/func_odbc.c -@@ -120,6 +120,7 @@ struct acf_odbc_query { - char *sql_insert; - unsigned int flags; - int rowlimit; -+ int minargs; - struct ast_custom_function *acf; - }; - -@@ -545,6 +546,14 @@ static int acf_odbc_write(struct ast_channel *chan, const char *cmd, char *s, co - return -1; - } - -+ AST_STANDARD_APP_ARGS(args, s); -+ if (args.argc < query->minargs) { -+ ast_log(LOG_ERROR, "%d arguments supplied to '%s' requiring minimum %d\n", -+ args.argc, cmd, query->minargs); -+ AST_RWLIST_UNLOCK(&queries); -+ return -1; -+ } -+ - if (!chan) { - if (!(chan = ast_dummy_channel_alloc())) { - AST_RWLIST_UNLOCK(&queries); -@@ -578,7 +587,8 @@ static int acf_odbc_write(struct ast_channel *chan, const char *cmd, char *s, co - return -1; - } - -- AST_STANDARD_APP_ARGS(args, s); -+ snprintf(varname, sizeof(varname), "%u", args.argc); -+ pbx_builtin_pushvar_helper(chan, "ARGC", varname); - for (i = 0; i < args.argc; i++) { - snprintf(varname, sizeof(varname), "ARG%d", i + 1); - pbx_builtin_pushvar_helper(chan, varname, args.field[i]); -@@ -603,6 +613,8 @@ static int acf_odbc_write(struct ast_channel *chan, const char *cmd, char *s, co - chan = ast_channel_unref(chan); - } else { - /* Restore prior values */ -+ pbx_builtin_setvar_helper(chan, "ARGC", NULL); -+ - for (i = 0; i < args.argc; i++) { - snprintf(varname, sizeof(varname), "ARG%d", i + 1); - pbx_builtin_setvar_helper(chan, varname, NULL); -@@ -756,6 +768,14 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha - return -1; - } - -+ AST_STANDARD_APP_ARGS(args, s); -+ if (args.argc < query->minargs) { -+ ast_log(LOG_ERROR, "%d arguments supplied to '%s' requiring minimum %d\n", -+ args.argc, cmd, query->minargs); -+ AST_RWLIST_UNLOCK(&queries); -+ return -1; -+ } -+ - if (!chan) { - if (!(chan = ast_dummy_channel_alloc())) { - AST_RWLIST_UNLOCK(&queries); -@@ -768,7 +788,8 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha - ast_autoservice_start(chan); - } - -- AST_STANDARD_APP_ARGS(args, s); -+ snprintf(varname, sizeof(varname), "%u", args.argc); -+ pbx_builtin_pushvar_helper(chan, "ARGC", varname); - for (x = 0; x < args.argc; x++) { - snprintf(varname, sizeof(varname), "ARG%d", x + 1); - pbx_builtin_pushvar_helper(chan, varname, args.field[x]); -@@ -780,6 +801,8 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha - chan = ast_channel_unref(chan); - } else { - /* Restore prior values */ -+ pbx_builtin_setvar_helper(chan, "ARGC", NULL); -+ - for (x = 0; x < args.argc; x++) { - snprintf(varname, sizeof(varname), "ARG%d", x + 1); - pbx_builtin_setvar_helper(chan, varname, NULL); -@@ -1290,6 +1313,10 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu - sscanf(tmp, "%30d", &((*query)->rowlimit)); - } - -+ if ((tmp = ast_variable_retrieve(cfg, catg, "minargs"))) { -+ sscanf(tmp, "%30d", &((*query)->minargs)); -+ } -+ - (*query)->acf = ast_calloc(1, sizeof(struct ast_custom_function)); - if (!(*query)->acf) { - free_acf_query(*query); --- -2.26.3 - diff --git a/net-misc/asterisk/files/asterisk-13.38.2-r3-func_lock-fix-races.patch b/net-misc/asterisk/files/asterisk-13.38.2-r3-func_lock-fix-races.patch deleted file mode 100644 index 3d3c7b101d47..000000000000 --- a/net-misc/asterisk/files/asterisk-13.38.2-r3-func_lock-fix-races.patch +++ /dev/null @@ -1,421 +0,0 @@ -From b35211fd58afcf430a0d95a243dc7a086d72b2b8 Mon Sep 17 00:00:00 2001 -From: Jaco Kroon <jaco@uls.co.za> -Date: Fri, 21 May 2021 20:11:59 +0200 -Subject: [PATCH] Replacement patch for v13. - -Change-Id: I30236d7d7229f317c681fb7c6d7944d6108acd08 ---- - funcs/func_lock.c | 234 +++++++++++++++++++++++++--------------------- - 1 file changed, 126 insertions(+), 108 deletions(-) - -diff --git a/funcs/func_lock.c b/funcs/func_lock.c -index a006a574eb..c472504f52 100644 ---- a/funcs/func_lock.c -+++ b/funcs/func_lock.c -@@ -44,6 +44,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") - #include "asterisk/linkedlists.h" - #include "asterisk/astobj2.h" - #include "asterisk/utils.h" -+#include "asterisk/cli.h" - - /*** DOCUMENTATION - <function name="LOCK" language="en_US"> -@@ -112,7 +113,6 @@ static AST_LIST_HEAD_STATIC(locklist, lock_frame); - static void lock_free(void *data); - static void lock_fixup(void *data, struct ast_channel *oldchan, struct ast_channel *newchan); - static int unloading = 0; --static pthread_t broker_tid = AST_PTHREADT_NULL; - - static const struct ast_datastore_info lock_info = { - .type = "MUTEX", -@@ -126,8 +126,8 @@ struct lock_frame { - ast_cond_t cond; - /*! count is needed so if a recursive mutex exits early, we know how many times to unlock it. */ - unsigned int count; -- /*! Container of requesters for the named lock */ -- struct ao2_container *requesters; -+ /*! Count of waiting of requesters for the named lock */ -+ unsigned int requesters; - /*! who owns us */ - struct ast_channel *owner; - /*! name of the lock */ -@@ -149,14 +149,19 @@ static void lock_free(void *data) - while ((clframe = AST_LIST_REMOVE_HEAD(oldlist, list))) { - /* Only unlock if we own the lock */ - if (clframe->channel == clframe->lock_frame->owner) { -+ ast_mutex_lock(&clframe->lock_frame->mutex); - clframe->lock_frame->count = 0; - clframe->lock_frame->owner = NULL; -+ ast_cond_signal(&clframe->lock_frame->cond); -+ ast_mutex_unlock(&clframe->lock_frame->mutex); - } - ast_free(clframe); - } - AST_LIST_UNLOCK(oldlist); - AST_LIST_HEAD_DESTROY(oldlist); - ast_free(oldlist); -+ -+ ast_module_unref(ast_module_info->self); - } - - static void lock_fixup(void *data, struct ast_channel *oldchan, struct ast_channel *newchan) -@@ -175,54 +180,11 @@ static void lock_fixup(void *data, struct ast_channel *oldchan, struct ast_chann - if (clframe->lock_frame->owner == oldchan) { - clframe->lock_frame->owner = newchan; - } -- /* We don't move requesters, because the thread stack is different */ - clframe->channel = newchan; - } - AST_LIST_UNLOCK(list); - } - --static void *lock_broker(void *unused) --{ -- struct lock_frame *frame; -- struct timespec forever = { 1000000, 0 }; -- for (;;) { -- int found_requester = 0; -- -- /* Test for cancel outside of the lock */ -- pthread_testcancel(); -- AST_LIST_LOCK(&locklist); -- -- AST_LIST_TRAVERSE(&locklist, frame, entries) { -- if (ao2_container_count(frame->requesters)) { -- found_requester++; -- ast_mutex_lock(&frame->mutex); -- if (!frame->owner) { -- ast_cond_signal(&frame->cond); -- } -- ast_mutex_unlock(&frame->mutex); -- } -- } -- -- AST_LIST_UNLOCK(&locklist); -- pthread_testcancel(); -- -- /* If there are no requesters, then wait for a signal */ -- if (!found_requester) { -- nanosleep(&forever, NULL); -- } else { -- sched_yield(); -- } -- } -- /* Not reached */ -- return NULL; --} -- --static int ast_channel_cmp_cb(void *obj, void *arg, int flags) --{ -- struct ast_channel *chan = obj, *cmp_args = arg; -- return strcasecmp(ast_channel_name(chan), ast_channel_name(cmp_args)) ? 0 : CMP_MATCH; --} -- - static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - { - struct ast_datastore *lock_store = ast_channel_datastore_find(chan, &lock_info, NULL); -@@ -234,7 +196,12 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - struct timeval now; - - if (!lock_store) { -- ast_debug(1, "Channel %s has no lock datastore, so we're allocating one.\n", ast_channel_name(chan)); -+ if (unloading) { -+ ast_log(LOG_ERROR, "%sLOCK has no datastore and func_lock is unloading, failing.\n", -+ trylock ? "TRY" : ""); -+ return -1; -+ } -+ - lock_store = ast_datastore_alloc(&lock_info, NULL); - if (!lock_store) { - ast_log(LOG_ERROR, "Unable to allocate new datastore. No locks will be obtained.\n"); -@@ -253,6 +220,9 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - lock_store->data = list; - AST_LIST_HEAD_INIT(list); - ast_channel_datastore_add(chan, lock_store); -+ -+ /* We cannot unload until this channel has released the lock_store */ -+ ast_module_ref(ast_module_info->self); - } else - list = lock_store->data; - -@@ -266,6 +236,9 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - - if (!current) { - if (unloading) { -+ ast_log(LOG_ERROR, -+ "Lock doesn't exist whilst unloading. %sLOCK will fail.\n", -+ trylock ? "TRY" : ""); - /* Don't bother */ - AST_LIST_UNLOCK(&locklist); - return -1; -@@ -292,17 +265,12 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - AST_LIST_UNLOCK(&locklist); - return -1; - } -- current->requesters = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_MUTEX, 0, -- NULL, ast_channel_cmp_cb); -- if (!current->requesters) { -- ast_mutex_destroy(¤t->mutex); -- ast_cond_destroy(¤t->cond); -- ast_free(current); -- AST_LIST_UNLOCK(&locklist); -- return -1; -- } - AST_LIST_INSERT_TAIL(&locklist, current, entries); - } -+ /* Add to requester list */ -+ ast_mutex_lock(¤t->mutex); -+ current->requesters++; -+ ast_mutex_unlock(¤t->mutex); - AST_LIST_UNLOCK(&locklist); - - /* Found lock or created one - now find or create the corresponding link in the channel */ -@@ -315,7 +283,13 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - - if (!clframe) { - if (unloading) { -+ ast_log(LOG_ERROR, -+ "Busy unloading. %sLOCK will fail.\n", -+ trylock ? "TRY" : ""); - /* Don't bother */ -+ ast_mutex_lock(¤t->mutex); -+ current->requesters--; -+ ast_mutex_unlock(¤t->mutex); - AST_LIST_UNLOCK(list); - return -1; - } -@@ -324,6 +298,9 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - ast_log(LOG_ERROR, - "Unable to allocate channel lock frame. %sLOCK will fail.\n", - trylock ? "TRY" : ""); -+ ast_mutex_lock(¤t->mutex); -+ current->requesters--; -+ ast_mutex_unlock(¤t->mutex); - AST_LIST_UNLOCK(list); - return -1; - } -@@ -339,44 +316,44 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock) - * the same amount, before we'll release this one. - */ - if (current->owner == chan) { -+ /* We're not a requester, we already have it */ -+ ast_mutex_lock(¤t->mutex); -+ current->requesters--; -+ ast_mutex_unlock(¤t->mutex); - current->count++; - return 0; - } - -- /* Okay, we have both frames, so now we need to try to lock. -- * -- * Locking order: always lock locklist first. We need the -- * locklist lock because the broker thread counts whether -- * there are requesters with the locklist lock held, and we -- * need to hold it, so that when we send our signal, below, -- * to wake up the broker thread, it definitely will see that -- * a requester exists at that point in time. Otherwise, we -- * could add to the requesters after it has already seen that -- * that lock is unoccupied and wait forever for another signal. -- */ -- AST_LIST_LOCK(&locklist); -- ast_mutex_lock(¤t->mutex); -- /* Add to requester list */ -- ao2_link(current->requesters, chan); -- pthread_kill(broker_tid, SIGURG); -- AST_LIST_UNLOCK(&locklist); -- - /* Wait up to three seconds from now for LOCK. */ - now = ast_tvnow(); - timeout.tv_sec = now.tv_sec + 3; - timeout.tv_nsec = now.tv_usec * 1000; - -- if (!current->owner -- || (!trylock -- && !(res = ast_cond_timedwait(¤t->cond, ¤t->mutex, &timeout)))) { -- res = 0; -+ ast_mutex_lock(¤t->mutex); -+ -+ res = 0; -+ while (!trylock && !res && current->owner) { -+ res = ast_cond_timedwait(¤t->cond, ¤t->mutex, &timeout); -+ } -+ if (current->owner) { -+ ast_log(LOG_ERROR, "%sLOCK failed to obtain lock %s.\n", trylock ? "TRY" : "", -+ lockname); -+ /* timeout; -+ * trylock; or -+ * cond_timedwait failed. -+ * -+ * either way, we fail to obtain the lock. -+ */ -+ res = -1; -+ } else { - current->owner = chan; - current->count++; -- } else { -- res = -1; -+ res = 0; - } - /* Remove from requester list */ -- ao2_unlink(current->requesters, chan); -+ current->requesters--; -+ if (res && unloading) -+ ast_cond_signal(¤t->cond); - ast_mutex_unlock(¤t->mutex); - - return res; -@@ -400,7 +377,7 @@ static int unlock_read(struct ast_channel *chan, const char *cmd, char *data, ch - } - - if (!(list = lock_store->data)) { -- ast_debug(1, "This should NEVER happen\n"); -+ ast_log(LOG_ERROR, "Datastore's data member is NULL ... this should be impossible."); - ast_copy_string(buf, "0", len); - return 0; - } -@@ -419,12 +396,17 @@ static int unlock_read(struct ast_channel *chan, const char *cmd, char *data, ch - - if (!clframe) { - /* We didn't have this lock in the first place */ -+ ast_log(LOG_WARNING, "Attempting to UNLOCK(%s) - a lock this channel never owned.\n", -+ data); - ast_copy_string(buf, "0", len); - return 0; - } - - if (--clframe->lock_frame->count == 0) { -+ ast_mutex_lock(&clframe->lock_frame->mutex); - clframe->lock_frame->owner = NULL; -+ ast_cond_signal(&clframe->lock_frame->cond); -+ ast_mutex_unlock(&clframe->lock_frame->mutex); - } - - ast_copy_string(buf, "1", len); -@@ -455,6 +437,37 @@ static int trylock_read(struct ast_channel *chan, const char *cmd, char *data, c - return 0; - } - -+static char *handle_cli_locks_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -+{ -+ int c = 0; -+ struct lock_frame* current; -+ switch (cmd) { -+ case CLI_INIT: -+ e->command = "locks show"; -+ e->usage = -+ "Usage: locks show\n" -+ " List all locks known to func_lock, along with their current status.\n"; -+ return NULL; -+ case CLI_GENERATE: -+ return NULL; -+ } -+ -+ ast_cli(a->fd, "func_lock locks:\n"); -+ ast_cli(a->fd, "%-40s Requesters Owner\n", "Name"); -+ AST_LIST_LOCK(&locklist); -+ AST_LIST_TRAVERSE(&locklist, current, entries) { -+ ast_mutex_lock(¤t->mutex); -+ ast_cli(a->fd, "%-40s %-10d %s\n", current->name, current->requesters, -+ current->owner ? ast_channel_name(current->owner) : "(unlocked)"); -+ ast_mutex_unlock(¤t->mutex); -+ c++; -+ } -+ AST_LIST_UNLOCK(&locklist); -+ ast_cli(a->fd, "%d total locks listed.\n", c); -+ -+ return 0; -+} -+ - static struct ast_custom_function lock_function = { - .name = "LOCK", - .read = lock_read, -@@ -473,6 +486,8 @@ static struct ast_custom_function unlock_function = { - .read_max = 2, - }; - -+static struct ast_cli_entry cli_locks_show = AST_CLI_DEFINE(handle_cli_locks_show, "List func_lock locks."); -+ - static int unload_module(void) - { - struct lock_frame *current; -@@ -480,34 +495,43 @@ static int unload_module(void) - /* Module flag */ - unloading = 1; - -+ /* Make it impossible for new requesters to be added -+ * NOTE: channels could already be in get_lock() */ -+ ast_custom_function_unregister(&lock_function); -+ ast_custom_function_unregister(&trylock_function); -+ -+ ast_cli_unregister(&cli_locks_show); -+ - AST_LIST_LOCK(&locklist); - while ((current = AST_LIST_REMOVE_HEAD(&locklist, entries))) { -- /* If any locks are currently in use, then we cannot unload this module */ -- if (current->owner || ao2_container_count(current->requesters)) { -- /* Put it back */ -- AST_LIST_INSERT_HEAD(&locklist, current, entries); -- AST_LIST_UNLOCK(&locklist); -- unloading = 0; -- return -1; -+ int warned = 0; -+ ast_mutex_lock(¤t->mutex); -+ while (current->owner || current->requesters) { -+ if (!warned) { -+ ast_log(LOG_WARNING, "Waiting for %d requesters for %s lock %s.\n", -+ current->requesters, current->owner ? "locked" : "unlocked", -+ current->name); -+ warned = 1; -+ } -+ /* either the mutex is locked, or other parties are currently in get_lock, -+ * we need to wait for all of those to clear first */ -+ ast_cond_wait(¤t->cond, ¤t->mutex); - } -+ ast_mutex_unlock(¤t->mutex); -+ /* At this point we know: -+ * 1. the lock has been released, -+ * 2. there are no requesters (nor should any be able to sneak in). -+ */ - ast_mutex_destroy(¤t->mutex); -- ao2_ref(current->requesters, -1); -+ ast_cond_destroy(¤t->cond); - ast_free(current); - } -+ AST_LIST_UNLOCK(&locklist); -+ AST_LIST_HEAD_DESTROY(&locklist); - -- /* No locks left, unregister functions */ -- ast_custom_function_unregister(&lock_function); -- ast_custom_function_unregister(&trylock_function); -+ /* At this point we can safely stop access to UNLOCK */ - ast_custom_function_unregister(&unlock_function); - -- if (broker_tid != AST_PTHREADT_NULL) { -- pthread_cancel(broker_tid); -- pthread_kill(broker_tid, SIGURG); -- pthread_join(broker_tid, NULL); -- } -- -- AST_LIST_UNLOCK(&locklist); -- - return 0; - } - -@@ -516,13 +540,7 @@ static int load_module(void) - int res = ast_custom_function_register_escalating(&lock_function, AST_CFE_READ); - res |= ast_custom_function_register_escalating(&trylock_function, AST_CFE_READ); - res |= ast_custom_function_register_escalating(&unlock_function, AST_CFE_READ); -- -- if (ast_pthread_create_background(&broker_tid, NULL, lock_broker, NULL)) { -- ast_log(LOG_ERROR, "Failed to start lock broker thread. Unloading func_lock module.\n"); -- broker_tid = AST_PTHREADT_NULL; -- unload_module(); -- return AST_MODULE_LOAD_DECLINE; -- } -+ res |= ast_cli_register(&cli_locks_show); - - return res; - } --- -2.26.3 - diff --git a/net-misc/asterisk/files/asterisk-historic-no-var-run-install.patch b/net-misc/asterisk/files/asterisk-historic-no-var-run-install.patch deleted file mode 100644 index aa9fb306831f..000000000000 --- a/net-misc/asterisk/files/asterisk-historic-no-var-run-install.patch +++ /dev/null @@ -1,14 +0,0 @@ -Patch by: Jaco Kroon <jkroon@uls.co.za> -Link: https://bugs.gentoo.org/show_bug.cgi?id=451808 - ---- a/Makefile 2013-01-17 17:16:59.767081716 +0200 -+++ b/Makefile 2013-01-17 17:17:45.897600655 +0200 -@@ -541,7 +541,7 @@ - - NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h)) - OLDHEADERS=$(filter-out $(NEWHEADERS) $(notdir $(DESTDIR)$(ASTHEADERDIR)),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h))) --INSTALLDIRS="$(ASTLIBDIR)" "$(ASTMODDIR)" "$(ASTSBINDIR)" "$(ASTETCDIR)" "$(ASTVARRUNDIR)" \ -+INSTALLDIRS="$(ASTLIBDIR)" "$(ASTMODDIR)" "$(ASTSBINDIR)" "$(ASTETCDIR)" \ - "$(ASTSPOOLDIR)" "$(ASTSPOOLDIR)/dictate" "$(ASTSPOOLDIR)/meetme" \ - "$(ASTSPOOLDIR)/monitor" "$(ASTSPOOLDIR)/system" "$(ASTSPOOLDIR)/tmp" \ - "$(ASTSPOOLDIR)/voicemail" "$(ASTHEADERDIR)" "$(ASTHEADERDIR)/doxygen" \ diff --git a/net-misc/asterisk/files/asterisk.tmpfiles-13.38.3-r2.conf b/net-misc/asterisk/files/asterisk.tmpfiles-13.38.3-r2.conf deleted file mode 100644 index dc999ee65fc9..000000000000 --- a/net-misc/asterisk/files/asterisk.tmpfiles-13.38.3-r2.conf +++ /dev/null @@ -1 +0,0 @@ -d /run/asterisk 0750 asterisk asterisk diff --git a/net-misc/asterisk/files/confd-13.32.0 b/net-misc/asterisk/files/confd-13.32.0 deleted file mode 100644 index 20e8df4de21c..000000000000 --- a/net-misc/asterisk/files/confd-13.32.0 +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright 1999-2020 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# -# Additional options for asterisk -# -# see "asterisk -h" for a list of options -# -# No default. -# -#ASTERISK_OPTS="" - -# -# User and group to run asterisk as -# -# Value: double-colon separated list of user and group, or empty to run as root: -# -# -# "asterisk:asterisk" to run as user "asterisk" and group "asterisk" -# "asterisk" to run as user "asterisk" and all groups that user "asterisk" is a member of -# ":asterisk" to run as user "root" and group "asterisk" -# -# Default: asterisk -# -#ASTERISK_USER="asterisk" - -# -# Nicelevel -# -# Set the priority of the asterisk process -# -# Value: (highest) -20..19 (lowest) -# -# No default (leave scheduling to be system default). -# -#ASTERISK_NICE="19" - -# Send crash notifications emails to this address -# (needs a working mail service and /usr/sbin/sendmail to do so (e.g. ssmtp)) -# -# Value: Email address or empty to disable -# -# No default. -# -#ASTERISK_NOTIFY_EMAIL="root" - -# -# Send asterisk's output to this terminal -# -# Value: Full path to device node or a number -# -# No default. -# -#ASTERISK_TTY="/dev/tty9" - -# -# Start an asterisk console on the terminal specified by ASTERISK_TTY -# -# Warning! Use only for debugging, this is a potential security issue! -# -# Value: yes/no -# -# Default: no -# -#ASTERISK_CONSOLE="no" - -# -# Maximum size of core files. -# -# Value: Size in bytes, unlimited for no limit or empty to disable. -# -# Default: do not generate core dumps -# -#ASTERISK_CORE_SIZE="unlimited" - -# -# ASTERISK_CORE_DIR -# -# Value: Directory (will be created if non-existant). -# -# Default: /tmp -# -#ASTERISK_CORE_DIR="/var/lib/asterisk/core" - -# -# Max number of filedescriptors. asterisk can trivially run out of -# descriptors. In most (SIP) cases it uses at least four descriptors per call, -# and this is a conservative value. -# -# Value: Number of descriptors -# -# Default: leave system default in place. -# -ASTERISK_MAX_FD="4096" - -# -# Delay time before restarting asterisk after a crash. -# -# Value: Number of seconds to sleep after a crash before restarting. -# -# Default: 5 -# -#ASTERISK_RESTART_DELAY=5 - -# -# The stop mechanism to use. Asterisk can do gracefully, when convenient or now. -# By default we expect you to want to stop as soon as possible, so we default -# -# Default: gracefully -# -#ASTERISK_STOP_METHOD="when convenient" - -# -# By default the init script waits two minutes for asterisk to stop. This allows -# you to change that, or even completely disable and go into wait for ever mode (-1). -# The value here is in seconds. -# -# Default: 120 -# -#ASTERISK_STOP_TIMEOUT=-1 - -# -# Kill these tasks after asterisk crashed -# -# Warning! This will kill _ALL_ tasks with the specified names! -# -# Value: Space separated list of names in double quotes (e.g. "mpg123 mad") -# -# Default is to not do stupid things like killing random processes. -# -#ASTERISK_CLEANUP_ON_CRASH="mpg123 asterisk-mpg123 mad" - -# -# If you'd like an alternative folder to /etc/${RC_SVCNAME} to be used -# (typically /etc/asterisk) to be used for configuration. -# -# Default: /etc/${RC_SVCNAME} -# -#ASTERISK_CONFDIR="/etc/foo/bar" - -# -# Normally the init script will not wait for asterisk to fully boot. With this -# setting set to yes/true/1 it will issue a "core waitfullybooted" directly -# after starting asterisk, and wait for asterisk to start up completely. This -# is useful in certain conditions where other software requires asterisk to be -# properly started before they themselves can be started. -# -# Default: no -# -#ASTERISK_WAITBOOTED=yes - -# -# When core-dumping, the default was to generate core-$(date +%Y%m%d-%H%M%S). -# In certain highly unusual configurations it's helpful to also get the -# hostname into this filename. By enabling this option the wrapper loop will -# adjust the core file to be named core-$(hostname)-$(date ...). -# -# Default: no -# -#ASTERISK_CORE_USEHOSTNAME=yes diff --git a/net-misc/asterisk/files/initd-13.38.3-r2 b/net-misc/asterisk/files/initd-13.38.3-r2 deleted file mode 100644 index 8a4555be7ecd..000000000000 --- a/net-misc/asterisk/files/initd-13.38.3-r2 +++ /dev/null @@ -1,362 +0,0 @@ -#!/sbin/openrc-run -# Copyright 1999-2021 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -extra_started_commands="forcestop reload" - -depend() { - need net - use nscd dns dahdi mysql postgresql slapd capi -} - -is_running() { - [ -r "${ast_rundir}/asterisk.pid" ] || return 1 - PID="$(cat "${ast_rundir}/asterisk.pid")" - [ -d "/proc/${PID}" ] || return 1 - EXE="$(readlink -f /proc/${PID}/exe)" - EXE="${EXE% (deleted)}" # in case asterisk got upgraded and we're still looking at an old one. - [ "${EXE}" = /usr/sbin/asterisk ] || return 1 # pid got re-used for another process. - - # PID reported in pidfile is active, and is still an asterisk instance. - return 0 -} - -# Sets up a few variables for us for use -# ast_instancename: eg, asterisk when RC_SVCNAME=asterisk, or asterisk(foo) when asterisk.foo. -# ast_rundir: directory to be used as run folder (pid and ctl files). -# ast_spooldir: -setup_svc_variables() -{ - local t - - ast_instancename=asterisk - ast_rundir=/run/${RC_SVCNAME} - ast_logdir=/var/log/${RC_SVCNAME} - ast_spooldir=/var/spool/${RC_SVCNAME} - ast_confdir=/etc/${RC_SVCNAME/.//} - ast_stop_timeout=120 - ast_stop_method="gracefully" - - if [ "${RC_SVCNAME}" != "asterisk" ]; then - t="${RC_SVCNAME#asterisk.}" - if [ "${RC_SVCNAME}" = "${t}" ]; then - eerror "Invalid SVCNAME of ${RC_SVCNAME}, must be of the format asterisk.name." - return 1 - fi - ast_instancename+="(${t})" - fi - - [ -n "${ASTERISK_RUNDIR}" ] && ast_rundir="${ASTERISK_RUNDIR}" - [ -n "${ASTERISK_LOGDIR}" ] && ast_logdir="${ASTERISK_LOGDIR}" - [ -n "${ASTERISK_SPOOLDIR}" ] && ast_spooldir="${ASTERISK_SPOOLDIR}" - [ -n "${ASTERISK_CONFDIR}" ] && ast_confdir="${ASTERISK_CONFDIR}" - [ -n "${ASTERISK_STOP_TIMEOUT}" ] && ast_stop_timeout="${ASTERISK_STOP_TIMEOUT}" - case "${ASTERISK_STOP_METHOD}" in - gracefully|when\ convenient|now) - ast_stop_method="${ASTERISK_STOP_METHOD}" - ;; - esac - ast_group= - if [ -n "${ASTERISK_USER}" ]; then - ast_user="${ASTERISK_USER%%:*}" - if [ "${ast_user}" != "${ASTERISK_USER}" ]; then - ast_group="${ASTERISK_USER#*:}" - ast_group="${ast_group%%:*}" - fi - fi - - [ -z "${ast_user}" ] && ast_user=asterisk - - ast_pgroup="$(getent group $(getent passwd "${ast_user}" | awk -F: '{ print $4 }') | sed -re 's/:.*//')" - - return 0 -} - -asterisk_run_loop() { - local result=0 signal=0 - - echo "Initializing ${ast_instancename} wrapper" - OPTS="$*" - - trap "rm -f '${ast_rundir}/wrapper_loop.running'" EXIT - touch "${ast_rundir}/wrapper_loop.running" - - while [ -r "${ast_rundir}/wrapper_loop.running" ]; do - if [ -n "${TTY}" ]; then - /usr/bin/stty -F "${TTY}" sane - ${NICE} /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" ${OPTS} >"${TTY}" 2>&1 <"${TTY}" - result=$? - else - ${NICE} /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" ${OPTS} >/dev/null 2>&1 - result=$? - fi - - if [ "$result" -eq 0 ]; then - echo "Asterisk terminated normally" - break - else - if [ "$result" -gt 128 ]; then - signal="$(expr "$result" - 128)" - MSG="Asterisk terminated with Signal: $signal" - - CORE_TARGET="core-" - yesno "${ASTERISK_CORE_USEHOSTNAME}" && CORE_TARGET+="$(hostname)-" - CORE_TARGET+="$(date "+%Y%m%d-%H%M%S")" - - local CORE_DUMPED=0 - if [ -f "${ASTERISK_CORE_DIR}/core" ]; then - mv "${ASTERISK_CORE_DIR}/core" \ - "${ASTERISK_CORE_DIR}/${CORE_TARGET}" - CORE_DUMPED=1 - - elif [ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]; then - mv "${ASTERISK_CORE_DIR}/core.${PID}" \ - "${ASTERISK_CORE_DIR}/${CORE_TARGET}" - CORE_DUMPED=1 - - fi - - [ $CORE_DUMPED -eq 1 ] && \ - MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}" - else - MSG="Asterisk terminated with return code: $result" - fi - - # kill left-over tasks - for X in ${ASTERISK_CLEANUP_ON_CRASH}; do - kill -9 "$(pidof "${X}")"; - done - fi - - [ -n "${TTY}" ] \ - && echo "${MSG}" >"${TTY}" \ - || echo "${MSG}" - - - if [ -n "${ASTERISK_NOTIFY_EMAIL}" ] && \ - [ -x /usr/sbin/sendmail ]; then - echo -e -n "Subject: Asterisk crashed\r\n${MSG}\r\n" |\ - /usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}" - fi - sleep "${ASTERISK_RESTART_DELAY}" - echo "Restarting Asterisk..." - done - - echo "Terminating wrapper loop." - return 0 -} - -start() { - local OPTS PID - local tmp x - - local OPTS ARGS - - setup_svc_variables || return $? - - ebegin "Starting ${ast_instancename} PBX" - - eindent - - # filter (redundant) arguments - OPTS="$(echo "${ASTERISK_OPTS}" | sed -re "s:-[cfF]::g")" - - # default options - OPTS="${OPTS} -f" # don't fork / detach breaks wrapper script... - - # ensure that ASTERISK_RESTART_DELAY is integer. - ASTERISK_RESTART_DELAY="$(echo "${ASTERISK_RESTART_DELAY}" | sed -re 's/^([0-9]*).*/\1/')" - [ -z "${ASTERISK_RESTART_DELAY}" ] && ASTERISK_RESTART_DELAY=5 - - if [ -n "${ASTERISK_CORE_SIZE}" ] && - [ "${ASTERISK_CORE_SIZE}" != "0" ]; then - ulimit -c ${ASTERISK_CORE_SIZE} - - if [ -n "${ASTERISK_CORE_DIR}" ] && \ - [ ! -d "${ASTERISK_CORE_DIR}" ] - then - checkpath -d -m 0755 -o ${ast_user}:${ast_group} "${ASTERISK_CORE_DIR}" - fi - ASTERISK_CORE_DIR="${ASTERISK_CORE_DIR:-/tmp}" - - cd "${ASTERISK_CORE_DIR}" - einfo "Core dump size : ${ASTERISK_CORE_SIZE}" - einfo "Core dump location : ${ASTERISK_CORE_DIR}" - - OPTS="${OPTS} -g" - fi - - if [ -n "${ASTERISK_MAX_FD}" ]; then - ulimit -n ${ASTERISK_MAX_FD} - einfo "Max open filedescriptors : ${ASTERISK_MAX_FD}" - fi - - if [ -n "${ASTERISK_NICE}" ]; then - if [ ${ASTERISK_NICE} -ge -20 ] && \ - [ ${ASTERISK_NICE} -le 19 ]; then - einfo "Nice level : ${ASTERISK_NICE}" - NICE="nice -n ${ASTERISK_NICE} --" - else - eerror "Nice value must be between -20 and 19" - return 1 - fi - else - NICE="" - fi - - if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then - if [ -x /usr/sbin/sendmail ]; then - einfo "Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}" - else - ewarn "Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!" - unset ASTERISK_NOTIFY_EMAIL - fi - fi - - if [ -n "${ASTERISK_TTY}" ]; then - for x in "${ASTERISK_TTY}" \ - "/dev/tty${ASTERISK_TTY}" \ - "/dev/vc/${ASTERISK_TTY}" - do - if [ -c "${x}" ]; then - TTY="${x}" - fi - done - [ -n "${TTY}" ] && \ - einfo "Messages are sent to : ${TTY}" - fi - - if yesno "${ASTERISK_CONSOLE}" && [ -n "${TTY}" ]; then - einfo "Starting Asterisk console : Yes" - OPTS="${OPTS} -c" - fi - - if ! getent passwd "${ast_user}" &>/dev/null; then - eerror "Requested to run asterisk as ${ast_user}, which doesn't exist." - return 1 - fi - OPTS="${OPTS} -U ${ast_user}" - - if [ -n "${ast_group}" ] && ! getent group "${ast_group}" &>/dev/null; then - eerror "Requested to run ${ast_instancename} with group ${ast_group}, which doesn't exist." - return 1 - fi - [ -n "${ast_group}" ] && OPTS="${OPTS} -G ${ast_group}" - - if [ "${ast_user}" = root ]; then - ewarn "Starting asterisk as root is not recommended (SERIOUS SECURITY CONSIDERATIONS)." - elif [ "${ast_group}" = root ]; then - ewarn "Starting asterisk with group root is not recommended (SERIOUS SECURITY CONSIDERATIONS)." - fi - - checkpath -d -m 0755 -o "${ast_user}:${ast_group}" "${ast_logdir}" "${ast_rundir}" - einfo "Starting asterisk as : ${ast_user}:${ast_group:-${ast_pgroup} (+supplementaries)}" - asterisk_run_loop ${OPTS} 2>&1 | logger -t "wrapper:${ast_instancename}" &>/dev/null & - result=$? - - if [ $result -eq 0 ]; then - # 2 seconds should be enough for asterisk to start - sleep 2 - is_running - result=$? - - [ $result -eq 0 ] || wrapperstop - fi - - eoutdent - eend $result - - if [ $result -eq 0 ] && yesno "${ASTERISK_WAITBOOTED}"; then - if [ ! -r "${ast_rundir}/asterisk.ctl" ]; then - # asterisk can crash during startup ... - ebegin "Waiting for ctl file to appear" - while is_running && [ ! -r "${ast_rundir}/asterisk.ctl" ]; do - sleep 1 - done - is_running - result=$? - eend $result - fi - if [ $result -eq 0 ]; then - ebegin "Waiting for ${ast_instancename} to fully boot" - /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r -x "core waitfullybooted" &>/dev/null - eend $? - fi - fi - - return $result -} - -wrapperstop() { - # Accomodate system upgrades (so a previous version of the wrapper script that still uses a pid file may be running). - if [ -r "${ast_rundir}/wrapper_loop.pid" ]; then - ebegin "Killing ${ast_instancename} wrapper script" - kill "$(cat /run/asterisk/wrapper_loop.pid)" - eend $? - fi - - # The new one (due to "hardened" requirements) uses a simpler - # flag to indicate running or shutting down. - if [ -r "${ast_rundir}/wrapper_loop.running" ]; then - ebegin "Signalling ${ast_instancename} wrapper script to terminate" - rm "${ast_rundir}/wrapper_loop.running" - eend $? - fi - - return 0 -} - -forcestop() { - setup_svc_variables || return $? - - # Just to be sure - when we want to forcestop we should make it all tear down. - wrapperstop - - ebegin "Stopping ${ast_instancename} PBX" - start-stop-daemon --stop --pidfile /run/asterisk/asterisk.pid - eend $? -} - -stop() { - setup_svc_variables || return $? - - wrapperstop - - if ! is_running; then - eerror "${ast_instancename} is not running!" - return 0 - fi - - ebegin "Stopping ${ast_instancename} PBX ${ast_stop_method}" - /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r -x "core stop ${ast_stop_method}" &>/dev/null - # Now we have to wait until asterisk has _really_ stopped. - sleep 1 - if is_running; then - einfon "Waiting for ${ast_instancename} to shutdown ." - local cnt=0 - while is_running; do - cnt="$(expr $cnt + 2)" - if [ ${ast_stop_timeout} -gt 0 -a $cnt -gt ${ast_stop_timeout} ] ; then - echo - eend 1 "Failed waiting for ${ast_instancename} to stop." - return 1 - fi - sleep 2 - echo -n "." - done - echo - fi - eend 0 -} - -reload() { - setup_svc_variables || return $? - - if is_running; then - ebegin "Forcing ${ast_instancename} to reload configuration" - /usr/sbin/asterisk -C "${ast_confdir}/asterisk.conf" -r -x "module reload" &>/dev/null - eend $? - else - eerror "${ast_instancename} is not running!" - fi -} |