[Pkg-voip-commits] [kamailio] 02/03: add upstream fixes from 4.4 branch since 4.4.2

Victor Seva vseva at moszumanska.debian.org
Tue Jul 12 13:29:59 UTC 2016


This is an automated email from the git hooks/post-receive script.

vseva pushed a commit to branch master
in repository kamailio.

commit e1029574f79a59f85522ad16f246f120e036c6e3
Author: Victor Seva <vseva at debian.org>
Date:   Tue Jul 12 14:12:18 2016 +0200

    add upstream fixes from 4.4 branch since 4.4.2
---
 debian/patches/series                              |  20 ++
 .../patches/upstream/0001-dmq-Correct-README.patch |  28 ++
 ...0002-modules-readme-files-regenerated-dmq.patch |  25 ++
 ...in-docs-that-masking-callid-is-not-implem.patch |  30 ++
 ...-detect-DB-disconnection-with-generic-HY0.patch |  28 ++
 .../upstream/0005-core-fix-Sun-Studio-build.patch  | 214 ++++++++++++++
 ...ers-fix-return-statement-in-void-function.patch |  36 +++
 ...move-return-statement-from-void-functions.patch |  35 +++
 ...emove-return-statement-from-void-function.patch |  26 ++
 .../0009-uid_avp_db-remove-GCC-specific-Wall.patch |  25 ++
 ...ure-cfg_block-structure-is-8-byte-aligned.patch |  28 ++
 ...11-modules-readme-files-regenerated-topos.patch |  26 ++
 ...st-fix-typo-on-evaluating-the-table-param.patch |  30 ++
 ...st-more-debug-info-when-failing-to-do-the.patch | 319 +++++++++++++++++++++
 ...st-fixed-copy-paste-typo-when-evaluating-.patch |  30 ++
 ...ix-spelling-errors-catched-by-lintian-688.patch |  26 ++
 ...ed-the-check-route-params-to-detect-prope.patch | 209 ++++++++++++++
 ...log-open-db-connection-from-rpc-processes.patch |  29 ++
 ...anch-uri-against-current-uri-when-decidin.patch |  29 ++
 ...nit-rtp-engine-sockets-array-after-alloca.patch |  59 ++++
 ...it-rtpproxy-sockets-array-after-allocatio.patch |  39 +++
 21 files changed, 1291 insertions(+)

diff --git a/debian/patches/series b/debian/patches/series
index 9de40e1..35aa3b0 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,23 @@
+upstream/0001-dmq-Correct-README.patch
+upstream/0002-modules-readme-files-regenerated-dmq.patch
+upstream/0003-topos-note-in-docs-that-masking-callid-is-not-implem.patch
+upstream/0004-db_unixodbc-detect-DB-disconnection-with-generic-HY0.patch
+upstream/0005-core-fix-Sun-Studio-build.patch
+upstream/0006-counters-fix-return-statement-in-void-function.patch
+upstream/0007-dialog-remove-return-statement-from-void-functions.patch
+upstream/0008-ctl-remove-return-statement-from-void-function.patch
+upstream/0009-uid_avp_db-remove-GCC-specific-Wall.patch
+upstream/0010-core-ensure-cfg_block-structure-is-8-byte-aligned.patch
+upstream/0011-modules-readme-files-regenerated-topos.patch
+upstream/0012-userblacklist-fix-typo-on-evaluating-the-table-param.patch
+upstream/0013-userblacklist-more-debug-info-when-failing-to-do-the.patch
+upstream/0014-userblacklist-fixed-copy-paste-typo-when-evaluating-.patch
+upstream/0015-rr-fix-spelling-errors-catched-by-lintian-688.patch
+upstream/0016-rr-refactored-the-check-route-params-to-detect-prope.patch
+upstream/0017-dialog-open-db-connection-from-rpc-processes.patch
+upstream/0018-tm-check-branch-uri-against-current-uri-when-decidin.patch
+upstream/0019-rtpengine-init-rtp-engine-sockets-array-after-alloca.patch
+upstream/0020-rtpproxy-init-rtpproxy-sockets-array-after-allocatio.patch
 no_lib64_on_64_bits.patch
 no_INSTALL_file.patch
 fix_export.patch
