Backport from master.
Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
PRG_NAME:=freeswitch
PKG_NAME:=$(PRG_NAME)-stable
-PKG_VERSION:=1.8.4
+PKG_VERSION:=1.8.6
PKG_RELEASE:=1
PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
PKG_SOURCE:=$(PRG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://files.$(PRG_NAME).org/releases/$(PRG_NAME)
-PKG_HASH:=768f4a7f2d02e79f522cd4b7a26f6cef9e5663b5ac6478b9fe4725a7276ae3d3
+PKG_HASH:=b87f47e57d13de2b901bd1e4eb85491178e59a159a2831d7430abe7947f0d3a4
PKG_CPE_ID:=cpe:/a:freeswitch:freeswitch
NAME=freeswitch
COMMAND=/usr/bin/$NAME
-LOGGER="/usr/bin/logger -p user.err -s -t $NAME"
+LOGGER="/usr/bin/logger -p user.err -s -t $NAME --"
start_service() {
local dir
config_get dir_storage directories storage /tmp/$NAME/storage
config_get dir_temp directories temp /tmp/$NAME/temp
- for dir in "$dir_cache" "$dir_db" "$dir_localstate" \
- "$dir_log" "$dir_recordings" "$dir_run" "$dir_storage" \
- "$dir_temp"
- do
- [ ! -e "$dir" ] && {
- mkdir -p "$dir"
- chown "$user":"$group" "$dir"
- chmod 750 "$dir"
- }
- done
+ user_exists "$user" || {
+ $LOGGER user \""$user"\" does not exist
+ exit 1
+ }
+
+ group_exists "$group" || {
+ $LOGGER group \""$group"\" does not exist
+ exit 1
+ }
+
+ # do not touch directories that already exist
+ # posix shell does not support arrays, hence using awk
+ awk \
+ -v user="$user" \
+ -v group="$group" \
+ -v a="$dir_cache" \
+ -v b="$dir_db" \
+ -v c="$dir_localstate" \
+ -v d="$dir_log" \
+ -v e="$dir_recordings" \
+ -v f="$dir_run" \
+ -v g="$dir_storage" \
+ -v h="$dir_temp" \
+ '
+ BEGIN {
+ dir[0]=a
+ dir[1]=b
+ dir[2]=c
+ dir[3]=d
+ dir[4]=e
+ dir[5]=f
+ dir[6]=g
+ dir[7]=h
+ for (x in dir) {
+ if (system("test ! -e \"" dir[x] "\"" )) {
+ delete dir[x]
+ }
+ }
+ for (x in dir) {
+ system("mkdir -p \"" dir[x] "\"" )
+ system("chmod 750 \"" dir[x] "\"" )
+ system("chown \"" user "\":\"" group "\" \"" dir[x] "\"" )
+ }
+ }
+ '
config_get options general options
else
CC_FOR_BUILD='$(CC)'
fi
-@@ -662,7 +638,7 @@ AC_ARG_ENABLE(core-pgsql-pkgconfig,
+@@ -649,7 +625,7 @@ AC_ARG_ENABLE(core-pgsql-pkgconfig,
[AS_HELP_STRING([--disable-core-pgsql-pkgconfig], [Use pg_config to get PGQSL build options])],[enable_core_pgsql_pkgconfig="$enableval"],[enable_core_pgsql_pkgconfig="yes"])
if test x"$enable_core_pgsql_support" = x"yes" ; then
AC_PATH_PROG([PKG_CONFIG], [pkg-config], [no])
if test "$PKG_CONFIG" = "no" \
|| test x"$enable_core_pgsql_pkgconfig" = x"no" \
-@@ -1617,13 +1593,7 @@ AC_CHECK_PROG(PERL,perl,[ac_cv_have_perl
+@@ -1613,13 +1589,7 @@ AC_CHECK_PROG(PERL,perl,[ac_cv_have_perl
# -a "x$ac_cv_have_EXTERN_h" != "xno"
if test "x$ac_cv_have_perl" != "xno"; then
save_CFLAGS="$CFLAGS"
CFLAGS="$PERL_CFLAGS"
-@@ -1718,24 +1688,12 @@ then
+@@ -1714,24 +1684,12 @@ then
if test "$python_has_distutils" != "no" ; then
AC_MSG_CHECKING([location of site-packages])
--- a/configure.ac
+++ b/configure.ac
-@@ -2009,7 +2009,12 @@ AC_SUBST(OUR_DISABLED_INSTALL_MODS)
+@@ -2018,7 +2018,12 @@ AC_SUBST(OUR_DISABLED_INSTALL_MODS)
AC_SUBST(OUR_DISABLED_UNINSTALL_MODS)
AC_SUBST(AM_MAKEFLAGS)
--- a/configure.ac
+++ b/configure.ac
-@@ -584,7 +584,7 @@ AC_SUBST(SYS_XMLRPC_CFLAGS)
+@@ -571,7 +571,7 @@ AC_SUBST(SYS_XMLRPC_CFLAGS)
AC_SUBST(SYS_XMLRPC_LDFLAGS)
AM_CONDITIONAL([SYSTEM_XMLRPCC],[test "${enable_xmlrpcc}" = "yes"])
--- /dev/null
+commit e114c6382e68824d4498f62562714860d20804e2
+Author: Sebastian Kemper <sebastian_ml@gmx.net>
+Date: Sun Apr 14 19:11:58 2019 +0200
+
+ FS-11783: [core] quiet gcc truncation warning
+
+ With -Wstringop-truncation gcc warns about calls to bounded string
+ manipulation function "strncpy" that may either truncate the copied
+ string or leave the destination unchanged. To avoid the warning when the
+ result is not expected to be NUL-terminated, it is suggested to call
+ "memcpy" instead.
+
+ src/switch_core_media.c: In function 'switch_core_media_patch_sdp':
+ src/switch_core_media.c:11854:4: error: 'strncpy' output truncated before terminating nul copying 2 bytes from a string of the same length [-Werror=stringop-truncation]
+ strncpy(q, strchr(a_engine->adv_sdp_ip, ':') ? "6 " : "4 ", 2);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ This commit follows gcc's recommendation.
+
+ Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
+
+--- a/src/switch_core_media.c
++++ b/src/switch_core_media.c
+@@ -11918,7 +11918,7 @@ SWITCH_DECLARE(void) switch_core_media_p
+ strncpy(q, p, 7);
+ p += 7;
+ q += 7;
+- strncpy(q, strchr(a_engine->adv_sdp_ip, ':') ? "6 " : "4 ", 2);
++ memcpy(q, strchr(a_engine->adv_sdp_ip, ':') ? "6 " : "4 ", 2);
+ p +=2;
+ q +=2;
+ strncpy(q, a_engine->adv_sdp_ip, strlen(a_engine->adv_sdp_ip));
--- /dev/null
+commit 3ca75eb8efa4e50ebe083a269b75fcb1762daa91
+Author: Sebastian Kemper <sebastian_ml@gmx.net>
+Date: Sun Apr 14 19:23:41 2019 +0200
+
+ FS-11783: [mod_say_ja] quiet overflow warning
+
+ With -Wformat-overflow gcc warns about calls to formatted input/output
+ function "sprintf" that might overflow the destination buffer.
+
+ In this case gcc does not know the upper bound of tm_min and assumes
+ that up to 11 bytes might be written to buffer (3 bytes). But we know
+ that tm_min can only be within the range 0 to 59.
+
+ mod_say_ja.c: In function 'ja_say_time':
+ mod_say_ja.c:376:35: error: '%d' directive writing between 2 and 10 bytes into a region of size 3 [-Werror=format-overflow=]
+ sprintf(buffer, "%d", tm.tm_min);
+ ^~
+ mod_say_ja.c:376:34: note: directive argument in the range [11, 2147483647]
+ sprintf(buffer, "%d", tm.tm_min);
+ ^~~~
+ mod_say_ja.c:376:18: note: 'sprintf' output between 3 and 11 bytes into a destination of size 3
+ sprintf(buffer, "%d", tm.tm_min);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ This commits adds a hint for gcc, which silences the warning.
+
+ Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
+
+diff --git a/src/mod/say/mod_say_ja/mod_say_ja.c b/src/mod/say/mod_say_ja/mod_say_ja.c
+index 72c7c38131..d8e0692fd0 100644
+--- a/src/mod/say/mod_say_ja/mod_say_ja.c
++++ b/src/mod/say/mod_say_ja/mod_say_ja.c
+@@ -367,7 +367,8 @@ static switch_status_t ja_say_time(switch_core_session_t *session, char *tosay,
+ say_file("time/pm.wav");
+ }
+ say_file("time/hour-%d.wav", tm.tm_hour);
+- if (tm.tm_min > 10) {
++ /* tm_min is always < 60 - this is just to silence gcc 8 warning */
++ if (tm.tm_min > 10 && tm.tm_min < 60) {
+ int temp;
+ char tch[1+1];
+ mod_min = tm.tm_min % 10;
--- /dev/null
+--- a/src/mod/event_handlers/mod_kazoo/kazoo_ei_utils.c
++++ b/src/mod/event_handlers/mod_kazoo/kazoo_ei_utils.c
+@@ -519,7 +519,7 @@ switch_status_t create_acceptor() {
+ char ipbuf[48];
+ const char *ip_addr;
+
+-#if ERLANG_MAJOR >= 10
++#if (ERLANG_MAJOR == 10 && ERLANG_MINOR >= 3) || ERLANG_MAJOR >= 11
+ ei_init();
+ #endif
+