diff options
author | Jaco Kroon <jaco@uls.co.za> | 2022-08-23 10:26:05 +0200 |
---|---|---|
committer | Matthew Smith <matthew@gentoo.org> | 2022-08-23 09:49:17 +0100 |
commit | 7d58a9bedd50b381637d0434afd06c0d1911db46 (patch) | |
tree | e8aec4b585eaa8af83e84f06dea18ba30a3a8b1e /net-misc/asterisk | |
parent | net-misc/asterisk-g729: Remove :13 (diff) | |
download | gentoo-7d58a9bedd50b381637d0434afd06c0d1911db46.tar.gz gentoo-7d58a9bedd50b381637d0434afd06c0d1911db46.tar.bz2 gentoo-7d58a9bedd50b381637d0434afd06c0d1911db46.zip |
net-misc/asterisk: remove :13 (security)
Bug: https://bugs.gentoo.org/838391
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
Signed-off-by: Matthew Smith <matthew@gentoo.org>
Diffstat (limited to 'net-misc/asterisk')
11 files changed, 0 insertions, 1625 deletions
diff --git a/net-misc/asterisk/Manifest b/net-misc/asterisk/Manifest index 1f0bd3611e8d..c0d412e23a98 100644 --- a/net-misc/asterisk/Manifest +++ b/net-misc/asterisk/Manifest @@ -1,4 +1,3 @@ -DIST asterisk-13.38.3.tar.gz 33711458 BLAKE2B a1f37c210e7e95962665310b542d9a3b682ecc5e90188e8272a0cd6e22ebfa963ed5af46f0f85c2074bc0bbe34d72473343ff3437d80b58e5383eb80385d0b89 SHA512 dd67f73704f1c68639313852ba1508165c7b525f0f4156c776258e27ee19a0ee87293ae7805178b0f37188fca91b861c52b5206cbba754a6181492d0efb7e895 DIST asterisk-16.22.0.tar.gz 27925083 BLAKE2B ce700f8924fb2c7c8fc521879c0768595eb7462bb3aa78dd8b64c8a268b357e522ece17c6c4a02a4e17c16bad5141d5c2c15b602d335567be5a3df49f67300ca SHA512 7032da647f4063320fb2ea9c3cd7b0079fbb907e5c8f9d5cdc4197c82d07c99c75bfdcace5c74a593573cd0d9a1b9eb73b2030dc0b13604abb481a311a742173 DIST asterisk-16.23.0.tar.gz 27960909 BLAKE2B 60aa12e41c199da7c052555f5716fd7325de66d0821c8f285635c8ad01435a182c670b12c9d3959ce8206b1bad255e61eeea199bf23b9dd49915da84487e2ce2 SHA512 d9f6cc083afb858ce48b090bea6a8479679ff840eb35dbc6af7d88ded17539c6e906547a7d936de31b3a50d692df1ccce2fe40b81bba1dc6a82a78c94e1198c4 DIST asterisk-16.24.0.tar.gz 27987904 BLAKE2B 2a179366d3853afd6528b7b61c33b6683e924ae62bb4cbfd04b3e6717b4d73345b893632164396a5587d633d60338615f69a02d1f8b7f7ac3903131e209825ea SHA512 0c770264fad5a5f4c8cc6572b524349337635f0a8def26391897776d7ba4ec8f0cf595f588abc75f9f37ba941a56b7d3704b3ef3ddb4b67d3e4e341992e8f815 diff --git a/net-misc/asterisk/asterisk-13.38.3-r3.ebuild b/net-misc/asterisk/asterisk-13.38.3-r3.ebuild deleted file mode 100644 index 2bd6004948b9..000000000000 --- a/net-misc/asterisk/asterisk-13.38.3-r3.ebuild +++ /dev/null @@ -1,353 +0,0 @@ -# Copyright 1999-2022 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -LUA_COMPAT=( lua5-{1..4} ) - -inherit autotools linux-info lua-single systemd toolchain-funcs tmpfiles - -DESCRIPTION="Asterisk: A Modular Open Source PBX System" -HOMEPAGE="https://www.asterisk.org/" -SRC_URI="https://downloads.asterisk.org/pub/telephony/asterisk/releases/${P}.tar.gz" -LICENSE="GPL-2" -SLOT="0/${PV%%.*}" -KEYWORDS="amd64 ~arm ~arm64 ~ppc ~ppc64 x86" - -IUSE_VOICEMAIL_STORAGE=( - +voicemail_storage_file - voicemail_storage_odbc - voicemail_storage_imap -) -IUSE="${IUSE_VOICEMAIL_STORAGE[*]} alsa blocks bluetooth calendar +caps cluster curl dahdi debug doc freetds gtalk http iconv ilbc ldap lua mysql newt odbc oss pjproject portaudio postgres radius selinux snmp span speex srtp +ssl static statsd syslog systemd vorbis xmpp" -REQUIRED_USE="gtalk? ( xmpp ) - lua? ( ${LUA_REQUIRED_USE} ) - ^^ ( ${IUSE_VOICEMAIL_STORAGE[*]//+/} ) - voicemail_storage_odbc? ( odbc ) -" - -PATCHES=( - "${FILESDIR}/${PN}-historic-no-var-run-install.patch" - "${FILESDIR}/${PN}-13.38.1-r1-autoconf-lua-version.patch" - "${FILESDIR}/${PN}-13.38.2-r3-func_lock-fix-races.patch" - "${FILESDIR}/${PN}-13.18.1-r2-autoconf-2.70.patch" - "${FILESDIR}/${PN}-13.38.2-r1-menuselect-exitcodes.patch" - "${FILESDIR}/${PN}-13.38.2-r2-func_odbc_minargs-ARGC.patch" -) - -DEPEND="acct-user/asterisk - acct-group/asterisk - dev-db/sqlite:3 - dev-libs/popt - dev-libs/jansson:= - dev-libs/libedit - dev-libs/libxml2:2 - dev-libs/libxslt - virtual/libcrypt:= - sys-libs/zlib - alsa? ( media-libs/alsa-lib ) - bluetooth? ( net-wireless/bluez:= ) - calendar? ( - net-libs/neon:= - dev-libs/libical:= - dev-libs/iksemel - ) - caps? ( sys-libs/libcap ) - blocks? ( sys-libs/blocksruntime ) - cluster? ( sys-cluster/corosync ) - curl? ( net-misc/curl ) - dahdi? ( - net-libs/libpri - net-misc/dahdi-tools - ) - freetds? ( dev-db/freetds ) - gtalk? ( dev-libs/iksemel ) - http? ( dev-libs/gmime:2.6 ) - iconv? ( virtual/libiconv ) - ilbc? ( media-libs/libilbc ) - ldap? ( net-nds/openldap:= ) - lua? ( ${LUA_DEPS} ) - mysql? ( dev-db/mysql-connector-c:= ) - newt? ( dev-libs/newt ) - odbc? ( dev-db/unixODBC ) - pjproject? ( net-libs/pjproject:= ) - portaudio? ( media-libs/portaudio ) - postgres? ( dev-db/postgresql:* ) - radius? ( net-dialup/freeradius-client ) - snmp? ( net-analyzer/net-snmp:= ) - span? ( media-libs/spandsp ) - speex? ( - media-libs/speex - media-libs/speexdsp - ) - srtp? ( net-libs/libsrtp:0 ) - ssl? ( - dev-libs/openssl:0= - ) - systemd? ( sys-apps/systemd ) - !systemd? ( !sys-apps/systemd ) - vorbis? ( - media-libs/libogg - media-libs/libvorbis - ) - voicemail_storage_imap? ( virtual/imap-c-client ) - xmpp? ( dev-libs/iksemel ) -" - -RDEPEND="${DEPEND} - net-misc/asterisk-core-sounds - net-misc/asterisk-extra-sounds - net-misc/asterisk-moh-opsound - selinux? ( sec-policy/selinux-asterisk ) - syslog? ( virtual/logger )" - -BDEPEND="dev-libs/libxml2:2 - virtual/pkgconfig" - -QA_DT_NEEDED="/usr/lib.*/libasteriskssl[.]so[.][0-9]\+" - -_make_args=( - "NOISY_BUILD=yes" - "ASTDBDIR=\$(ASTDATADIR)/astdb" - "ASTVARRUNDIR=/run/asterisk" - "OPTIMIZE=" - "DEBUG=" - "DESTDIR=${D}" - "CONFIG_SRC=configs/samples" - "CONFIG_EXTEN=.sample" -) - -pkg_pretend() { - CONFIG_CHECK="~!NF_CONNTRACK_SIP" - local WARNING_NF_CONNTRACK_SIP="SIP (NAT) connection tracking is enabled. Some users - have reported that this module dropped critical SIP packets in their deployments. You - may want to disable it if you see such problems." - check_extra_config - - [[ "${MERGE_TYPE}" == binary ]] && return - - if tc-is-clang; then - use blocks || die "CC=clang requires USE=blocks" - else - use blocks && die "USE=blocks can only be used with CC=clang" - fi -} - -pkg_setup() { - use lua && lua-single_pkg_setup -} - -src_prepare() { - default - AT_M4DIR="autoconf third-party third-party/pjproject third-party/jansson" \ - AC_CONFIG_SUBDIRS=menuselect eautoreconf -} - -src_configure() { - local vmst - local copt cstate - - econf \ - LUA_VERSION="${ELUA#lua}" \ - --libdir="/usr/$(get_libdir)" \ - --localstatedir="/var" \ - --with-crypto \ - --with-gsm=internal \ - --with-popt \ - --with-z \ - --with-libedit \ - $(use_with caps cap) \ - $(use_with lua lua) \ - $(use_with http gmime) \ - $(use_with newt) \ - $(use_with pjproject) \ - $(use_with portaudio) \ - $(use_with ssl) - - _menuselect() { - menuselect/menuselect "$@" || die "menuselect $* failed." - } - - _use_select() { - local state=$(usex "$1" enable disable) - shift # remove use from parameters - - while [[ -n $1 ]]; do - _menuselect --${state} "$1" menuselect.makeopts - shift - done - } - - # Blank out sounds/sounds.xml file to prevent - # asterisk from installing sounds files (we pull them in via - # asterisk-{core,extra}-sounds and asterisk-moh-opsound. - >"${S}"/sounds/sounds.xml - - # That NATIVE_ARCH chatter really is quite bothersome - sed -i 's/NATIVE_ARCH=/NATIVE_ARCH=0/' build_tools/menuselect-deps || die "Unable to squelch noisy build system" - - # Compile menuselect binary for optional components - emake "${_make_args[@]}" menuselect.makeopts - - # Disable BUILD_NATIVE (bug #667498) - _menuselect --disable build_native menuselect.makeopts - - # Broken functionality is forcibly disabled (bug #360143) - _menuselect --disable chan_misdn menuselect.makeopts - _menuselect --disable chan_ooh323 menuselect.makeopts - - # Utility set is forcibly enabled (bug #358001) - _menuselect --enable smsq menuselect.makeopts - _menuselect --enable streamplayer menuselect.makeopts - _menuselect --enable aelparse menuselect.makeopts - _menuselect --enable astman menuselect.makeopts - - # this is connected, otherwise it would not find - # ast_pktccops_gate_alloc symbol - _menuselect --enable chan_mgcp menuselect.makeopts - _menuselect --enable res_pktccops menuselect.makeopts - - # SSL is forcibly enabled, IAX2 & DUNDI are expected to be available - _menuselect --enable pbx_dundi menuselect.makeopts - _menuselect --enable func_aes menuselect.makeopts - _menuselect --enable chan_iax2 menuselect.makeopts - - # SQlite3 is now the main database backend, enable related features - _menuselect --enable cdr_sqlite3_custom menuselect.makeopts - _menuselect --enable cel_sqlite3_custom menuselect.makeopts - - # The others are based on USE-flag settings - _use_select alsa chan_alsa - _use_select bluetooth chan_mobile - _use_select calendar res_calendar res_calendar_{caldav,ews,exchange,icalendar} - _use_select cluster res_corosync - _use_select curl func_curl res_config_curl res_curl - _use_select dahdi app_dahdiras app_meetme chan_dahdi codec_dahdi res_timing_dahdi - _use_select freetds {cdr,cel}_tds - _use_select gtalk chan_motif - _use_select http res_http_post - _use_select iconv func_iconv - _use_select ilbc codec_ilbc format_ilbc - _use_select ldap res_config_ldap - _use_select lua pbx_lua - _use_select mysql app_mysql cdr_mysql res_config_mysql - _use_select odbc cdr_adaptive_odbc res_config_odbc {cdr,cel,res,func}_odbc - _use_select oss chan_oss - _use_select postgres {cdr,cel}_pgsql res_config_pgsql - _use_select radius {cdr,cel}_radius - _use_select snmp res_snmp - _use_select span res_fax_spandsp - _use_select speex {codec,func}_speex - _use_select srtp res_srtp - _use_select statsd res_statsd res_{endpoint,chan}_stats - _use_select syslog cdr_syslog - _use_select vorbis format_ogg_vorbis - _use_select xmpp res_xmpp - - # Voicemail storage ... - for vmst in "${IUSE_VOICEMAIL_STORAGE[@]}"; do - if use "${vmst#+}"; then - _menuselect --enable "$(echo "${vmst##*_}" | tr '[:lower:]' '[:upper:]')_STORAGE" menuselect.makeopts - fi - done - - if use debug; then - for o in DONT_OPTIMIZE DEBUG_FD_LEAKS MALLOC_DEBUG BETTER_BACKTRACES; do - _menuselect --enable $o menuselect.makeopts - done - fi - - if [[ -n "${GENTOO_ASTERISK_CUSTOM_MENUSELECT:+yes}" ]]; then - for copt in ${GENTOO_ASTERISK_CUSTOM_MENUSELECT}; do - cstate=--enable - [[ "${copt}" == -* ]] && cstate=--disable - ebegin "Custom option ${copt#[-+]} ${cstate:2}d" - _menuselect ${cstate} "${copt#[-+]}" - eend $? - done - fi -} - -src_compile() { - emake "${_make_args[@]}" -} - -src_install() { - local d - - dodir "/usr/$(get_libdir)/pkgconfig" - diropts -m 0750 -o root -g asterisk - dodir /etc/asterisk - - emake "${_make_args[@]}" install install-configs - - fowners asterisk: /var/lib/asterisk/astdb - - if use radius; then - insinto /etc/radiusclient/ - doins contrib/dictionary.digium - fi - - # keep directories - diropts -m 0750 -o asterisk -g root - keepdir /var/spool/asterisk/{system,tmp,meetme,monitor,dictate,voicemail,recording} - diropts -m 0750 -o asterisk -g asterisk - keepdir /var/log/asterisk/{cdr-csv,cdr-custom} - - newinitd "${FILESDIR}"/initd-13.38.3-r2 asterisk - newconfd "${FILESDIR}"/confd-13.32.0 asterisk - - systemd_dounit "${FILESDIR}"/asterisk.service - newtmpfiles "${FILESDIR}"/asterisk.tmpfiles-13.38.3-r2.conf asterisk.conf - systemd_install_serviced "${FILESDIR}"/asterisk.service.conf - - # Reset diropts else dodoc uses it for doc installations. - diropts -m0755 - - # install the upgrade documentation - dodoc UPGRADE* BUGS CREDITS - - # install extra documentation - use doc && dodoc doc/*.{txt,pdf} - - # install logrotate snippet; bug #329281 - # - insinto /etc/logrotate.d - newins "${FILESDIR}/1.6.2/asterisk.logrotate4" asterisk - - # Asterisk installs a few folders that's empty by design, - # but still required. This finds them, and marks them for - # portage. - while read d < <(find "${ED}"/var -type d -empty || die "Find failed."); do - keepdir "${d#${ED}}" - done -} - -pkg_postinst() { - tmpfiles_process asterisk.conf - - if [ -z "${REPLACING_VERSIONS}" ]; then - elog "Asterisk Wiki: https://wiki.asterisk.org/wiki/" - elog "Gentoo VoIP IRC Channel: #gentoo-voip @ irc.libera.chat" - elif [ "$(ver_cut 1 "${REPLACING_VERSIONS}")" != "$(ver_cut 1)" ]; then - elog "You are updating from Asterisk $(ver_cut 1 "${REPLACING_VERSIONS}") upgrade document:" - elog "https://wiki.asterisk.org/wiki/display/AST/Upgrading+to+Asterisk+$(ver_cut 1)" - elog "Gentoo VoIP IRC Channel: #gentoo-voip @ irc.libera.chat" - fi - - if [[ -n "${GENTOO_ASTERISK_CUSTOM_MENUSELECT:+yes}" ]]; then - ewarn "You are using GENTOO_ASTERISK_CUSTOM_MENUSELECT, this should only be used" - ewarn "for debugging, for anything else, please file a bug on https://bugs.gentoo.org" - fi - - if [[ -f /var/lib/asterisk/astdb.sqlite3 ]]; then - ewarn "Default astdb location has changed from /var/lib/asterisk to /var/lib/asterisk/astdb" - ewarn "You still have a /var/lib/asterisk/astdb.sqlite file. You need to either set" - ewarn "astdbdir in /etc/asterisk/asterisk.conf to /var/lib/asterisk or follow these" - ewarn "steps to migrate:" - ewarn "1. /etc/init.d/asterisk stop" - ewarn "2. mv /var/lib/asterisk/astdb.sqlite /var/lib/asterisk/astdb/" - ewarn "3. /etc/init.d/asterisk start" - ewarn "This update was done partly for security reasons so that /var/lib/asterisk can be root owned." - fi -} 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 -} |