diff --git a/debian/patches/upstream/0001-dmq-Correct-README.patch b/debian/patches/upstream/0001-dmq-Correct-README.patch
new file mode 100644
index 0000000..133ae35
--- /dev/null
+++ b/debian/patches/upstream/0001-dmq-Correct-README.patch
@@ -0,0 +1,28 @@
+From 78a990946a1acd49e349ce46595f8641d6130781 Mon Sep 17 00:00:00 2001
+From: "Olle E. Johansson" <oej at edvina.net>
+Date: Wed, 29 Jun 2016 11:37:40 +0200
+Subject: [PATCH] dmq Correct README
+
+Reported by Jan Hazenberg on mailing list
+
+(cherry picked from commit 0fbc629089328c35ac8041c5d453230de5334505)
+---
+ modules/dmq/doc/dmq_admin.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/dmq/doc/dmq_admin.xml b/modules/dmq/doc/dmq_admin.xml
+index 14b4a8e..5f9e60f 100644
+--- a/modules/dmq/doc/dmq_admin.xml
++++ b/modules/dmq/doc/dmq_admin.xml
+@@ -166,7 +166,7 @@ modparam("dmq", "multi_notify", 1)
+                 <title>Set <varname>num_workers</varname> parameter</title>
+                 <programlisting format="linespecific">
+ ...
+-modparam("dmq", "num_threads", 4)
++modparam("dmq", "num_workers", 4)
+ ...
+ </programlisting>
+                 </example>
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0002-modules-readme-files-regenerated-dmq.patch b/debian/patches/upstream/0002-modules-readme-files-regenerated-dmq.patch
new file mode 100644
index 0000000..c367a0d
--- /dev/null
+++ b/debian/patches/upstream/0002-modules-readme-files-regenerated-dmq.patch
@@ -0,0 +1,25 @@
+From 87d37554e111760ad4362f0be1698ef1978ab944 Mon Sep 17 00:00:00 2001
+From: Kamailio Dev <kamailio.dev at kamailio.org>
+Date: Wed, 29 Jun 2016 11:46:17 +0200
+Subject: [PATCH] modules: readme files regenerated - dmq ...
+
+---
+ modules/dmq/README | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/dmq/README b/modules/dmq/README
+index e9290c7..754be4f 100644
+--- a/modules/dmq/README
++++ b/modules/dmq/README
+@@ -219,7 +219,7 @@ modparam("dmq", "multi_notify", 1)
+ 
+    Example 1.5. Set num_workers parameter
+ ...
+-modparam("dmq", "num_threads", 4)
++modparam("dmq", "num_workers", 4)
+ ...
+ 
+ 3.5. ping_interval(int)
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0003-topos-note-in-docs-that-masking-callid-is-not-implem.patch b/debian/patches/upstream/0003-topos-note-in-docs-that-masking-callid-is-not-implem.patch
new file mode 100644
index 0000000..2d54272
--- /dev/null
+++ b/debian/patches/upstream/0003-topos-note-in-docs-that-masking-callid-is-not-implem.patch
@@ -0,0 +1,30 @@
+From 915edc834c9a694026b09d8b77dcfc4165d2998f Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Thu, 30 Jun 2016 14:39:28 +0200
+Subject: [PATCH] topos: note in docs that masking callid is not implemented
+ yet
+
+(cherry picked from commit 3c358de7683a15573dc1ee608e539ebb2e0122bf)
+---
+ modules/topos/doc/topos_admin.xml | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/modules/topos/doc/topos_admin.xml b/modules/topos/doc/topos_admin.xml
+index cf06022..ad74d22 100644
+--- a/modules/topos/doc/topos_admin.xml
++++ b/modules/topos/doc/topos_admin.xml
+@@ -90,6 +90,11 @@ modparam("topos", "db_url", "&exampledb;")
+ 	<section id="topos.p.mask_callid">
+ 		<title><varname>mask_callid</varname> (int)</title>
+ 		<para>
++			Note: this functionality is not implemented yet - the
++			parameter is present in order to be in pair with topoh
++			module.
++		</para>
++		<para>
+ 			Whether to replace or not the Call-ID with another
+ 			unique id generated by &kamailio;.
+ 		</para>
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0004-db_unixodbc-detect-DB-disconnection-with-generic-HY0.patch b/debian/patches/upstream/0004-db_unixodbc-detect-DB-disconnection-with-generic-HY0.patch
new file mode 100644
index 0000000..edb87d7
--- /dev/null
+++ b/debian/patches/upstream/0004-db_unixodbc-detect-DB-disconnection-with-generic-HY0.patch
@@ -0,0 +1,28 @@
+From e2874495b1ecad9e85b47f6d8bdb847fceb0c3ad Mon Sep 17 00:00:00 2001
+From: Giovanni Mele <giovanni.mele at nagra.com>
+Date: Fri, 1 Jul 2016 14:51:12 +0200
+Subject: [PATCH] db_unixodbc: detect DB disconnection with generic HY000
+ status
+
+(cherry picked from commit d80376f9ea087328a0c46d97b908993baeb5b1b4)
+---
+ modules/db_unixodbc/dbase.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/modules/db_unixodbc/dbase.c b/modules/db_unixodbc/dbase.c
+index d5c7d27..304b4d4 100644
+--- a/modules/db_unixodbc/dbase.c
++++ b/modules/db_unixodbc/dbase.c
+@@ -138,7 +138,8 @@ static int db_unixodbc_submit_query(const db1_con_t* _h, const str* _s)
+ 
+ 		/* Connection broken */
+ 		if( !strncmp((char*)sqlstate,"08003",5) ||
+-		    !strncmp((char*)sqlstate,"08S01",5)
++		    !strncmp((char*)sqlstate,"08S01",5) ||
++		    !strncmp((char*)sqlstate,"HY000",5)   /* ODBC 3 General error */
+ 		    )
+ 		{
+ 			ret = reconnect(_h);
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0005-core-fix-Sun-Studio-build.patch b/debian/patches/upstream/0005-core-fix-Sun-Studio-build.patch
new file mode 100644
index 0000000..f812ae0
--- /dev/null
+++ b/debian/patches/upstream/0005-core-fix-Sun-Studio-build.patch
@@ -0,0 +1,214 @@
+From bed895fcdd3cc7bc3ea131873405df0c90f8eb18 Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Thu, 30 Jun 2016 12:44:11 -0700
+Subject: [PATCH] core: fix Sun Studio build
+
+- update Makefile.defs for recent versions of Solaris Studio
+
+(cherry picked from commit 2a3915d456289cfc1685b081ab351fc00c1e3dfb)
+---
+ Makefile.defs           | 27 ++++++++++++++++-----------
+ action.c                |  4 ++--
+ atomic/atomic_sparc64.h |  3 +++
+ io_wait.h               |  4 ++++
+ ip_addr.h               |  1 -
+ sr_module.h             |  8 ++++----
+ tls_hooks.h             |  2 +-
+ 7 files changed, 30 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile.defs b/Makefile.defs
+index 11fc3b1..6997e5e 100644
+--- a/Makefile.defs
++++ b/Makefile.defs
+@@ -254,6 +254,7 @@ ifneq (, $(findstring Sun, $(CC_LONGVER)))
+ 					sed -e 's/.*\([0-9]\.[0-9]\).*/\1/g' )
+ 	CC_VER=$(CC) $(CC_SHORTVER)
+ 	MKDEP=$(CC) -xM1
++	CC_MKDEP_OPTS=-xMMD
+ endif
+ 
+ ifneq (, $(findstring Intel(R) C++ Compiler, $(CC_LONGVER)))
+@@ -1093,9 +1094,12 @@ endif			#CC_SHORTVER, 6.0+, 5.0+, 4.5+ or 4.2+
+ 
+ else		#CC_NAME, gcc
+ ifeq		($(CC_NAME), suncc)
++			C_DEFS+=-DCC_GCC_LIKE_ASM
+ 			C_DEFS+=-DSPARC64_MODE
+-			CFLAGS+= -m64 -g -xO5 -fast -native -xarch=v9 -xCC \
++			CFLAGS+= -m64 -g -xO3 -xtarget=native -xmemalign=8i \
++					-fma=fused -fns=yes \
+ 					-xc99 # C99 support
++			LDFLAGS+=-m64
+ 			# -Dinline="" # add this if cc < 5.3 (define inline as null)
+ else
+ 				#other compilers
+@@ -1159,7 +1163,9 @@ endif			#CC_SHORTVER, 6.0+, 5.0+, 4.5+ or 4.2+
+ 
+ else		#CC_NAME, gcc
+ ifeq		($(CC_NAME), suncc)
+-			CFLAGS+= -g -xO5 -fast -native -xCC \
++			C_DEFS+=-DCC_GCC_LIKE_ASM
++			CFLAGS+= -g -xO3 -xtarget=native -xmemalign=4i \
++					-fma=fused -fns=yes \
+ 					-xc99 # C99 support
+ 			# -Dinline="" # add this if cc < 5.3 (define inline as null)
+ else
+@@ -1589,11 +1595,11 @@ ifeq	($(CC_NAME), icc)
+ endif
+ ifeq	($(CC_NAME), suncc)
+ 	# -dy?
+-	LDFLAGS+=-xO5 $(PROFILE)
++	LDFLAGS+=-xO3 $(PROFILE)
+ 	MOD_LDFLAGS:=-G $(LDFLAGS)
+ 	LIB_LDFLAGS:=-G $(LDFLAGS)
+-	LIB_SONAME="-h "
+-	LD_RPATH=-"-R "
++	LIB_SONAME=-Wl,-h,
++	LD_RPATH=-Wl,-R,
+ endif
+ 	# we need -fPIC -DPIC only for shared objects, we don't need them for
+ 	# the executable file, because it's always loaded at a fixed address
+@@ -1650,8 +1656,8 @@ ifeq	($(CC_NAME), suncc)
+ 		LDFLAGS+=-g $(PROFILE)
+ 		MOD_LDFLAGS:=-G $(LDFLAGS)
+ 		LIB_LDFLAGS:=-G $(LDFLAGS)
+-		LIB_SONAME="-h "
+-		LD_RPATH=-"-R "
++		LIB_SONAME=-Wl,-h,
++		LD_RPATH=-Wl,-R,
+ endif
+ 
+ endif #mode=release
+@@ -1680,9 +1686,8 @@ MOD_CFLAGS=-Kpic $(CFLAGS)
+ LIB_CFLAGS=-Kpic $(CFLAGS)
+ endif
+ ifeq	($(CC_NAME), suncc)
+-# FIMXE: use -KPIC instead -xcode ?
+-MOD_CFLAGS=-xcode=pic32  $(CFLAGS)
+-LIB_CFLAGS=-xcode=pic32  $(CFLAGS)
++MOD_CFLAGS=-xcode=pic32 $(CFLAGS)
++LIB_CFLAGS=-xcode=pic32 $(CFLAGS)
+ endif
+ ifeq    ($(CC_NAME), clang)
+ MOD_CFLAGS=-fPIC -DPIC $(CFLAGS)
+@@ -1823,7 +1828,7 @@ ifeq  ($(OS), solaris)
+ 	YACC=yacc
+ 
+ ifeq ($(CC_NAME), suncc)
+-	LIBS= -lfast -ldl -lresolv
++	LIBS= -ldl -lresolv
+ endif
+ 	OLD_SOLARIS= $(shell echo "$(OSREL)" | \
+ 				sed -e 's/^5\.[0-6][^0-9]*$$/yes/' )
+diff --git a/action.c b/action.c
+index bef3ec6..6386aac 100644
+--- a/action.c
++++ b/action.c
+@@ -229,7 +229,7 @@ char *get_cfg_crt_name(void)
+ #define MODF_CALL(f_type, h, msg, src, ...) \
+ 	do { \
+ 		cmd=(src)[0].u.data; \
+-		ret=((f_type)cmd->function)((msg), __VAR_ARGS__); \
++		ret=((f_type)cmd->function)((msg), __VA_ARGS__); \
+ 		MODF_HANDLE_RETCODE(h, ret); \
+ 	} while (0)
+ #else  /* ! __SUNPRO_C  (gcc, icc a.s.o) */
+@@ -263,7 +263,7 @@ char *get_cfg_crt_name(void)
+ 	do { \
+ 		cmd=(src)[0].u.data; \
+ 		MODF_RVE_PARAM_CONVERT(h, msg, cmd, src, dst); \
+-		ret=((f_type)cmd->function)((msg), __VAR_ARGS__); \
++		ret=((f_type)cmd->function)((msg), __VA_ARGS__); \
+ 		MODF_HANDLE_RETCODE(h, ret); \
+ 		/* free strings allocated by us or fixups */ \
+ 		MODF_RVE_PARAM_FREE(cmd, src, dst); \
+diff --git a/atomic/atomic_sparc64.h b/atomic/atomic_sparc64.h
+index 01ce64b..19a4897 100644
+--- a/atomic/atomic_sparc64.h
++++ b/atomic/atomic_sparc64.h
+@@ -46,6 +46,9 @@
+ #define HAVE_ASM_INLINE_MEMBAR
+ 
+ 
++#ifdef __SUNPRO_C
++#pragma error_messages (off,E_ASM_UNUSED_PARAM)
++#endif
+ 
+ /* try to guess if in SPARC64_MODE */
+ #if ! defined SPARC64_MODE && \
+diff --git a/io_wait.h b/io_wait.h
+index 0485e39..3325094 100644
+--- a/io_wait.h
++++ b/io_wait.h
+@@ -106,6 +106,10 @@ typedef int fd_type;
+ #define FD_TYPE_DEFINED
+ #endif
+ 
++#ifdef __SUNPRO_C
++#pragma weak handle_io
++#endif
++
+ /* maps a fd to some other structure; used in almost all cases
+  * except epoll and maybe kqueue or /dev/poll */
+ struct fd_map{
+diff --git a/ip_addr.h b/ip_addr.h
+index c2b724c..f0a5317 100644
+--- a/ip_addr.h
++++ b/ip_addr.h
+@@ -658,7 +658,6 @@ static inline int ip_addr2sbuf(struct ip_addr* ip, char* buff, int len)
+ 			LM_CRIT("unknown address family %d\n", ip->af);
+ 			return 0;
+ 	}
+-	return 0;
+ }
+ 
+ 
+diff --git a/sr_module.h b/sr_module.h
+index 6eb42fb..e42ccdf 100644
+--- a/sr_module.h
++++ b/sr_module.h
+@@ -208,7 +208,7 @@ struct ser_cmd_export_ {
+ 	int param_no;           /**< number of parameters used by the function */
+ 	fixup_function fixup;   /**< pointer to the function called to "fix" the
+ 							   parameters */
+-	int flags;              /**< Function flags */
++	unsigned int flags;     /**< Function flags */
+ };
+ 
+ 
+@@ -221,7 +221,7 @@ struct kam_cmd_export_ {
+ 							   parameters */
+ 	free_fixup_function free_fixup; /**< function called to free the "fixed"
+ 									   parameters */
+-	int flags;              /**< Function flags */
++	unsigned int flags;     /**< Function flags */
+ };
+ 
+ /** sip-router version */
+@@ -233,8 +233,8 @@ struct sr31_cmd_export_ {
+ 							   parameters */
+ 	free_fixup_function free_fixup; /**< function called to free the "fixed"
+ 									   parameters */
+-	int flags;              /**< Function flags */
+-	int fixup_flags;
++	unsigned int flags;     /**< Function flags */
++	unsigned int fixup_flags;
+ 	void* module_exports; /**< pointer to module structure */
+ };
+ 
+diff --git a/tls_hooks.h b/tls_hooks.h
+index 3ac5bd2..a789a49 100644
+--- a/tls_hooks.h
++++ b/tls_hooks.h
+@@ -84,7 +84,7 @@ extern struct tls_hooks tls_hook;
+ #ifdef __SUNPRO_C
+ 	#define tls_hook_call(name, ret_not_set, ...) \
+ 		((tls_hook.name)?(tls_hook.name(__VA_ARGS__)): (ret_not_set))
+-	#define tls_hook_call_v(name, __VA_ARGS__) \
++	#define tls_hook_call_v(name, ...) \
+ 		do{ \
+ 			if (tls_hook.name) tls_hook.name(__VA_ARGS__); \
+ 		}while(0)
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0006-counters-fix-return-statement-in-void-function.patch b/debian/patches/upstream/0006-counters-fix-return-statement-in-void-function.patch
new file mode 100644
index 0000000..a9004fc
--- /dev/null
+++ b/debian/patches/upstream/0006-counters-fix-return-statement-in-void-function.patch
@@ -0,0 +1,36 @@
+From 33073d2af70ed0f289de6cfa2d754763e037ce1b Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Thu, 30 Jun 2016 13:18:00 -0700
+Subject: [PATCH] counters: fix return statement in void function
+
+(cherry picked from commit 37355281dffccc42b1d83f413e3d528bdcf6cdd0)
+---
+ modules/counters/counters.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules/counters/counters.c b/modules/counters/counters.c
+index 7d7f85e..d90ead1 100644
+--- a/modules/counters/counters.c
++++ b/modules/counters/counters.c
+@@ -288,7 +288,8 @@ static void cnt_get_rpc(rpc_t* rpc, void* c)
+ 	if (rpc->scan(c, "s", &group) < 1)
+ 		return;
+ 	if (rpc->scan(c, "*s", &name) < 1)
+-		return cnt_grp_get_all(rpc, c, group);
++		cnt_grp_get_all(rpc, c, group);
++		return;
+ 	/* group & name read */
+ 	if (counter_lookup(&h, group, name) < 0) {
+ 		rpc->fault(c, 400, "non-existent counter %s.%s\n", group, name);
+@@ -427,7 +428,7 @@ static void cnt_grp_get_all_rpc(rpc_t* rpc, void* c)
+ 		/* rpc->fault(c, 400, "group name required"); */
+ 		return;
+ 	}
+-	return cnt_grp_get_all(rpc, c, group);
++	cnt_grp_get_all(rpc, c, group);
+ }
+ 
+ 
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0007-dialog-remove-return-statement-from-void-functions.patch b/debian/patches/upstream/0007-dialog-remove-return-statement-from-void-functions.patch
new file mode 100644
index 0000000..4b3659b
--- /dev/null
+++ b/debian/patches/upstream/0007-dialog-remove-return-statement-from-void-functions.patch
@@ -0,0 +1,35 @@
+From aea83a031cfb9a774d855462f50e4311cf9f7b43 Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Thu, 30 Jun 2016 13:21:17 -0700
+Subject: [PATCH] dialog: remove return statement from void functions
+
+(cherry picked from commit d90f3b86299223cd37fc21bf6af718540c76b380)
+---
+ modules/dialog/dlg_handlers.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/dialog/dlg_handlers.c b/modules/dialog/dlg_handlers.c
+index 36a807f..6b12d0a 100644
+--- a/modules/dialog/dlg_handlers.c
++++ b/modules/dialog/dlg_handlers.c
+@@ -603,7 +603,7 @@ static void dlg_seq_onreply_helper(struct cell* t, int type,
+  */
+ static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *param)
+ {
+-	return dlg_seq_onreply_helper(t, type, param, DLG_DIR_UPSTREAM);
++	dlg_seq_onreply_helper(t, type, param, DLG_DIR_UPSTREAM);
+ }
+ 
+ 
+@@ -616,7 +616,7 @@ static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *par
+  */
+ static void dlg_seq_down_onreply(struct cell* t, int type, struct tmcb_params *param)
+ {
+-	return dlg_seq_onreply_helper(t, type, param, DLG_DIR_DOWNSTREAM);
++	dlg_seq_onreply_helper(t, type, param, DLG_DIR_DOWNSTREAM);
+ }
+ 
+ 
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0008-ctl-remove-return-statement-from-void-function.patch b/debian/patches/upstream/0008-ctl-remove-return-statement-from-void-function.patch
new file mode 100644
index 0000000..1ca5d1c
--- /dev/null
+++ b/debian/patches/upstream/0008-ctl-remove-return-statement-from-void-function.patch
@@ -0,0 +1,26 @@
+From c5d8095c7fa548a7199a03bf1f5d69d56202568a Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Thu, 30 Jun 2016 13:22:57 -0700
+Subject: [PATCH] ctl: remove return statement from void function
+
+(cherry picked from commit 16e6bdf814576e26a5f5f46bdfcb98ab1fd4e04d)
+---
+ modules/ctl/binrpc_run.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/ctl/binrpc_run.c b/modules/ctl/binrpc_run.c
+index 3b9153e..5bdd869 100644
+--- a/modules/ctl/binrpc_run.c
++++ b/modules/ctl/binrpc_run.c
+@@ -486,7 +486,7 @@ static void rpc_fault(struct binrpc_ctx* ctx, int code, char* fmt, ...)
+ 	va_end(ap);
+ 
+ 	len++; /* vnsprintf doesn't include the terminating 0 */
+-	return _rpc_fault(ctx, code, buf, len);
++	_rpc_fault(ctx, code, buf, len);
+ }
+ 
+ /* Prepare the error reply without sending out the message */
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0009-uid_avp_db-remove-GCC-specific-Wall.patch b/debian/patches/upstream/0009-uid_avp_db-remove-GCC-specific-Wall.patch
new file mode 100644
index 0000000..800b9d9
--- /dev/null
+++ b/debian/patches/upstream/0009-uid_avp_db-remove-GCC-specific-Wall.patch
@@ -0,0 +1,25 @@
+From 301017af120d0e7c75821c00dad07892b6a366c2 Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Thu, 30 Jun 2016 13:35:36 -0700
+Subject: [PATCH] uid_avp_db: remove GCC specific -Wall
+
+(cherry picked from commit 4fc8d37df84d856b848fd4e894c21e0fbf02bb56)
+---
+ modules/uid_avp_db/Makefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/modules/uid_avp_db/Makefile b/modules/uid_avp_db/Makefile
+index 0b9a74c..2b08ae2 100644
+--- a/modules/uid_avp_db/Makefile
++++ b/modules/uid_avp_db/Makefile
+@@ -8,7 +8,6 @@ include ../../Makefile.defs
+ auto_gen=
+ NAME=uid_avp_db.so
+ LIBS=
+-DEFS += -Wall
+ 
+ DEFS+=-DSER_MOD_INTERFACE
+ 
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0010-core-ensure-cfg_block-structure-is-8-byte-aligned.patch b/debian/patches/upstream/0010-core-ensure-cfg_block-structure-is-8-byte-aligned.patch
new file mode 100644
index 0000000..2faa7a0
--- /dev/null
+++ b/debian/patches/upstream/0010-core-ensure-cfg_block-structure-is-8-byte-aligned.patch
@@ -0,0 +1,28 @@
+From 795556061412439618c640ef19e8579486f0c58a Mon Sep 17 00:00:00 2001
+From: Spencer Thomason <spencer at whiteskycommunications.com>
+Date: Fri, 1 Jul 2016 09:14:12 -0700
+Subject: [PATCH] core: ensure cfg_block structure is 8 byte aligned
+
+- prevents bus error on stricter cpu architectures like sparc
+- reported by GH #655
+
+(cherry picked from commit 0fd0715d015a2396b0ec66cb0bc83ec0b61c0d08)
+---
+ cfg/cfg_struct.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cfg/cfg_struct.h b/cfg/cfg_struct.h
+index 452bb90..6436eed 100644
+--- a/cfg/cfg_struct.h
++++ b/cfg/cfg_struct.h
+@@ -129,6 +129,7 @@ typedef struct _cfg_block {
+ 	atomic_t	refcnt;		/*!< reference counter,
+ 					the block is automatically deleted
+ 					when it reaches 0 */
++	int		_pad;		/*!< force 8 byte alignment */
+ 	unsigned char	vars[1];	/*!< blob that contains the values */
+ } cfg_block_t;
+ 
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0011-modules-readme-files-regenerated-topos.patch b/debian/patches/upstream/0011-modules-readme-files-regenerated-topos.patch
new file mode 100644
index 0000000..62b36ac
--- /dev/null
+++ b/debian/patches/upstream/0011-modules-readme-files-regenerated-topos.patch
@@ -0,0 +1,26 @@
+From 379e6df158837c2510592c75d4a71c19c32f4d13 Mon Sep 17 00:00:00 2001
+From: Kamailio Dev <kamailio.dev at kamailio.org>
+Date: Tue, 5 Jul 2016 12:01:18 +0200
+Subject: [PATCH] modules: readme files regenerated - topos ...
+
+---
+ modules/topos/README | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules/topos/README b/modules/topos/README
+index acbe077..3fc421c 100644
+--- a/modules/topos/README
++++ b/modules/topos/README
+@@ -112,6 +112,9 @@ modparam("topos", "db_url", "dbdriver://username:password@dbhost/dbname")
+ 
+ 3.2. mask_callid (int)
+ 
++   Note: this functionality is not implemented yet - the parameter is
++   present in order to be in pair with topoh module.
++
+    Whether to replace or not the Call-ID with another unique id generated
+    by Kamailio.
+ 
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0012-userblacklist-fix-typo-on-evaluating-the-table-param.patch b/debian/patches/upstream/0012-userblacklist-fix-typo-on-evaluating-the-table-param.patch
new file mode 100644
index 0000000..8bd0e8d
--- /dev/null
+++ b/debian/patches/upstream/0012-userblacklist-fix-typo-on-evaluating-the-table-param.patch
@@ -0,0 +1,30 @@
+From 89c556b5839959d8ef6dce3f0ba7ab6a27c53f3e Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Tue, 5 Jul 2016 15:33:00 +0200
+Subject: [PATCH] userblacklist: fix typo on evaluating the table parameter
+
+- regression introduced in previous commit, when converting to use core
+  fixup helpers
+- reported by Tim Balmer
+
+(cherry picked from commit 3ad232e1d1ff8533fca425d3c4ee3ccaa1456916)
+---
+ modules/userblacklist/userblacklist.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/userblacklist/userblacklist.c b/modules/userblacklist/userblacklist.c
+index 20416ed..44ed6f0 100644
+--- a/modules/userblacklist/userblacklist.c
++++ b/modules/userblacklist/userblacklist.c
+@@ -236,7 +236,7 @@ static int check_user_list(sip_msg_t *msg, char* str1, char* str2,
+ 	}
+ 	/* table name */
+ 	if(str4 != NULL) {
+-		if(fixup_get_svalue(msg, (gparam_t*)str3, &table)!=0) {
++		if(fixup_get_svalue(msg, (gparam_t*)str4, &table)!=0) {
+ 			LM_ERR("cannot print number pseudo-variable\n");
+ 			return -1;
+ 		}
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0013-userblacklist-more-debug-info-when-failing-to-do-the.patch b/debian/patches/upstream/0013-userblacklist-more-debug-info-when-failing-to-do-the.patch
new file mode 100644
index 0000000..e62db23
--- /dev/null
+++ b/debian/patches/upstream/0013-userblacklist-more-debug-info-when-failing-to-do-the.patch
@@ -0,0 +1,319 @@
+From 67fbc93eadbd07c0433d27c293336b845d30c1e9 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Tue, 5 Jul 2016 20:04:42 +0200
+Subject: [PATCH] userblacklist: more debug info when failing to do the query
+
+- renamed some parameters in order to be suggestive for their purpose
+- code reformatting for long line
+
+(cherry picked from commit dce52ed68cf67375a7a9afbe34c8cc479b40c2c5)
+---
+ modules/userblacklist/db.c            | 55 ++++++++++++-------
+ modules/userblacklist/userblacklist.c | 99 ++++++++++++++++++++---------------
+ 2 files changed, 93 insertions(+), 61 deletions(-)
+
+diff --git a/modules/userblacklist/db.c b/modules/userblacklist/db.c
+index bebb574..a679ae8 100644
+--- a/modules/userblacklist/db.c
++++ b/modules/userblacklist/db.c
+@@ -13,8 +13,8 @@
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  * GNU General Public License for more details.
+  *
+- * You should have received a copy of the GNU General Public License 
+- * along with this program; if not, write to the Free Software 
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+  */
+ 
+@@ -42,7 +42,8 @@
+ 
+ extern int match_mode;
+ 
+-int db_build_userbl_tree(const str *username, const str *domain, const str *table, struct dtrie_node_t *root, int use_domain)
++int db_build_userbl_tree(const str *username, const str *domain,
++		const str *dbtable, struct dtrie_node_t *root, int use_domain)
+ {
+ 	db_key_t columns[2] = { &userblacklist_prefix_col, &userblacklist_whitelist_col };
+ 	db_key_t key[2] = { &userblacklist_username_col, &userblacklist_domain_col };
+@@ -59,13 +60,14 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl
+ 	VAL_STR(val + 1).s = domain->s;
+ 	VAL_STR(val + 1).len = domain->len;
+ 
+-	
+-	if (userblacklist_dbf.use_table(userblacklist_dbh, table) < 0) {
+-		LM_ERR("cannot use table '%.*s'.\n", table->len, table->s);
++	if (userblacklist_dbf.use_table(userblacklist_dbh, dbtable) < 0) {
++		LM_ERR("cannot use db table '%.*s'.\n", dbtable->len, dbtable->s);
+ 		return -1;
+ 	}
+-	if (userblacklist_dbf.query(userblacklist_dbh, key, 0, val, columns, (!use_domain) ? (1) : (2), 2, 0, &res) < 0) {
+-		LM_ERR("error while executing query.\n");
++	if (userblacklist_dbf.query(userblacklist_dbh, key, 0, val, columns,
++				(!use_domain) ? (1) : (2), 2, 0, &res) < 0) {
++		LM_ERR("error while executing query on db table '%.*s'\n",
++				dbtable->len, dbtable->s);
+ 		return -1;
+ 	}
+ 
+@@ -85,8 +87,12 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl
+ 					} else {
+ 						nodeflags=(void *)MARK_WHITELIST;
+ 					}
+-					if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, strlen(RES_ROWS(res)[i].values[0].val.string_val),
+-						nodeflags, match_mode) < 0) LM_ERR("could not insert values into trie.\n");
++
++					if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val,
++								strlen(RES_ROWS(res)[i].values[0].val.string_val),
++								nodeflags, match_mode) < 0)
++						LM_ERR("could not insert values into trie.\n");
++
+ 					n++;
+ 				}
+ 				else {
+@@ -105,20 +111,22 @@ int db_build_userbl_tree(const str *username, const str *domain, const str *tabl
+  * Rebuild d-tree using database entries
+  * \return negative on failure, positive on success, indicating the number of d-tree entries
+  */
+-int db_reload_source(const str *table, struct dtrie_node_t *root)
++int db_reload_source(const str *dbtable, struct dtrie_node_t *root)
+ {
+ 	db_key_t columns[2] = { &globalblacklist_prefix_col, &globalblacklist_whitelist_col };
+ 	db1_res_t *res;
+ 	int i;
+ 	int n = 0;
+ 	void *nodeflags;
+-	
+-	if (userblacklist_dbf.use_table(userblacklist_dbh, table) < 0) {
+-		LM_ERR("cannot use table '%.*s'.\n", table->len, table->s);
++
++	if (userblacklist_dbf.use_table(userblacklist_dbh, dbtable) < 0) {
++		LM_ERR("cannot use db table '%.*s'\n", dbtable->len, dbtable->s);
+ 		return -1;
+ 	}
+-	if (userblacklist_dbf.query(userblacklist_dbh, NULL, NULL, NULL, columns, 0, 2, NULL, &res) < 0) {
+-		LM_ERR("error while executing query.\n");
++	if (userblacklist_dbf.query(userblacklist_dbh, NULL, NULL, NULL,
++				columns, 0, 2, NULL, &res) < 0) {
++		LM_ERR("error while executing query on db table '%.*s'\n",
++				dbtable->len, dbtable->s);
+ 		return -1;
+ 	}
+ 
+@@ -133,10 +141,17 @@ int db_reload_source(const str *table, struct dtrie_node_t *root)
+ 					/* LM_DBG("insert into tree prefix %s, whitelist %d",
+ 						RES_ROWS(res)[i].values[0].val.string_val,
+ 						RES_ROWS(res)[i].values[1].val.int_val); */
+-					if (RES_ROWS(res)[i].values[1].val.int_val == 0) nodeflags=(void *) MARK_BLACKLIST;
+-					else nodeflags=(void *)MARK_WHITELIST;
+-					if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val, strlen(RES_ROWS(res)[i].values[0].val.string_val),
+-						nodeflags, match_mode) < 0) LM_ERR("could not insert values into trie.\n");
++					if (RES_ROWS(res)[i].values[1].val.int_val == 0) {
++						nodeflags=(void *)MARK_BLACKLIST;
++					} else {
++						nodeflags=(void *)MARK_WHITELIST;
++					}
++
++					if (dtrie_insert(root, RES_ROWS(res)[i].values[0].val.string_val,
++								strlen(RES_ROWS(res)[i].values[0].val.string_val),
++								nodeflags, match_mode) < 0)
++						LM_ERR("could not insert values into trie.\n");
++
+ 					n++;
+ 				}
+ 				else {
+diff --git a/modules/userblacklist/userblacklist.c b/modules/userblacklist/userblacklist.c
+index 44ed6f0..cac4279 100644
+--- a/modules/userblacklist/userblacklist.c
++++ b/modules/userblacklist/userblacklist.c
+@@ -89,15 +89,19 @@ static int check_user_blacklist_fixup(void** param, int param_no);
+ static int check_globalblacklist_fixup(void** param, int param_no);
+ 
+ /* ---- exported commands: */
+-static int check_user_blacklist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4);
+-static int check_user_whitelist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4);
+-static int check_user_blacklist2(struct sip_msg *msg, char* str1, char* str2);
+-static int check_user_whitelist2(struct sip_msg *msg, char* str1, char* str2);
+-static int check_user_blacklist3(struct sip_msg *msg, char* str1, char* str2, char* str3);
+-static int check_user_whitelist3(struct sip_msg *msg, char* str1, char* str2, char* str3);
+-static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1);
+-static int check_whitelist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1);
+-static int check_globalblacklist(struct sip_msg *msg);
++static int check_user_blacklist(sip_msg_t *msg, char* puser,
++		char* pdomain, char* pnumber, char* ptable);
++static int check_user_whitelist(sip_msg_t *msg, char* puser,
++		char* pdomain, char* pnumber, char* ptable);
++static int check_user_blacklist2(sip_msg_t *msg, char* puser, char* pdomain);
++static int check_user_whitelist2(sip_msg_t *msg, char* puser, char* pdomain);
++static int check_user_blacklist3(sip_msg_t *msg, char* puser, char* pdomain,
++		char* pnumber);
++static int check_user_whitelist3(sip_msg_t *msg, char* puser, char* pdomain,
++		char* pnumber);
++static int check_blacklist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1);
++static int check_whitelist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1);
++static int check_globalblacklist(sip_msg_t *msg);
+ 
+ 
+ /* ---- module init functions: */
+@@ -116,15 +120,24 @@ struct mi_root * mi_check_userwhitelist(struct mi_root* cmd, void* param);  /* u
+ 
+ 
+ static cmd_export_t cmds[]={
+-	{ "check_user_blacklist", (cmd_function)check_user_blacklist2, 2, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_user_whitelist", (cmd_function)check_user_whitelist2, 2, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_user_blacklist", (cmd_function)check_user_blacklist3, 3, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_user_whitelist", (cmd_function)check_user_whitelist3, 3, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_user_blacklist", (cmd_function)check_user_blacklist, 4, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_user_whitelist", (cmd_function)check_user_whitelist, 4, check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_blacklist", (cmd_function)check_blacklist, 1, check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_whitelist", (cmd_function)check_whitelist, 1, check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+-	{ "check_blacklist", (cmd_function)check_globalblacklist, 0, check_globalblacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_blacklist", (cmd_function)check_user_blacklist2, 2,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_whitelist", (cmd_function)check_user_whitelist2, 2,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_blacklist", (cmd_function)check_user_blacklist3, 3,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_whitelist", (cmd_function)check_user_whitelist3, 3,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_blacklist", (cmd_function)check_user_blacklist, 4,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_user_whitelist", (cmd_function)check_user_whitelist, 4,
++		check_user_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_blacklist", (cmd_function)check_blacklist, 1,
++		check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_whitelist", (cmd_function)check_whitelist, 1,
++		check_blacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
++	{ "check_blacklist", (cmd_function)check_globalblacklist, 0,
++		check_globalblacklist_fixup, 0, REQUEST_ROUTE | FAILURE_ROUTE },
+ 	{ 0, 0, 0, 0, 0, 0}
+ };
+ 
+@@ -205,8 +218,8 @@ static int check_user_blacklist_fixup(void** param, int param_no)
+ }
+ 
+ 
+-static int check_user_list(sip_msg_t *msg, char* str1, char* str2,
+-		char* str3, char* str4, int listtype)
++static int check_user_list(sip_msg_t *msg, char* puser, char* pdomain,
++		char* pnumber, char* ptable, int listtype)
+ {
+ 	str user = { .len = 0, .s = NULL };
+ 	str domain = { .len = 0, .s = NULL};
+@@ -218,25 +231,25 @@ static int check_user_list(sip_msg_t *msg, char* str1, char* str2,
+ 	char req_number[MAXNUMBERLEN+1];
+ 
+ 	/* user */
+-	if(fixup_get_svalue(msg, (gparam_t*)str1, &user)!=0) {
++	if(fixup_get_svalue(msg, (gparam_t*)puser, &user)!=0) {
+ 		LM_ERR("cannot print user pseudo-variable\n");
+ 		return -1;
+ 	}
+ 	/* domain */
+-	if(fixup_get_svalue(msg, (gparam_t*)str2, &domain)!=0) {
++	if(fixup_get_svalue(msg, (gparam_t*)pdomain, &domain)!=0) {
+ 		LM_ERR("cannot print domain pseudo-variable\n");
+ 		return -1;
+ 	}
+ 	/* source number */
+-	if(str3 != NULL) {
+-		if(fixup_get_svalue(msg, (gparam_t*)str3, &number)!=0) {
++	if(pnumber != NULL) {
++		if(fixup_get_svalue(msg, (gparam_t*)pnumber, &number)!=0) {
+ 			LM_ERR("cannot print number pseudo-variable\n");
+ 			return -1;
+ 		}
+ 	}
+ 	/* table name */
+-	if(str4 != NULL) {
+-		if(fixup_get_svalue(msg, (gparam_t*)str4, &table)!=0) {
++	if(pnumber != NULL) {
++		if(fixup_get_svalue(msg, (gparam_t*)ptable, &table)!=0) {
+ 			LM_ERR("cannot print number pseudo-variable\n");
+ 			return -1;
+ 		}
+@@ -304,37 +317,41 @@ static int check_user_list(sip_msg_t *msg, char* str1, char* str2,
+ }
+ 
+ 
+-static int check_user_whitelist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4)
++static int check_user_whitelist(sip_msg_t *msg, char* puser,
++		char* pdomain, char* pnumber, char* ptable)
+ {
+-	return check_user_list(msg, str1, str2, str3, str4, 1);
++	return check_user_list(msg, puser, pdomain, pnumber, ptable, 1);
+ }
+ 
+ 
+-static int check_user_blacklist(struct sip_msg *msg, char* str1, char* str2, char* str3, char* str4)
++static int check_user_blacklist(sip_msg_t *msg, char* puser,
++		char* pdomain, char* pnumber, char* ptable)
+ {
+-	return check_user_list(msg, str1, str2, str3, str4, 0);
++	return check_user_list(msg, puser, pdomain, pnumber, ptable, 0);
+ }
+ 
+-static int check_user_whitelist2(struct sip_msg *msg, char* str1, char* str2)
++static int check_user_whitelist2(sip_msg_t *msg, char* puser, char* pdomain)
+ {
+-	return check_user_list(msg, str1, str2, NULL, NULL, 1);
++	return check_user_list(msg, puser, pdomain, NULL, NULL, 1);
+ }
+ 
+ 
+-static int check_user_blacklist2(struct sip_msg *msg, char* str1, char* str2)
++static int check_user_blacklist2(sip_msg_t *msg, char* puser, char* pdomain)
+ {
+-	return check_user_list(msg, str1, str2, NULL, NULL, 0);
++	return check_user_list(msg, puser, pdomain, NULL, NULL, 0);
+ }
+ 
+-static int check_user_whitelist3(struct sip_msg *msg, char* str1, char* str2, char* str3)
++static int check_user_whitelist3(sip_msg_t *msg, char* puser, char* pdomain,
++		char* pnumber)
+ {
+-	return check_user_list(msg, str1, str2, str3, NULL, 1);
++	return check_user_list(msg, puser, pdomain, pnumber, NULL, 1);
+ }
+ 
+ 
+-static int check_user_blacklist3(struct sip_msg *msg, char* str1, char* str2, char* str3)
++static int check_user_blacklist3(sip_msg_t *msg, char* puser, char* pdomain,
++		char* pnumber)
+ {
+-	return check_user_list(msg, str1, str2, str3, NULL, 0);
++	return check_user_list(msg, puser, pdomain, pnumber, NULL, 0);
+ }
+ 
+ 
+@@ -426,7 +443,7 @@ static int check_globalblacklist_fixup(void** param, int param_no)
+ 	return 0;
+ }
+ 
+-static int check_globalblacklist(struct sip_msg* msg)
++static int check_globalblacklist(sip_msg_t* msg)
+ {
+ 	static struct check_blacklist_fs_t* arg = NULL;
+ 	if(!arg){
+@@ -482,7 +499,7 @@ static int check_blacklist_fixup(void **arg, int arg_no)
+ }
+ 
+ 
+-static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1)
++static int check_blacklist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1)
+ {
+ 	void **nodeflags;
+ 	char *ptr;
+@@ -528,7 +545,7 @@ static int check_blacklist(struct sip_msg *msg, struct check_blacklist_fs_t *arg
+ 	return ret;
+ }
+ 
+-static int check_whitelist(struct sip_msg *msg, struct check_blacklist_fs_t *arg1)
++static int check_whitelist(sip_msg_t *msg, struct check_blacklist_fs_t *arg1)
+ {
+ 	void **nodeflags;
+ 	char *ptr;
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0014-userblacklist-fixed-copy-paste-typo-when-evaluating-.patch b/debian/patches/upstream/0014-userblacklist-fixed-copy-paste-typo-when-evaluating-.patch
new file mode 100644
index 0000000..5d02257
--- /dev/null
+++ b/debian/patches/upstream/0014-userblacklist-fixed-copy-paste-typo-when-evaluating-.patch
@@ -0,0 +1,30 @@
+From 7d9423448708330f197021d23e94e1b2d13ab8b8 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Wed, 6 Jul 2016 11:19:08 +0200
+Subject: [PATCH] userblacklist: fixed copy-paste typo when evaluating table
+ parameter
+
+(cherry picked from commit 5d285e90b0f145410acd15a7abf96d3b339a31b5)
+---
+ modules/userblacklist/userblacklist.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/userblacklist/userblacklist.c b/modules/userblacklist/userblacklist.c
+index cac4279..2a1a448 100644
+--- a/modules/userblacklist/userblacklist.c
++++ b/modules/userblacklist/userblacklist.c
+@@ -248,9 +248,9 @@ static int check_user_list(sip_msg_t *msg, char* puser, char* pdomain,
+ 		}
+ 	}
+ 	/* table name */
+-	if(pnumber != NULL) {
++	if(ptable != NULL) {
+ 		if(fixup_get_svalue(msg, (gparam_t*)ptable, &table)!=0) {
+-			LM_ERR("cannot print number pseudo-variable\n");
++			LM_ERR("cannot print table pseudo-variable\n");
+ 			return -1;
+ 		}
+ 	}
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0015-rr-fix-spelling-errors-catched-by-lintian-688.patch b/debian/patches/upstream/0015-rr-fix-spelling-errors-catched-by-lintian-688.patch
new file mode 100644
index 0000000..54af053
--- /dev/null
+++ b/debian/patches/upstream/0015-rr-fix-spelling-errors-catched-by-lintian-688.patch
@@ -0,0 +1,26 @@
+From 1ca980fc2d6856d08bd725ffdbb799225ed09885 Mon Sep 17 00:00:00 2001
+From: Victor Seva <linuxmaniac at torreviejawireless.org>
+Date: Wed, 29 Jun 2016 17:19:25 +0200
+Subject: [PATCH] rr: fix spelling errors catched by lintian #688
+
+(cherry picked from commit 8f984a1be0726ec64cb4797a569fb44d1a7a9afd)
+---
+ modules/rr/loose.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/rr/loose.c b/modules/rr/loose.c
+index 1785d8c..48644d9 100644
+--- a/modules/rr/loose.c
++++ b/modules/rr/loose.c
+@@ -43,7 +43,7 @@
+ #include "rr_mod.h"
+ 
+ 
+-#define RR_ERROR -1		/*!< An error occured while processing route set */
++#define RR_ERROR -1		/*!< An error occurred while processing route set */
+ #define RR_DRIVEN 1		/*!< The next hop is determined from the route set */
+ #define RR_OB_DRIVEN 2		/*!< The next hop is determined from the route set based on flow-token */
+ #define NOT_RR_DRIVEN -1	/*!< The next hop is not determined from the route set */
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0016-rr-refactored-the-check-route-params-to-detect-prope.patch b/debian/patches/upstream/0016-rr-refactored-the-check-route-params-to-detect-prope.patch
new file mode 100644
index 0000000..9ca8a58
--- /dev/null
+++ b/debian/patches/upstream/0016-rr-refactored-the-check-route-params-to-detect-prope.patch
@@ -0,0 +1,209 @@
+From 7c108788a516c91869e95a01dafc508da473a031 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Mon, 4 Jul 2016 15:11:01 +0200
+Subject: [PATCH] rr: refactored the check route params to detect properly if
+ same message is used
+
+- cached pointers may get invalid depending on the type of route block
+- reported by GH #663
+
+(cherry picked from commit 4949ebb7258aff41b2fd3a075bdc1a1af4684b5c)
+---
+ modules/rr/loose.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 90 insertions(+), 13 deletions(-)
+
+diff --git a/modules/rr/loose.c b/modules/rr/loose.c
+index 48644d9..71d7d43 100644
+--- a/modules/rr/loose.c
++++ b/modules/rr/loose.c
+@@ -762,6 +762,7 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
+ 	struct socket_info *si;
+ 	int uri_is_myself;
+ 	int use_ob = 0;
++	str rparams;
+ 
+ 	hdr = _m->route;
+ 	rt = (rr_t*)hdr->parsed;
+@@ -855,7 +856,7 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
+ 				rt = (rr_t*)hdr->parsed;
+ 			} else rt = rt->next;
+ 		}
+-		
++
+ 		uri = rt->nameaddr.uri;
+ 		if (parse_uri(uri.s, uri.len, &puri) < 0) {
+ 			LM_ERR("failed to parse the next route URI (%.*s)\n",
+@@ -889,7 +890,7 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
+ 				LM_ERR("checking maddr failed\n");
+ 				return RR_ERROR;
+ 			}
+-		
++
+ 			if (set_dst_uri(_m, &uri) < 0) {
+ 				LM_ERR("failed to set dst_uri\n");
+ 				return RR_ERROR;
+@@ -902,7 +903,7 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
+ 		/* There is a previous route uri which was 2nd uri of mine
+ 		 * and must be removed here */
+ 		if (rt != hdr->parsed) {
+-			if (!del_lump(_m, hdr->body.s - _m->buf, 
++			if (!del_lump(_m, hdr->body.s - _m->buf,
+ 			rt->nameaddr.name.s - hdr->body.s, 0)) {
+ 				LM_ERR("failed to remove Route HF\n");
+ 				return RR_ERROR;
+@@ -915,8 +916,10 @@ done:
+ 		status = RR_OB_DRIVEN;
+ 
+ 	/* run RR callbacks only if we have Route URI parameters */
+-	if(routed_params.len > 0)
+-		run_rr_callbacks( _m, &routed_params );
++	if(routed_params.len > 0) {
++		rparams = routed_params;
++		run_rr_callbacks( _m, &rparams );
++	}
+ 	return status;
+ }
+ 
+@@ -934,7 +937,7 @@ int loose_route(struct sip_msg* _m)
+ 		LM_DBG("There is no Route HF\n");
+ 		return -1;
+ 	}
+-		
++
+ 	if (parse_sip_msg_uri(_m)<0) {
+ 		LM_ERR("failed to parse Request URI\n");
+ 		return -1;
+@@ -954,6 +957,70 @@ int loose_route(struct sip_msg* _m)
+ 	}
+ }
+ 
++/**
++ *
++ */
++int redo_route_params(sip_msg_t *msg)
++{
++	hdr_field_t *hdr;
++	sip_uri_t puri;
++	rr_t* rt;
++	str uri;
++	int uri_is_myself;
++
++	int redo = 0;
++
++	if(msg->first_line.type != SIP_REQUEST) {
++		return -1;
++	}
++
++	if(msg->route==NULL || msg->route->parsed==NULL) {
++		return -1;
++	}
++
++	/* check if the hooked params belong to the same message */
++	if (routed_msg_id != msg->id || routed_msg_pid != msg->pid) {
++		redo = 1;
++	}
++	if((redo==0) && (routed_params.s==NULL || routed_params.len<=0)) {
++		redo = 1;
++	}
++	if((redo==0) && (routed_params.s<msg->buf
++				|| routed_params.s>msg->buf+msg->len)) {
++		redo = 1;
++	}
++	if(redo==1) {
++		hdr = msg->route;
++		rt = (rr_t*)hdr->parsed;
++		uri = rt->nameaddr.uri;
++
++		/* reset rr handling static vars for safety in error case */
++		routed_msg_id = 0;
++		routed_msg_pid = 0;
++
++		if (parse_uri(uri.s, uri.len, &puri) < 0) {
++			LM_ERR("failed to parse the first route URI (%.*s)\n",
++					uri.len, ZSW(uri.s));
++			return -1;
++		}
++
++		uri_is_myself = is_myself(&puri);
++
++		/* if the URI was added by me, remove it */
++		if (uri_is_myself>0) {
++			LM_DBG("Topmost route URI: '%.*s' is me\n",
++				uri.len, ZSW(uri.s));
++			/* set the hooks for the params */
++			routed_msg_id = msg->id;
++			routed_msg_pid = msg->pid;
++			routed_params = puri.params;
++			return 0;
++		} else {
++			return -1;
++		}
++	}
++	return 0;
++}
+ 
+ /*!
+  * \brief Check if the route hdr has the required parameter
+@@ -967,22 +1034,31 @@ int loose_route(struct sip_msg* _m)
+  * \param re compiled regular expression to be checked against the Route header parameters
+  * \return -1 on failure, 1 on success
+  */
+-int check_route_param(struct sip_msg * msg, regex_t* re)
++int check_route_param(sip_msg_t * msg, regex_t* re)
+ {
+ 	regmatch_t pmatch;
+ 	char bk;
+ 	str params;
++	str rruri;
+ 
+ 	/* check if the hooked params belong to the same message */
+-	if (routed_msg_id != msg->id || routed_msg_pid != msg->pid)
++	if(redo_route_params(msg)<0) {
+ 		return -1;
++	}
+ 
+ 	/* check if params are present */
+-	if ( !routed_params.s || !routed_params.len )
++	if ( !routed_params.s || routed_params.len<=0 ) {
+ 		return -1;
++	}
++	rruri = ((rr_t*)(msg->route->parsed))->nameaddr.uri;
+ 
+ 	/* include also the first ';' */
+-	for( params=routed_params ; params.s[0]!=';' ; params.s--,params.len++ );
++	for( params=routed_params ;
++			params.s>rruri.s && params.s[0]!=';' ;
++			params.s--,params.len++ );
++
++	LM_DBG("route params checking against [%.*s] (orig: [%.*s])\n",
++			params.len, params.s, routed_params.len, routed_params.s);
+ 
+ 	/* do the well-known trick to convert to null terminted */
+ 	bk = params.s[params.len];
+@@ -1011,7 +1087,7 @@ int check_route_param(struct sip_msg * msg, regex_t* re)
+  * It might be an empty string if the parameter had no value.
+  * \return 0 if parameter was found (even if it has no value), -1 otherwise
+  */
+-int get_route_param( struct sip_msg *msg, str *name, str *val)
++int get_route_param(sip_msg_t *msg, str *name, str *val)
+ {
+ 	char *p;
+ 	char *end;
+@@ -1019,11 +1095,12 @@ int get_route_param( struct sip_msg *msg, str *name, str *val)
+ 	int quoted;
+ 
+ 	/* check if the hooked params belong to the same message */
+-	if (routed_msg_id != msg->id)
++	if(redo_route_params(msg)<0) {
+ 		goto notfound;
++	}
+ 
+ 	/* check if params are present */
+-	if ( !routed_params.s || !routed_params.len )
++	if ( !routed_params.s || routed_params.len<=0 )
+ 		goto notfound;
+ 
+ 	end = routed_params.s + routed_params.len;
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0017-dialog-open-db-connection-from-rpc-processes.patch b/debian/patches/upstream/0017-dialog-open-db-connection-from-rpc-processes.patch
new file mode 100644
index 0000000..43e7f55
--- /dev/null
+++ b/debian/patches/upstream/0017-dialog-open-db-connection-from-rpc-processes.patch
@@ -0,0 +1,29 @@
+From 50da2ea87ceaabd2b9d6ef631c623cfcb3dcbdc2 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Wed, 6 Jul 2016 15:48:58 +0200
+Subject: [PATCH] dialog: open db connection from rpc processes
+
+- might be requered by rpc commands when db realtime is set
+- reported by Dirk Teurlings
+
+(cherry picked from commit a7e7486b57f1b9d025f09c055a3dc360c131fa5b)
+---
+ modules/dialog/dialog.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/dialog/dialog.c b/modules/dialog/dialog.c
+index 553715d..27734a3 100644
+--- a/modules/dialog/dialog.c
++++ b/modules/dialog/dialog.c
+@@ -743,7 +743,7 @@ static int child_init(int rank)
+ 	}
+ 
+ 	if ( ((dlg_db_mode==DB_MODE_REALTIME || dlg_db_mode==DB_MODE_DELAYED) &&
+-	(rank>0 || rank==PROC_TIMER)) ||
++	(rank>0 || rank==PROC_TIMER || rank==PROC_RPC)) ||
+ 	(dlg_db_mode==DB_MODE_SHUTDOWN && (rank==PROC_MAIN)) ) {
+ 		if ( dlg_connect_db(&db_url) ) {
+ 			LM_ERR("failed to connect to database (rank=%d)\n",rank);
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0018-tm-check-branch-uri-against-current-uri-when-decidin.patch b/debian/patches/upstream/0018-tm-check-branch-uri-against-current-uri-when-decidin.patch
new file mode 100644
index 0000000..7001802
--- /dev/null
+++ b/debian/patches/upstream/0018-tm-check-branch-uri-against-current-uri-when-decidin.patch
@@ -0,0 +1,29 @@
+From 0a274283514a34525daa471cf8e781fb339a870c Mon Sep 17 00:00:00 2001
+From: grumvalski <federico.cabiddu at gmail.com>
+Date: Thu, 7 Jul 2016 16:06:51 +0200
+Subject: [PATCH] tm: check branch uri against current uri when deciding if
+ append a new branch
+
+(cherry picked from commit 335e44635aa69ab73ec76f713a7d5ce7ce06748c)
+---
+ modules/tm/t_append_branches.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/modules/tm/t_append_branches.c b/modules/tm/t_append_branches.c
+index f38a0a2..f745e75 100644
+--- a/modules/tm/t_append_branches.c
++++ b/modules/tm/t_append_branches.c
+@@ -127,7 +127,9 @@ int t_append_branches(void) {
+ 		found = 0;
+ 		for (i=0; i<outgoings; i++) {
+ 			if (t->uac[i].ruid.len == ruid.len
+-					&& !memcmp(t->uac[i].ruid.s, ruid.s, ruid.len)) {
++					&& !memcmp(t->uac[i].ruid.s, ruid.s, ruid.len)
++					&& t->uac[i].uri.len == current_uri.len 
++					&& !memcmp(t->uac[i].uri.s, current_uri.s, current_uri.len)) {
+ 				LM_DBG("branch already added [%.*s]\n", ruid.len, ruid.s);
+ 				found = 1;
+ 				break;
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0019-rtpengine-init-rtp-engine-sockets-array-after-alloca.patch b/debian/patches/upstream/0019-rtpengine-init-rtp-engine-sockets-array-after-alloca.patch
new file mode 100644
index 0000000..bcfba13
--- /dev/null
+++ b/debian/patches/upstream/0019-rtpengine-init-rtp-engine-sockets-array-after-alloca.patch
@@ -0,0 +1,59 @@
+From 9aae641cd6e9fcb28d1f4a7b1c9bb8be1adcf7ef Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Thu, 7 Jul 2016 14:51:24 +0200
+Subject: [PATCH] rtpengine: init rtp engine sockets array after allocation
+
+- it can result in closing the random values found in memory, which can
+  overlap with valid sockets, due to follow up execution of
+  build_rtpp_socks()
+- do not init sockets for PROC_MAIN (for for=yes) and PROC_INIT to avoid
+  duplicating sockets with child processed
+
+(cherry picked from commit d76761bf95a5745240d655ee63241b8d4652611d)
+---
+ modules/rtpengine/rtpengine.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/modules/rtpengine/rtpengine.c b/modules/rtpengine/rtpengine.c
+index 5fe83b0..afb9315 100644
+--- a/modules/rtpengine/rtpengine.c
++++ b/modules/rtpengine/rtpengine.c
+@@ -1809,6 +1809,7 @@ static int build_rtpp_socks(unsigned int current_rtpp_no) {
+ 	for (i = 0; i < rtpp_socks_size; i++) {
+ 		if (rtpp_socks[i] >= 0) {
+ 			close(rtpp_socks[i]);
++			rtpp_socks[i] = -1;
+ 		}
+ 	}
+ 
+@@ -1818,6 +1819,7 @@ static int build_rtpp_socks(unsigned int current_rtpp_no) {
+ 		LM_ERR("no more pkg memory for rtpp_socks\n");
+ 		return -1;
+ 	}
++	memset(rtpp_socks, -1, sizeof(int)*(rtpp_socks_size));
+ 
+ 	lock_get(rtpp_set_list->rset_head_lock);
+ 	for (rtpp_list = rtpp_set_list->rset_first; rtpp_list != 0;
+@@ -1911,6 +1913,11 @@ child_init(int rank)
+ 	if(!rtpp_set_list)
+ 		return 0;
+ 
++	/* do not init sockets for PROC_INIT and main process when fork=yes */
++	if(rank==PROC_INIT || (rank==PROC_MAIN && dont_fork==0)) {
++		return 0;
++	}
++
+ 	mypid = getpid();
+ 
+ 	lock_get(rtpp_no_lock);
+@@ -1921,6 +1928,7 @@ child_init(int rank)
+ 	if (!rtpp_socks) {
+ 		return -1;
+ 	}
++	memset(rtpp_socks, -1, sizeof(int)*(rtpp_socks_size));
+ 
+ 	// vector of pointers to queried nodes
+ 	queried_nodes_ptr = (struct rtpp_node**)pkg_malloc(queried_nodes_limit * sizeof(struct rtpp_node*));
+-- 
+2.8.1
+
diff --git a/debian/patches/upstream/0020-rtpproxy-init-rtpproxy-sockets-array-after-allocatio.patch b/debian/patches/upstream/0020-rtpproxy-init-rtpproxy-sockets-array-after-allocatio.patch
new file mode 100644
index 0000000..e8cdc39
--- /dev/null
+++ b/debian/patches/upstream/0020-rtpproxy-init-rtpproxy-sockets-array-after-allocatio.patch
@@ -0,0 +1,39 @@
+From 1a5e83216e8699cab3680ff321a62a9be7c3c85f Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Thu, 7 Jul 2016 14:53:28 +0200
+Subject: [PATCH] rtpproxy: init rtpproxy sockets array after allocation
+
+- do not init sockets for PROC_MAIN (for for=yes) and PROC_INIT to
+  avoid duplicating sockets with child processed
+
+(cherry picked from commit 0fbac693b4d3ed913b64c2d000f27a96903b7e09)
+---
+ modules/rtpproxy/rtpproxy.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
+index bb644de..80be249 100644
+--- a/modules/rtpproxy/rtpproxy.c
++++ b/modules/rtpproxy/rtpproxy.c
+@@ -1007,6 +1007,10 @@ child_init(int rank)
+ 	if(rtpp_set_list==NULL )
+ 		return 0;
+ 
++	if(rank==PROC_INIT || (rank==PROC_MAIN && dont_fork==0)) {
++		return 0;
++	}
++
+ 	/* Iterate known RTP proxies - create sockets */
+ 	mypid = getpid();
+ 
+@@ -1015,6 +1019,7 @@ child_init(int rank)
+ 		LM_ERR("no more pkg memory\n");
+ 		return -1;
+ 	}
++	memset(rtpp_socks, -1, sizeof(int)*rtpp_no);
+ 
+ 	for(rtpp_list = rtpp_set_list->rset_first; rtpp_list != 0;
+ 		rtpp_list = rtpp_list->rset_next){
+-- 
+2.8.1
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/kamailio.git



More information about the Pkg-voip-commits mailing list