From 2e9e9b838642a1129d130912d3f70997ae5a1fd7 Mon Sep 17 00:00:00 2001 From: Sebastian Kemper Date: Wed, 7 Jun 2023 23:38:52 +0200 Subject: [PATCH 1/2] pjproject: bump to 2.13 - bump to 2.13 - new option "--disable-libsrtp" now available so we can get rid of dependency on libsrtp2 (asterisk's SRTP support doesn't depend on pjproject) - new option "--disable-upnp" - 0007-execinfo.patch not required anymore, pjproject now checks for __GLIBC__ - sync patches with asterisk 20.3.0 Signed-off-by: Sebastian Kemper --- libs/pjproject/Makefile | 13 +- .../patches/0006-fix-pkg_config-file.patch | 2 +- libs/pjproject/patches/0007-execinfo.patch | 71 ---- ...new-129fb323a66dd1fd16880fe5ba5e6a57.patch | 27 ++ .../0100-allow_multiple_auth_headers.patch | 397 ------------------ ...verflow-in-pjlib-scanner-and-pjmedia.patch | 297 ------------- ...hen-parsing-message-as-a-STUN-client.patch | 39 -- 7 files changed, 35 insertions(+), 811 deletions(-) delete mode 100644 libs/pjproject/patches/0007-execinfo.patch create mode 100644 libs/pjproject/patches/0010-Make-sure-that-NOTIFY-tdata-is-set-before-sending-it_new-129fb323a66dd1fd16880fe5ba5e6a57.patch delete mode 100644 libs/pjproject/patches/0100-allow_multiple_auth_headers.patch delete mode 100644 libs/pjproject/patches/0200-potential-buffer-overflow-in-pjlib-scanner-and-pjmedia.patch delete mode 100644 libs/pjproject/patches/0201-potential-stack-buffer-overflow-when-parsing-message-as-a-STUN-client.patch diff --git a/libs/pjproject/Makefile b/libs/pjproject/Makefile index 0b4f46c..7cd8367 100644 --- a/libs/pjproject/Makefile +++ b/libs/pjproject/Makefile @@ -10,14 +10,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=pjproject -PKG_VERSION:=2.12.1 -PKG_RELEASE:=2 +PKG_VERSION:=2.13 +PKG_RELEASE:=1 # download "vX.Y.tar.gz" as "pjproject-vX.Y.tar.gz" PKG_SOURCE_URL_FILE:=$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_URL_FILE) PKG_SOURCE_URL:=https://github.com/pjsip/$(PKG_NAME)/archive -PKG_HASH:=d0feef6963b07934e821ba4328aecb4c36358515c1b3e507da5874555d713533 +PKG_HASH:=4178bb9f586299111463fc16ea04e461adca4a73e646f8ddef61ea53dafa92d9 PKG_INSTALL:=1 PKG_LICENSE:=GPL-2.0 @@ -71,6 +71,7 @@ CONFIGURE_ARGS+= \ --disable-ilbc-codec \ --disable-ipp \ --disable-l16-codec \ + --disable-libsrtp \ --disable-libwebrtc \ --disable-libyuv \ --disable-opencore-amr \ @@ -82,10 +83,10 @@ CONFIGURE_ARGS+= \ --disable-sound \ --disable-speex-aec \ --disable-speex-codec \ + --disable-upnp \ --disable-v4l2 \ --disable-video \ --enable-shared \ - --with-external-srtp="$(STAGING_DIR)/usr" \ --with-ssl="$(STAGING_DIR)/usr" \ --without-external-gsm \ --without-external-pa \ @@ -116,10 +117,10 @@ endef $(eval $(call PJSIPpackage,libpj,libpj,+librt)) $(eval $(call PJSIPpackage,libpjlib-util,libpjlib-util,+libpj +librt)) -$(eval $(call PJSIPpackage,libpjmedia,libpjmedia*,+libpj +libpjlib-util +libpjnath +librt +libsrtp2)) +$(eval $(call PJSIPpackage,libpjmedia,libpjmedia*,+libpj +libpjlib-util +libpjnath +librt)) $(eval $(call PJSIPpackage,libpjnath,libpjnath,+libpj +libpjlib-util +librt)) $(eval $(call PJSIPpackage,libpjsip-simple,libpjsip-simple,+libpj +libpjlib-util +libpjsip +librt)) $(eval $(call PJSIPpackage,libpjsip-ua,libpjsip-ua,+libpj +libpjlib-util +libpjmedia +libpjsip-simple +libpjsip +librt)) -$(eval $(call PJSIPpackage,libpjsip,libpjsip,+libpj +libpjlib-util +librt +libsrtp2)) +$(eval $(call PJSIPpackage,libpjsip,libpjsip,+libpj +libpjlib-util +librt)) $(eval $(call PJSIPpackage,libpjsua,libpjsua,+libpj +libpjlib-util +libpjmedia +libpjnath +libpjsip-simple +libpjsip-ua +libpjsip +librt)) $(eval $(call PJSIPpackage,libpjsua2,libpjsua2,+libpj +libpjlib-util +libpjmedia +libpjnath +libpjsip-simple +libpjsip-ua +libpjsip +librt +libpjsua)) diff --git a/libs/pjproject/patches/0006-fix-pkg_config-file.patch b/libs/pjproject/patches/0006-fix-pkg_config-file.patch index cc547b9..90f1d22 100644 --- a/libs/pjproject/patches/0006-fix-pkg_config-file.patch +++ b/libs/pjproject/patches/0006-fix-pkg_config-file.patch @@ -13,7 +13,7 @@ Description: Multimedia communication library --- a/build.mak.in +++ b/build.mak.in -@@ -349,6 +349,6 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL +@@ -352,6 +352,6 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL export PJ_INSTALL_DIR := @prefix@ export PJ_INSTALL_INC_DIR := @includedir@ export PJ_INSTALL_LIB_DIR := @libdir@ diff --git a/libs/pjproject/patches/0007-execinfo.patch b/libs/pjproject/patches/0007-execinfo.patch deleted file mode 100644 index be1b954..0000000 --- a/libs/pjproject/patches/0007-execinfo.patch +++ /dev/null @@ -1,71 +0,0 @@ -In upstream commit b236337 unit tests were extended to print stack traces when -crashing, using GNU extensions. But this won't work with musl etc. (no -"execinfo.h"), so we need to update the condition to make sure this is only -done when glibc is used. - ---- a/pjlib-util/src/pjlib-util-test/main.c -+++ b/pjlib-util/src/pjlib-util-test/main.c -@@ -33,7 +33,7 @@ static void init_signals() - sigaction(SIGALRM, &act, NULL); - } - --#elif PJ_LINUX || PJ_DARWINOS -+#elif (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include ---- a/pjlib/src/pjlib-test/main.c -+++ b/pjlib/src/pjlib-test/main.c -@@ -54,7 +54,7 @@ static void init_signals() - sigaction(SIGALRM, &act, NULL); - } - --#elif PJ_LINUX || PJ_DARWINOS -+#elif (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include ---- a/pjmedia/src/test/main.c -+++ b/pjmedia/src/test/main.c -@@ -32,7 +32,7 @@ - #endif - - --#if PJ_LINUX || PJ_DARWINOS -+#if (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include ---- a/pjnath/src/pjnath-test/main.c -+++ b/pjnath/src/pjnath-test/main.c -@@ -32,7 +32,7 @@ static void init_signals() - sigaction(SIGALRM, &act, NULL); - } - --#elif PJ_LINUX || PJ_DARWINOS -+#elif (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include ---- a/pjsip-apps/src/pjsua/main.c -+++ b/pjsip-apps/src/pjsua/main.c -@@ -80,7 +80,7 @@ static void setup_signal_handler(void) - SetConsoleCtrlHandler(&CtrlHandler, TRUE); - } - --#elif PJ_LINUX || PJ_DARWINOS -+#elif (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include ---- a/pjsip/src/test/main.c -+++ b/pjsip/src/test/main.c -@@ -36,7 +36,7 @@ static void usage(void) - list_tests(); - } - --#if PJ_LINUX || PJ_DARWINOS -+#if (defined(PJ_LINUX) && PJ_LINUX!=0 && defined(__GLIBC__)) || PJ_DARWINOS - - #include - #include diff --git a/libs/pjproject/patches/0010-Make-sure-that-NOTIFY-tdata-is-set-before-sending-it_new-129fb323a66dd1fd16880fe5ba5e6a57.patch b/libs/pjproject/patches/0010-Make-sure-that-NOTIFY-tdata-is-set-before-sending-it_new-129fb323a66dd1fd16880fe5ba5e6a57.patch new file mode 100644 index 0000000..36eacfc --- /dev/null +++ b/libs/pjproject/patches/0010-Make-sure-that-NOTIFY-tdata-is-set-before-sending-it_new-129fb323a66dd1fd16880fe5ba5e6a57.patch @@ -0,0 +1,27 @@ +From ac685b30c17be461b2bf5b46a772ed9742b8e985 Mon Sep 17 00:00:00 2001 +From: Riza Sulistyo +Date: Thu, 9 Feb 2023 13:19:23 +0700 +Subject: [PATCH] Make sure that NOTIFY tdata is set before sending it. + +--- + pjsip/src/pjsip-simple/evsub.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +--- a/pjsip/src/pjsip-simple/evsub.c ++++ b/pjsip/src/pjsip-simple/evsub.c +@@ -2224,9 +2224,12 @@ static void on_tsx_state_uas( pjsip_evsu + /* Send the pending NOTIFY sent by app from inside + * on_rx_refresh() callback. + */ +- pj_assert(sub->pending_notify); +- status = pjsip_evsub_send_request(sub, sub->pending_notify); +- sub->pending_notify = NULL; ++ //pj_assert(sub->pending_notify); ++ /* Make sure that pending_notify is set. */ ++ if (sub->pending_notify) { ++ status = pjsip_evsub_send_request(sub, sub->pending_notify); ++ sub->pending_notify = NULL; ++ } + + } else if (pjsip_method_cmp(&tsx->method, &pjsip_notify_method)==0) { + diff --git a/libs/pjproject/patches/0100-allow_multiple_auth_headers.patch b/libs/pjproject/patches/0100-allow_multiple_auth_headers.patch deleted file mode 100644 index 39bc83f..0000000 --- a/libs/pjproject/patches/0100-allow_multiple_auth_headers.patch +++ /dev/null @@ -1,397 +0,0 @@ -commit 8e95490e37938f45d9d812905246036c3185b94f -Author: Riza Sulistyo -Date: Thu Mar 24 12:53:03 2022 +0700 - - Add compile time option to allow multiple Authorization header (#3010) - ---- a/pjsip/include/pjsip/sip_config.h -+++ b/pjsip/include/pjsip/sip_config.h -@@ -1280,6 +1280,18 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void) - # define PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY 1 - #endif - -+/** -+ * Allow client to send multiple Authorization header when receiving multiple -+ * WWW-Authenticate header fields. If this is disabled, the stack will send -+ * Authorization header field containing credentials that match the -+ * topmost header field. -+ * -+ * Default is 0 -+ */ -+#ifndef PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER -+# define PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER 0 -+#endif -+ - /***************************************************************************** - * SIP Event framework and presence settings. - */ -@@ -1458,6 +1470,11 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void) - # define PJSIP_INV_ACCEPT_UNKNOWN_BODY PJ_FALSE - #endif - -+/** -+ * Dump configuration to log with verbosity equal to info(3). -+ */ -+PJ_DECL(void) pjsip_dump_config(void); -+ - PJ_END_DECL - - /** ---- a/pjsip/src/pjsip/sip_auth_client.c -+++ b/pjsip/src/pjsip/sip_auth_client.c -@@ -1367,7 +1367,7 @@ PJ_DEF(pj_status_t) pjsip_auth_clt_reini - chal_cnt = 0; - auth_cnt = 0; - last_auth_err = PJSIP_EAUTHNOAUTH; -- while (hdr != &rdata->msg_info.msg->hdr && auth_cnt == 0) { -+ while (hdr != &rdata->msg_info.msg->hdr) { - pjsip_cached_auth *cached_auth; - const pjsip_www_authenticate_hdr *hchal; - pjsip_authorization_hdr *hauth; -@@ -1431,6 +1431,11 @@ PJ_DEF(pj_status_t) pjsip_auth_clt_reini - /* Process next header. */ - hdr = hdr->next; - auth_cnt++; -+ -+#if defined(PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER) && \ -+ PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER==0 -+ break; -+#endif - } - - /* Check if challenge is present */ ---- a/pjsip/src/pjsip/sip_config.c -+++ b/pjsip/src/pjsip/sip_config.c -@@ -19,6 +19,9 @@ - */ - - #include -+#include -+ -+static const char *id = "sip_config.c"; - - /* pjsip configuration instance, initialized with default values */ - pjsip_cfg_t pjsip_sip_cfg_var = -@@ -65,6 +68,195 @@ pjsip_cfg_t pjsip_sip_cfg_var = - } - }; - -+PJ_DEF(void) pjsip_dump_config(void) -+{ -+ PJ_LOG(3, (id, "Dumping PJSIP configurations:")); -+ PJ_LOG(3, (id, " PJSIP_MAX_DIALOG_COUNT : %d", -+ PJSIP_MAX_DIALOG_COUNT)); -+ PJ_LOG(3, (id, " PJSIP_MAX_TRANSPORTS : %d", -+ PJSIP_MAX_TRANSPORTS)); -+ PJ_LOG(3, (id, " PJSIP_TPMGR_HTABLE_SIZE : %d", -+ PJSIP_TPMGR_HTABLE_SIZE)); -+ PJ_LOG(3, (id, " PJSIP_MAX_URL_SIZE : %d", -+ PJSIP_MAX_URL_SIZE)); -+ PJ_LOG(3, (id, " PJSIP_MAX_MODULE : %d", -+ PJSIP_MAX_MODULE)); -+ PJ_LOG(3, (id, " PJSIP_MAX_PKT_LEN : %d", -+ PJSIP_MAX_PKT_LEN)); -+ PJ_LOG(3, (id, " PJSIP_HANDLE_EVENTS_HAS_SLEEP_ON_ERR : %d", -+ PJSIP_HANDLE_EVENTS_HAS_SLEEP_ON_ERR)); -+ PJ_LOG(3, (id, " PJSIP_ACCEPT_MULTIPLE_SDP_ANSWERS : %d", -+ PJSIP_ACCEPT_MULTIPLE_SDP_ANSWERS)); -+ PJ_LOG(3, (id, " PJSIP_UDP_SIZE_THRESHOLD : %d", -+ PJSIP_UDP_SIZE_THRESHOLD)); -+ PJ_LOG(3, (id, " PJSIP_INCLUDE_ALLOW_HDR_IN_DLG : %d", -+ PJSIP_INCLUDE_ALLOW_HDR_IN_DLG)); -+ PJ_LOG(3, (id, " PJSIP_SAFE_MODULE : %d", -+ PJSIP_SAFE_MODULE)); -+ PJ_LOG(3, (id, " PJSIP_CHECK_VIA_SENT_BY : %d", -+ PJSIP_CHECK_VIA_SENT_BY)); -+ PJ_LOG(3, (id, " PJSIP_UNESCAPE_IN_PLACE : %d", -+ PJSIP_UNESCAPE_IN_PLACE)); -+ PJ_LOG(3, (id, " PJSIP_MAX_NET_EVENTS : %d", -+ PJSIP_MAX_NET_EVENTS)); -+ PJ_LOG(3, (id, " PJSIP_MAX_TIMED_OUT_ENTRIES : %d", -+ PJSIP_MAX_TIMED_OUT_ENTRIES)); -+ PJ_LOG(3, (id, " PJSIP_TRANSPORT_IDLE_TIME : %d", -+ PJSIP_TRANSPORT_IDLE_TIME)); -+ PJ_LOG(3, (id, " PJSIP_TRANSPORT_SERVER_IDLE_TIME : %d", -+ PJSIP_TRANSPORT_SERVER_IDLE_TIME)); -+ PJ_LOG(3, (id, " PJSIP_MAX_TRANSPORT_USAGE : %d", -+ PJSIP_MAX_TRANSPORT_USAGE)); -+ PJ_LOG(3, (id, " PJSIP_TCP_TRANSPORT_BACKLOG : %d", -+ PJSIP_TCP_TRANSPORT_BACKLOG)); -+ PJ_LOG(3, (id, " PJSIP_TCP_TRANSPORT_REUSEADDR : %d", -+ PJSIP_TCP_TRANSPORT_REUSEADDR)); -+ PJ_LOG(3, (id, " PJSIP_TCP_TRANSPORT_DONT_CREATE_LISTENER : %d", -+ PJSIP_TCP_TRANSPORT_DONT_CREATE_LISTENER)); -+ PJ_LOG(3, (id, " PJSIP_TLS_TRANSPORT_DONT_CREATE_LISTENER : %d", -+ PJSIP_TLS_TRANSPORT_DONT_CREATE_LISTENER)); -+ PJ_LOG(3, (id, " PJSIP_TCP_KEEP_ALIVE_INTERVAL : %d", -+ PJSIP_TCP_KEEP_ALIVE_INTERVAL)); -+ PJ_LOG(3, (id, " PJSIP_POOL_INC_TRANSPORT : %d", -+ PJSIP_POOL_INC_TRANSPORT)); -+ PJ_LOG(3, (id, " PJSIP_POOL_LEN_TDATA : %d", -+ PJSIP_POOL_LEN_TDATA)); -+ PJ_LOG(3, (id, " PJSIP_POOL_INC_TDATA : %d", -+ PJSIP_POOL_INC_TDATA)); -+ PJ_LOG(3, (id, " PJSIP_POOL_LEN_UA : %d", -+ PJSIP_POOL_LEN_UA)); -+ PJ_LOG(3, (id, " PJSIP_POOL_INC_UA : %d", -+ PJSIP_POOL_INC_UA)); -+ PJ_LOG(3, (id, " PJSIP_POOL_EVSUB_LEN : %d", -+ PJSIP_POOL_EVSUB_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_EVSUB_INC : %d", -+ PJSIP_POOL_EVSUB_INC)); -+ PJ_LOG(3, (id, " PJSIP_MAX_FORWARDS_VALUE : %d", -+ PJSIP_MAX_FORWARDS_VALUE)); -+ PJ_LOG(3, (id, " PJSIP_RFC3261_BRANCH_ID : %s", -+ PJSIP_RFC3261_BRANCH_ID)); -+ PJ_LOG(3, (id, " PJSIP_RFC3261_BRANCH_LEN : %d", -+ PJSIP_RFC3261_BRANCH_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_TSX_LAYER_LEN : %d", -+ PJSIP_POOL_TSX_LAYER_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_TSX_LAYER_INC : %d", -+ PJSIP_POOL_TSX_LAYER_INC)); -+ PJ_LOG(3, (id, " PJSIP_POOL_TSX_LEN : %d", -+ PJSIP_POOL_TSX_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_TSX_INC : %d", -+ PJSIP_POOL_TSX_INC)); -+ PJ_LOG(3, (id, " PJSIP_TSX_1XX_RETRANS_DELAY : %d", -+ PJSIP_TSX_1XX_RETRANS_DELAY)); -+ PJ_LOG(3, (id, " PJSIP_TSX_UAS_CONTINUE_ON_TP_ERROR : %d", -+ PJSIP_TSX_UAS_CONTINUE_ON_TP_ERROR)); -+ PJ_LOG(3, (id, " PJSIP_MAX_TSX_KEY_LEN : %d", -+ PJSIP_MAX_TSX_KEY_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_LEN_USER_AGENT : %d", -+ PJSIP_POOL_LEN_USER_AGENT)); -+ PJ_LOG(3, (id, " PJSIP_POOL_INC_USER_AGENT : %d", -+ PJSIP_POOL_INC_USER_AGENT)); -+ PJ_LOG(3, (id, " PJSIP_MAX_BRANCH_LEN : %d", -+ PJSIP_MAX_HNAME_LEN)); -+ PJ_LOG(3, (id, " PJSIP_POOL_LEN_DIALOG : %d", -+ PJSIP_POOL_LEN_DIALOG)); -+ PJ_LOG(3, (id, " PJSIP_POOL_INC_DIALOG : %d", -+ PJSIP_POOL_INC_DIALOG)); -+ PJ_LOG(3, (id, " PJSIP_MAX_HEADER_TYPES : %d", -+ PJSIP_MAX_HEADER_TYPES)); -+ PJ_LOG(3, (id, " PJSIP_MAX_URI_TYPES : %d", -+ PJSIP_MAX_URI_TYPES)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_HEADER_CACHING : %d", -+ PJSIP_AUTH_HEADER_CACHING)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_AUTO_SEND_NEXT : %d", -+ PJSIP_AUTH_AUTO_SEND_NEXT)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_QOP_SUPPORT : %d", -+ PJSIP_AUTH_QOP_SUPPORT)); -+ PJ_LOG(3, (id, " PJSIP_MAX_STALE_COUNT : %d", -+ PJSIP_MAX_STALE_COUNT)); -+ PJ_LOG(3, (id, " PJSIP_HAS_DIGEST_AKA_AUTH : %d", -+ PJSIP_HAS_DIGEST_AKA_AUTH)); -+ PJ_LOG(3, (id, " PJSIP_REGISTER_CLIENT_DELAY_BEFORE_REFRESH : %d", -+ PJSIP_REGISTER_CLIENT_DELAY_BEFORE_REFRESH)); -+ PJ_LOG(3, (id, " PJSIP_REGISTER_ALLOW_EXP_REFRESH : %d", -+ PJSIP_REGISTER_ALLOW_EXP_REFRESH)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_CACHED_POOL_MAX_SIZE : %d", -+ PJSIP_AUTH_CACHED_POOL_MAX_SIZE)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY : %d", -+ PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY)); -+ PJ_LOG(3, (id, " PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER : %d", -+ PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER)); -+ PJ_LOG(3, (id, " PJSIP_EVSUB_TIME_UAC_REFRESH : %d", -+ PJSIP_EVSUB_TIME_UAC_REFRESH)); -+ PJ_LOG(3, (id, " PJSIP_PUBLISHC_DELAY_BEFORE_REFRESH : %d", -+ PJSIP_PUBLISHC_DELAY_BEFORE_REFRESH)); -+ PJ_LOG(3, (id, " PJSIP_EVSUB_TIME_UAC_TERMINATE : %d", -+ PJSIP_EVSUB_TIME_UAC_TERMINATE)); -+ PJ_LOG(3, (id, " PJSIP_EVSUB_TIME_UAC_WAIT_NOTIFY : %d", -+ PJSIP_EVSUB_TIME_UAC_WAIT_NOTIFY)); -+ PJ_LOG(3, (id, " PJSIP_PRES_DEFAULT_EXPIRES : %d", -+ PJSIP_PRES_DEFAULT_EXPIRES)); -+ PJ_LOG(3, (id, " PJSIP_PRES_BAD_CONTENT_RESPONSE : %d", -+ PJSIP_PRES_BAD_CONTENT_RESPONSE)); -+ PJ_LOG(3, (id, " PJSIP_PRES_PIDF_ADD_TIMESTAMP : %d", -+ PJSIP_PRES_PIDF_ADD_TIMESTAMP)); -+ PJ_LOG(3, (id, " PJSIP_SESS_TIMER_DEF_SE : %d", -+ PJSIP_SESS_TIMER_DEF_SE)); -+ PJ_LOG(3, (id, " PJSIP_SESS_TIMER_RETRY_DELAY : %d", -+ PJSIP_SESS_TIMER_RETRY_DELAY)); -+ PJ_LOG(3, (id, " PJSIP_PUBLISHC_QUEUE_REQUEST : %d", -+ PJSIP_PUBLISHC_QUEUE_REQUEST)); -+ PJ_LOG(3, (id, " PJSIP_MWI_DEFAULT_EXPIRES : %d", -+ PJSIP_MWI_DEFAULT_EXPIRES)); -+ PJ_LOG(3, (id, " PJSIP_HAS_TX_DATA_LIST : %d", -+ PJSIP_HAS_TX_DATA_LIST)); -+ PJ_LOG(3, (id, " PJSIP_INV_ACCEPT_UNKNOWN_BODY : %d", -+ PJSIP_INV_ACCEPT_UNKNOWN_BODY)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.allow_port_in_fromto_hdr : %d", -+ pjsip_cfg()->endpt.allow_port_in_fromto_hdr)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.accept_replace_in_early_state : %d", -+ pjsip_cfg()->endpt.accept_replace_in_early_state)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.allow_tx_hash_in_uri : %d", -+ pjsip_cfg()->endpt.allow_tx_hash_in_uri)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.disable_rport : %d", -+ pjsip_cfg()->endpt.disable_rport)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.disable_tcp_switch : %d", -+ pjsip_cfg()->endpt.disable_tcp_switch)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.disable_tls_switch : %d", -+ pjsip_cfg()->endpt.disable_tls_switch)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.follow_early_media_fork : %d", -+ pjsip_cfg()->endpt.follow_early_media_fork)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.req_has_via_alias : %d", -+ pjsip_cfg()->endpt.req_has_via_alias)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.resolve_hostname_to_get_interface:%d", -+ pjsip_cfg()->endpt.resolve_hostname_to_get_interface)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.disable_secure_dlg_check : %d", -+ pjsip_cfg()->endpt.disable_secure_dlg_check)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.use_compact_form : %d", -+ pjsip_cfg()->endpt.use_compact_form)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.accept_multiple_sdp_answers : %d", -+ pjsip_cfg()->endpt.accept_multiple_sdp_answers)); -+ PJ_LOG(3, (id, " pjsip_cfg()->endpt.keep_inv_after_tsx_timeout : %d", -+ pjsip_cfg()->endpt.keep_inv_after_tsx_timeout)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tsx.max_count : %d", -+ pjsip_cfg()->tsx.max_count)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tsx.t1 : %d", -+ pjsip_cfg()->tsx.t1)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tsx.t2 : %d", -+ pjsip_cfg()->tsx.t2)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tsx.t4 : %d", -+ pjsip_cfg()->tsx.t4)); -+ PJ_LOG(3, (id, " pjsip_cfg()->td : %d", -+ pjsip_cfg()->tsx.td)); -+ PJ_LOG(3, (id, " pjsip_cfg()->regc.check_contact : %d", -+ pjsip_cfg()->regc.check_contact)); -+ PJ_LOG(3, (id, " pjsip_cfg()->regc.add_xuid_param : %d", -+ pjsip_cfg()->regc.add_xuid_param)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tcp.keep_alive_interval : %d", -+ pjsip_cfg()->tcp.keep_alive_interval)); -+ PJ_LOG(3, (id, " pjsip_cfg()->tls.keep_alive_interval : %d", -+ pjsip_cfg()->tls.keep_alive_interval)); -+} -+ - - #ifdef PJ_DLL - PJ_DEF(pjsip_cfg_t*) pjsip_cfg(void) ---- a/pjsip/src/pjsua-lib/pjsua_core.c -+++ b/pjsip/src/pjsua-lib/pjsua_core.c -@@ -3443,8 +3443,10 @@ PJ_DEF(void) pjsua_dump(pj_bool_t detail - old_decor = pj_log_get_decor(); - pj_log_set_decor(old_decor & (PJ_LOG_HAS_NEWLINE | PJ_LOG_HAS_CR)); - -- if (detail) -+ if (detail) { - pj_dump_config(); -+ pjsip_dump_config(); -+ } - - pjsip_endpt_dump(pjsua_get_pjsip_endpt(), detail); - ---- a/tests/pjsua/inc_sip.py -+++ b/tests/pjsua/inc_sip.py -@@ -306,9 +306,11 @@ class RecvfromTransaction: - body = None - # Pattern to be expected on pjsua when receiving the response - expect = "" -+ # Required config -+ pj_config = "" - - def __init__(self, title, resp_code, check_cseq=True, -- include=[], exclude=[], cmds=[], resp_hdr=[], resp_body=None, expect=""): -+ include=[], exclude=[], cmds=[], resp_hdr=[], resp_body=None, expect="", pj_config=""): - self.title = title - self.cmds = cmds - self.include = include -@@ -317,6 +319,7 @@ class RecvfromTransaction: - self.resp_hdr = resp_hdr - self.body = resp_body - self.expect = expect -+ self.pj_config=pj_config - - - class RecvfromCfg: -@@ -328,15 +331,18 @@ class RecvfromCfg: - transaction = None - # Use TCP? - tcp = False -+ # Required config -+ pj_config = "" - - # Note: - # Any "$PORT" string in the pjsua_args will be replaced - # by server port -- def __init__(self, name, pjsua_args, transaction, tcp=False): -+ def __init__(self, name, pjsua_args, transaction, tcp=False, pj_config=""): - self.name = name - self.inst_param = cfg.InstanceParam("pjsua", pjsua_args) - self.transaction = transaction - self.tcp=tcp -+ self.pj_config=pj_config - - - ---- a/tests/pjsua/mod_recvfrom.py -+++ b/tests/pjsua/mod_recvfrom.py -@@ -18,10 +18,20 @@ def test_func(test): - local_port=srv_port, - tcp=cfg_file.recvfrom_cfg.tcp) - -+ config = pjsua.get_config(cfg_file.recvfrom_cfg.pj_config) -+ print "Config : " + config -+ - last_cseq = 0 - last_method = "" - last_call_id = "" - for t in cfg_file.recvfrom_cfg.transaction: -+ # Check if transaction requires configuration -+ if t.pj_config != "": -+ r = re.compile(t.pj_config, re.I) -+ if r.search(config) == None: -+ print "Configuration : " + t.pj_config + " not found, skipping" -+ continue -+ - # Print transaction title - if t.title != "": - dlg.trace(t.title) ---- a/tests/pjsua/run.py -+++ b/tests/pjsua/run.py -@@ -249,6 +249,10 @@ class Expect(threading.Thread): - time.sleep(0.01) - return None - -+ def get_config(self, key_config): -+ self.send("dd") -+ line = self.expect(key_config); -+ return line - - def sync_stdout(self): - if not self.use_telnet: ---- a/tests/pjsua/scripts-recvfrom/215_reg_good_multi_ok.py -+++ b/tests/pjsua/scripts-recvfrom/215_reg_good_multi_ok.py -@@ -14,16 +14,27 @@ req1 = sip.RecvfromTransaction("Initial - expect="SIP/2.0 401" - ) - --req2 = sip.RecvfromTransaction("Registration retry with auth", 200, -+req2 = sip.RecvfromTransaction("Registration retry with auth (not allowed multiple auth)", 200, - include=["REGISTER sip", -- # Must only have 1 Auth hdr since #2887 - "Authorization:", # [\\s\\S]+Authorization:" - "realm=\"python1\"", # "realm=\"python2\"", - "username=\"theuser1\"", # "username=\"theuser2\"", - "nonce=\"1234\"", # "nonce=\"6789\"", - "response="], -- expect="registration success" -+ expect="registration success", -+ pj_config="PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER.*: 0" - ) - -+req3 = sip.RecvfromTransaction("Registration retry with auth (allowed multiple auth)", 200, -+ include=["REGISTER sip", -+ "Authorization:[\\s\\S]+Authorization:", # Must have 2 Auth hdrs -+ "realm=\"python1\"", "realm=\"python2\"", -+ "username=\"theuser1\"", "username=\"theuser2\"", -+ "nonce=\"1234\"", "nonce=\"6789\"", -+ "response="], -+ expect="registration success", -+ pj_config="PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER.*: 1" -+ ) -+ - recvfrom_cfg = sip.RecvfromCfg("Multiple authentication challenges", -- pjsua, [req1, req2]) -+ pjsua, [req1, req2, req3], pj_config="PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER") diff --git a/libs/pjproject/patches/0200-potential-buffer-overflow-in-pjlib-scanner-and-pjmedia.patch b/libs/pjproject/patches/0200-potential-buffer-overflow-in-pjlib-scanner-and-pjmedia.patch deleted file mode 100644 index ebe92b6..0000000 --- a/libs/pjproject/patches/0200-potential-buffer-overflow-in-pjlib-scanner-and-pjmedia.patch +++ /dev/null @@ -1,297 +0,0 @@ -From c4d34984ec92b3d5252a7d5cddd85a1d3a8001ae Mon Sep 17 00:00:00 2001 -From: sauwming -Date: Mon, 3 Oct 2022 08:07:22 +0800 -Subject: [PATCH] Merge pull request from GHSA-fq45-m3f7-3mhj - -* Initial patch - -* Use 'pj_scan_is_eof(scanner)' - -Co-authored-by: Aaron Lichtman - -* Use 'pj_scan_is_eof(scanner)' - -Co-authored-by: Aaron Lichtman - -* Use 'pj_scan_is_eof(scanner)' - -Co-authored-by: Aaron Lichtman - -* Use `!pj_scan_is_eof` instead of manually checking `scanner->curptr < scanner->end` - -Co-authored-by: Maksim Mukosey - -* Update pjlib-util/src/pjlib-util/scanner.c - -Co-authored-by: Aaron Lichtman - -* Update pjlib-util/src/pjlib-util/scanner.c - -Co-authored-by: Aaron Lichtman - -* Update pjlib-util/src/pjlib-util/scanner.c - -Co-authored-by: Aaron Lichtman - -* Revert '>=' back to '>' in pj_scan_stricmp_alnum() - -* Fix error compiles. - -Co-authored-by: Nanang Izzuddin -Co-authored-by: Aaron Lichtman -Co-authored-by: Maksim Mukosey ---- - pjlib-util/src/pjlib-util/scanner.c | 41 +++++++++++++++++++---------- - pjmedia/src/pjmedia/rtp.c | 11 +++++--- - pjmedia/src/pjmedia/sdp.c | 24 ++++++++++------- - 3 files changed, 48 insertions(+), 28 deletions(-) - ---- a/pjlib-util/src/pjlib-util/scanner.c -+++ b/pjlib-util/src/pjlib-util/scanner.c -@@ -195,7 +195,13 @@ PJ_DEF(void) pj_scan_skip_whitespace( pj - - PJ_DEF(void) pj_scan_skip_line( pj_scanner *scanner ) - { -- char *s = pj_memchr(scanner->curptr, '\n', scanner->end - scanner->curptr); -+ char *s; -+ -+ if (pj_scan_is_eof(scanner)) { -+ return; -+ } -+ -+ s = pj_memchr(scanner->curptr, '\n', scanner->end - scanner->curptr); - if (!s) { - scanner->curptr = scanner->end; - } else { -@@ -264,8 +270,7 @@ PJ_DEF(void) pj_scan_get( pj_scanner *sc - - pj_assert(pj_cis_match(spec,0)==0); - -- /* EOF is detected implicitly */ -- if (!pj_cis_match(spec, *s)) { -+ if (pj_scan_is_eof(scanner) || !pj_cis_match(spec, *s)) { - pj_scan_syntax_err(scanner); - return; - } -@@ -299,8 +304,7 @@ PJ_DEF(void) pj_scan_get_unescape( pj_sc - /* Must not match character '%' */ - pj_assert(pj_cis_match(spec,'%')==0); - -- /* EOF is detected implicitly */ -- if (!pj_cis_match(spec, *s) && *s != '%') { -+ if (pj_scan_is_eof(scanner) || !pj_cis_match(spec, *s) && *s != '%') { - pj_scan_syntax_err(scanner); - return; - } -@@ -436,7 +440,9 @@ PJ_DEF(void) pj_scan_get_n( pj_scanner * - - scanner->curptr += N; - -- if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && scanner->skip_ws) { -+ if (!pj_scan_is_eof(scanner) && -+ PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && scanner->skip_ws) -+ { - pj_scan_skip_whitespace(scanner); - } - } -@@ -467,15 +473,16 @@ PJ_DEF(int) pj_scan_get_char( pj_scanner - - PJ_DEF(void) pj_scan_get_newline( pj_scanner *scanner ) - { -- if (!PJ_SCAN_IS_NEWLINE(*scanner->curptr)) { -+ if (pj_scan_is_eof(scanner) || !PJ_SCAN_IS_NEWLINE(*scanner->curptr)) { - pj_scan_syntax_err(scanner); - return; - } - -+ /* We have checked scanner->curptr validity above */ - if (*scanner->curptr == '\r') { - ++scanner->curptr; - } -- if (*scanner->curptr == '\n') { -+ if (!pj_scan_is_eof(scanner) && *scanner->curptr == '\n') { - ++scanner->curptr; - } - -@@ -520,7 +527,9 @@ PJ_DEF(void) pj_scan_get_until( pj_scann - - scanner->curptr = s; - -- if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) { -+ if (!pj_scan_is_eof(scanner) && PJ_SCAN_IS_PROBABLY_SPACE(*s) && -+ scanner->skip_ws) -+ { - pj_scan_skip_whitespace(scanner); - } - } -@@ -544,7 +553,9 @@ PJ_DEF(void) pj_scan_get_until_ch( pj_sc - - scanner->curptr = s; - -- if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) { -+ if (!pj_scan_is_eof(scanner) && PJ_SCAN_IS_PROBABLY_SPACE(*s) && -+ scanner->skip_ws) -+ { - pj_scan_skip_whitespace(scanner); - } - } -@@ -570,7 +581,9 @@ PJ_DEF(void) pj_scan_get_until_chr( pj_s - - scanner->curptr = s; - -- if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) { -+ if (!pj_scan_is_eof(scanner) && PJ_SCAN_IS_PROBABLY_SPACE(*s) && -+ scanner->skip_ws) -+ { - pj_scan_skip_whitespace(scanner); - } - } -@@ -585,7 +598,9 @@ PJ_DEF(void) pj_scan_advance_n( pj_scann - - scanner->curptr += N; - -- if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && skip_ws) { -+ if (!pj_scan_is_eof(scanner) && -+ PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && skip_ws) -+ { - pj_scan_skip_whitespace(scanner); - } - } -@@ -636,5 +651,3 @@ PJ_DEF(void) pj_scan_restore_state( pj_s - scanner->line = state->line; - scanner->start_line = state->start_line; - } -- -- ---- a/pjmedia/src/pjmedia/rtp.c -+++ b/pjmedia/src/pjmedia/rtp.c -@@ -188,6 +188,11 @@ PJ_DEF(pj_status_t) pjmedia_rtp_decode_r - /* Payload is located right after header plus CSRC */ - offset = sizeof(pjmedia_rtp_hdr) + ((*hdr)->cc * sizeof(pj_uint32_t)); - -+ /* Check that offset is less than packet size */ -+ if (offset >= pkt_len) { -+ return PJMEDIA_RTP_EINLEN; -+ } -+ - /* Decode RTP extension. */ - if ((*hdr)->x) { - if (offset + sizeof (pjmedia_rtp_ext_hdr) > (unsigned)pkt_len) -@@ -202,8 +207,8 @@ PJ_DEF(pj_status_t) pjmedia_rtp_decode_r - dec_hdr->ext_len = 0; - } - -- /* Check that offset is less than packet size */ -- if (offset > pkt_len) -+ /* Check again that offset is still less than packet size */ -+ if (offset >= pkt_len) - return PJMEDIA_RTP_EINLEN; - - /* Find and set payload. */ -@@ -393,5 +398,3 @@ void pjmedia_rtp_seq_update( pjmedia_rtp - seq_status->status.value = st.status.value; - } - } -- -- ---- a/pjmedia/src/pjmedia/sdp.c -+++ b/pjmedia/src/pjmedia/sdp.c -@@ -983,13 +983,13 @@ static void parse_version(pj_scanner *sc - ctx->last_error = PJMEDIA_SDP_EINVER; - - /* check equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if (scanner->curptr+1 >= scanner->end || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return; - } - - /* check version is 0 */ -- if (*(scanner->curptr+2) != '0') { -+ if (scanner->curptr+2 >= scanner->end || *(scanner->curptr+2) != '0') { - on_scanner_error(scanner); - return; - } -@@ -1006,7 +1006,7 @@ static void parse_origin(pj_scanner *sca - ctx->last_error = PJMEDIA_SDP_EINORIGIN; - - /* check equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if (scanner->curptr+1 >= scanner->end || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return; - } -@@ -1052,7 +1052,7 @@ static void parse_time(pj_scanner *scann - ctx->last_error = PJMEDIA_SDP_EINTIME; - - /* check equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if (scanner->curptr+1 >= scanner->end || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return; - } -@@ -1080,7 +1080,7 @@ static void parse_generic_line(pj_scanne - ctx->last_error = PJMEDIA_SDP_EINSDP; - - /* check equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if ((scanner->curptr+1 >= scanner->end) || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return; - } -@@ -1149,7 +1149,7 @@ static void parse_media(pj_scanner *scan - ctx->last_error = PJMEDIA_SDP_EINMEDIA; - - /* check the equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if (scanner->curptr+1 >= scanner->end || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return; - } -@@ -1164,6 +1164,10 @@ static void parse_media(pj_scanner *scan - /* port */ - pj_scan_get(scanner, &cs_token, &str); - med->desc.port = (unsigned short)pj_strtoul(&str); -+ if (pj_scan_is_eof(scanner)) { -+ on_scanner_error(scanner); -+ return; -+ } - if (*scanner->curptr == '/') { - /* port count */ - pj_scan_get_char(scanner); -@@ -1175,7 +1179,7 @@ static void parse_media(pj_scanner *scan - } - - if (pj_scan_get_char(scanner) != ' ') { -- PJ_THROW(SYNTAX_ERROR); -+ on_scanner_error(scanner); - } - - /* transport */ -@@ -1183,7 +1187,7 @@ static void parse_media(pj_scanner *scan - - /* format list */ - med->desc.fmt_count = 0; -- while (*scanner->curptr == ' ') { -+ while (scanner->curptr < scanner->end && *scanner->curptr == ' ') { - pj_str_t fmt; - - pj_scan_get_char(scanner); -@@ -1223,7 +1227,7 @@ static pjmedia_sdp_attr *parse_attr( pj_ - attr = PJ_POOL_ALLOC_T(pool, pjmedia_sdp_attr); - - /* check equal sign */ -- if (*(scanner->curptr+1) != '=') { -+ if (scanner->curptr+1 >= scanner->end || *(scanner->curptr+1) != '=') { - on_scanner_error(scanner); - return NULL; - } -@@ -1242,7 +1246,7 @@ static pjmedia_sdp_attr *parse_attr( pj_ - pj_scan_get_char(scanner); - - /* get value */ -- if (*scanner->curptr != '\r' && *scanner->curptr != '\n') { -+ if (!pj_scan_is_eof(scanner) && *scanner->curptr != '\r' && *scanner->curptr != '\n') { - pj_scan_get_until_chr(scanner, "\r\n", &attr->value); - } else { - attr->value.ptr = NULL; diff --git a/libs/pjproject/patches/0201-potential-stack-buffer-overflow-when-parsing-message-as-a-STUN-client.patch b/libs/pjproject/patches/0201-potential-stack-buffer-overflow-when-parsing-message-as-a-STUN-client.patch deleted file mode 100644 index d66b773..0000000 --- a/libs/pjproject/patches/0201-potential-stack-buffer-overflow-when-parsing-message-as-a-STUN-client.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 450baca94f475345542c6953832650c390889202 Mon Sep 17 00:00:00 2001 -From: sauwming -Date: Tue, 7 Jun 2022 12:00:13 +0800 -Subject: [PATCH] Merge pull request from GHSA-26j7-ww69-c4qj - ---- - pjlib-util/src/pjlib-util/stun_simple.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - ---- a/pjlib-util/src/pjlib-util/stun_simple.c -+++ b/pjlib-util/src/pjlib-util/stun_simple.c -@@ -54,6 +54,7 @@ PJ_DEF(pj_status_t) pjstun_parse_msg( vo - { - pj_uint16_t msg_type, msg_len; - char *p_attr; -+ int attr_max_cnt = PJ_ARRAY_SIZE(msg->attr); - - PJ_CHECK_STACK(); - -@@ -83,7 +84,7 @@ PJ_DEF(pj_status_t) pjstun_parse_msg( vo - msg->attr_count = 0; - p_attr = (char*)buf + sizeof(pjstun_msg_hdr); - -- while (msg_len > 0) { -+ while (msg_len > 0 && msg->attr_count < attr_max_cnt) { - pjstun_attr_hdr **attr = &msg->attr[msg->attr_count]; - pj_uint32_t len; - pj_uint16_t attr_type; -@@ -111,6 +112,10 @@ PJ_DEF(pj_status_t) pjstun_parse_msg( vo - p_attr += len; - ++msg->attr_count; - } -+ if (msg->attr_count == attr_max_cnt) { -+ PJ_LOG(4, (THIS_FILE, "Warning: max number attribute %d reached.", -+ attr_max_cnt)); -+ } - - return PJ_SUCCESS; - } From 945b7ea1f0ba297c51753cf625a67923a231da10 Mon Sep 17 00:00:00 2001 From: Sebastian Kemper Date: Wed, 7 Jun 2023 23:51:43 +0200 Subject: [PATCH 2/2] asterisk: bump to 20.3.0 - bump to 20.3.0 - new modules: app-broadcast, app-if, app-signal, func-export, res-pjsip-aoc and res-pjsip-rfc3329 - remove "--without-vpb", not available anymore - add configuration file for res-http-media-cache - drop libsrtp2 from res-pjproject dependencies, see changes in pjproject package - refresh patches - add upstream patch 180-res_crypto.c-Avoid-using-the-non-portable-ALLPERMS-m.patch to fix build [1] [1] https://github.com/asterisk/asterisk/issues/149 Signed-off-by: Sebastian Kemper --- net/asterisk/Makefile | 23 +++++++++---- .../030-GNU-GLOB-exts-only-on-glibc.patch | 4 +-- net/asterisk/patches/130-eventfd.patch | 2 +- .../patches/140-use-default-lua.patch | 2 +- ...id-using-the-non-portable-ALLPERMS-m.patch | 33 +++++++++++++++++++ 5 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 net/asterisk/patches/180-res_crypto.c-Avoid-using-the-non-portable-ALLPERMS-m.patch diff --git a/net/asterisk/Makefile b/net/asterisk/Makefile index 7970560..d156d52 100644 --- a/net/asterisk/Makefile +++ b/net/asterisk/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=asterisk -PKG_VERSION:=20.0.1 +PKG_VERSION:=20.3.0 PKG_RELEASE:=1 PKG_SOURCE:=asterisk-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.asterisk.org/pub/telephony/asterisk/releases -PKG_HASH:=52ae561893553f6cdaf3b295182f5d55dc8b950d210356a19708775cabe20085 +PKG_HASH:=2e70b4bb40114966c6572eae38b5106b588a7a759d41f1c90a6032407dd60463 PKG_BUILD_DEPENDS:=libxml2/host @@ -47,6 +47,7 @@ MODULES_AVAILABLE:= \ app-blind-transfer \ app-bridgeaddchan \ app-bridgewait \ + app-broadcast \ app-celgenuserevent \ app-chanisavail \ app-channelredirect \ @@ -65,6 +66,7 @@ MODULES_AVAILABLE:= \ app-flash \ app-followme \ app-getcpeid \ + app-if \ app-ivrdemo \ app-mf \ app-milliwatt \ @@ -86,6 +88,7 @@ MODULES_AVAILABLE:= \ app-senddtmf \ app-sendtext \ app-sf \ + app-signal \ app-skel \ app-sms \ app-softhangup \ @@ -180,6 +183,7 @@ MODULES_AVAILABLE:= \ func-enum \ func-env \ func-evalexten \ + func-export \ func-extstate \ func-frame-drop \ func-frame-trace \ @@ -283,8 +287,10 @@ MODULES_AVAILABLE:= \ res-mwi-external-ami \ res-parking \ res-phoneprov \ + res-pjsip-aoc \ res-pjsip-geolocation \ res-pjsip-phoneprov \ + res-pjsip-rfc3329 \ res-pjsip-stir-shaken \ res-pjproject \ res-pktccops \ @@ -594,7 +600,6 @@ CONFIGURE_ARGS+= \ $(if $(CONFIG_PACKAGE_$(PKG_NAME)-format-ogg-vorbis),--with-vorbis="$(STAGING_DIR)/usr",--without-vorbis) \ $(if $(CONFIG_PACKAGE_$(PKG_NAME)-app-voicemail-imap),--with-imap=system,--without-imap) \ --without-uriparser \ - --without-vpb \ --with-z="$(STAGING_DIR)/usr" ifeq ($(CONFIG_PACKAGE_$(PKG_NAME)-codec-speex)$(CONFIG_PACKAGE_$(PKG_NAME)-format-ogg-speex)$(CONFIG_PACKAGE_$(PKG_NAME)-func-speex),) @@ -621,7 +626,7 @@ CONFIGURE_ARGS+= \ --with-ogg="$(STAGING_DIR)/usr" endif -ifeq ($(CONFIG_PACKAGE_$(PKG_NAME)-res-pjproject)$(CONFIG_PACKAGE_$(PKG_NAME)-res-srtp),) +ifeq ($(CONFIG_PACKAGE_$(PKG_NAME)-res-srtp),) CONFIGURE_ARGS+= \ --without-srtp else @@ -782,6 +787,7 @@ $(eval $(call BuildAsteriskModule,app-authenticate,Authenticate commands,Authent $(eval $(call BuildAsteriskModule,app-blind-transfer,Blind transfer,Redirects all channels currently bridged to the caller channel to a specified destination.,,,app_blind_transfer,,)) $(eval $(call BuildAsteriskModule,app-bridgeaddchan,Bridge add channel,Bridge-add-channel application.,,,app_bridgeaddchan,,)) $(eval $(call BuildAsteriskModule,app-bridgewait,Holding bridge,Application to place a channel into a holding bridge.,+$(PKG_NAME)-bridge-holding,,app_bridgewait,,)) +$(eval $(call BuildAsteriskModule,app-broadcast,Channel audio broadcasting,Channel Audio Broadcasting.,,,app_broadcast,,)) $(eval $(call BuildAsteriskModule,app-celgenuserevent,User-defined CEL event,Generate a user defined CEL event.,,,app_celgenuserevent,,)) $(eval $(call BuildAsteriskModule,app-chanisavail,Channel availability check,Check channel availability.,,,app_chanisavail,,)) $(eval $(call BuildAsteriskModule,app-channelredirect,Redirect a channel,Redirects a given channel to a dialplan target.,,,app_channelredirect,,)) @@ -800,6 +806,7 @@ $(eval $(call BuildAsteriskModule,app-festival,Simple festival interface,Simple $(eval $(call BuildAsteriskModule,app-flash,Flash channel,Flash channel application.,+$(PKG_NAME)-chan-dahdi,,app_flash,,)) $(eval $(call BuildAsteriskModule,app-followme,Find-me/follow-me,Find-Me/Follow-Me application.,,followme.conf,app_followme,,)) $(eval $(call BuildAsteriskModule,app-getcpeid,Get ADSI CPE ID,Get ADSI CPE ID.,+asterisk-res-adsi,,app_getcpeid,,)) +$(eval $(call BuildAsteriskModule,app-if,If branch and conditional execution,If Branch and Conditional Execution.,,,app_if,,)) $(eval $(call BuildAsteriskModule,app-ivrdemo,IVR demo,IVR demo application.,,,app_ivrdemo,,)) $(eval $(call BuildAsteriskModule,app-mf,MF digits,Send MF digits Application.,,,app_mf,,)) $(eval $(call BuildAsteriskModule,app-milliwatt,Digital milliwatt [mu-law] test app,Digital milliwatt test application.,,,app_milliwatt,,)) @@ -821,6 +828,7 @@ $(eval $(call BuildAsteriskModule,app-sayunixtime,Say Unix time,Say time.,,,app_ $(eval $(call BuildAsteriskModule,app-senddtmf,Send DTMF digits,Send DTMF digits application.,,,app_senddtmf,,)) $(eval $(call BuildAsteriskModule,app-sendtext,Send text,Send text applications.,,,app_sendtext,,)) $(eval $(call BuildAsteriskModule,app-sf,SF Sender and Receiver Applications,SF Sender and Receiver Applications.,,,app_sf,,)) +$(eval $(call BuildAsteriskModule,app-signal,Channel signaling,Channel Signaling Applications.,,,app_signal,,)) $(eval $(call BuildAsteriskModule,app-skel,Skeleton [sample],Skeleton application.,,app_skel.conf,app_skel,,)) $(eval $(call BuildAsteriskModule,app-sms,SMS,SMS/PSTN handler.,,,app_sms,,)) $(eval $(call BuildAsteriskModule,app-softhangup,Hang up requested channel,Hangs up the requested channel.,,,app_softhangup,,)) @@ -915,6 +923,7 @@ $(eval $(call BuildAsteriskModule,func-dialplan,Dialplan context/extension/prior $(eval $(call BuildAsteriskModule,func-enum,ENUM,ENUM related dialplan functions.,,enum.conf,func_enum,,)) $(eval $(call BuildAsteriskModule,func-env,Environment functions,Environment/filesystem dialplan functions.,,,func_env,,)) $(eval $(call BuildAsteriskModule,func-evalexten,Extension evaluation,Extension evaluation functions.,,,func_evalexten,,)) +$(eval $(call BuildAsteriskModule,func-export,Export function,Set variables and functions on other channels.,,,func_export,,)) $(eval $(call BuildAsteriskModule,func-extstate,Hinted extension state,Gets the state of an extension in the dialplan.,,,func_extstate,,)) $(eval $(call BuildAsteriskModule,func-frame-drop,Frame drop,Function to drop frames on a channel.,,,func_frame_drop,,)) $(eval $(call BuildAsteriskModule,func-frame-trace,Frame trace for internal ast_frame debugging,Frame trace for internal ast_frame debugging.,,,func_frame_trace,,)) @@ -1005,7 +1014,7 @@ $(eval $(call BuildAsteriskModule,res-format-attr-siren14,Siren14 format attribu $(eval $(call BuildAsteriskModule,res-format-attr-siren7,Siren7 format attribute module,Siren7 format attribute module.,,,res_format_attr_siren7,,)) $(eval $(call BuildAsteriskModule,res-format-attr-vp8,VP8 format attribute module,VP8 format attribute module.,,,res_format_attr_vp8,,)) $(eval $(call BuildAsteriskModule,res-geolocation,Geolocation,Geolocation support.,@ASTERISK_LIBXSLT_SUPPORT,geolocation.conf,res_geolocation,,)) -$(eval $(call BuildAsteriskModule,res-http-media-cache,HTTP media cache backend,HTTP media cache backend.,+$(PKG_NAME)-curl,,res_http_media_cache,,)) +$(eval $(call BuildAsteriskModule,res-http-media-cache,HTTP media cache backend,HTTP media cache backend.,+$(PKG_NAME)-curl,res_http_media_cache.conf,res_http_media_cache,,)) $(eval $(call BuildAsteriskModule,res-http-websocket,HTTP websocket,HTTP WebSocket support.,,,res_http_websocket,,)) $(eval $(call BuildAsteriskModule,res-limit,Resource limits,Resource limits.,,,res_limit,,)) $(eval $(call BuildAsteriskModule,res-manager-devicestate,Device state topic forwarder,Manager device state topic forwarder.,,,res_manager_devicestate,,)) @@ -1018,10 +1027,12 @@ $(eval $(call BuildAsteriskModule,res-mwi-external,Core external MWI resource,Co $(eval $(call BuildAsteriskModule,res-mwi-external-ami,AMI for external MWI,AMI support for external MWI.,+$(PKG_NAME)-res-mwi-external,,res_mwi_external_ami,,)) $(eval $(call BuildAsteriskModule,res-parking,Phone Parking,Call parking resource.,+$(PKG_NAME)-bridge-holding,res_parking.conf,res_parking,,)) $(eval $(call BuildAsteriskModule,res-phoneprov,Phone Provisioning,HTTP phone provisioning.,,phoneprov.conf,res_phoneprov,,)) +$(eval $(call BuildAsteriskModule,res-pjsip-aoc,PJSIP AOC,PJSIP AOC Support.,+asterisk-pjsip +asterisk-res-pjproject,,res_pjsip_aoc,,)) $(eval $(call BuildAsteriskModule,res-pjsip-geolocation,PJSIP Geolocation,PJSIP Geolocation support.,+asterisk-pjsip +asterisk-res-geolocation,,res_pjsip_geolocation,,)) $(eval $(call BuildAsteriskModule,res-pjsip-phoneprov,PJSIP Phone Provisioning,PJSIP phone provisioning.,+$(PKG_NAME)-pjsip +$(PKG_NAME)-res-phoneprov,,res_pjsip_phoneprov_provider,,)) +$(eval $(call BuildAsteriskModule,res-pjsip-rfc3329,PJSIP RFC3329,PJSIP RFC3329 Support (partial).,+asterisk-pjsip +asterisk-res-pjproject,,res_pjsip_rfc3329,,)) $(eval $(call BuildAsteriskModule,res-pjsip-stir-shaken,PJSIP STIR/SHAKEN resource module,PJSIP STIR/SHAKEN resource module.,+$(PKG_NAME)-pjsip +$(PKG_NAME)-res-stir-shaken,,res_pjsip_stir_shaken,,)) -$(eval $(call BuildAsteriskModule,res-pjproject,Bridge PJPROJECT to Asterisk logging,PJProject log and utility support.,+asterisk-res-sorcery +libpj +libpjlib-util +libpjmedia +libpjmedia +libpjnath +libpjsip-simple +libpjsip-ua +libpjsip +libpjsua +libpjsua2 +libsrtp2,pjproject.conf,res_pjproject,,)) +$(eval $(call BuildAsteriskModule,res-pjproject,Bridge PJPROJECT to Asterisk logging,PJProject log and utility support.,+asterisk-res-sorcery +libpj +libpjlib-util +libpjmedia +libpjmedia +libpjnath +libpjsip-simple +libpjsip-ua +libpjsip +libpjsua +libpjsua2,pjproject.conf,res_pjproject,,)) $(eval $(call BuildAsteriskModule,res-pktccops,PktcCOPS manager for MGCP,PktcCOPS manager for MGCP.,,res_pktccops.conf,res_pktccops,,)) $(eval $(call BuildAsteriskModule,res-prometheus,Prometheus resource module,Prometheus resource module.,+libpjsip +libpjmedia +libpjnath +libpjsip-simple +libpjsip-ua +libpjsua +libpjsua2,prometheus.conf,res_prometheus,,)) $(eval $(call BuildAsteriskModule,res-realtime,RealTime CLI,Realtime data lookup/rewrite.,,,res_realtime,,)) diff --git a/net/asterisk/patches/030-GNU-GLOB-exts-only-on-glibc.patch b/net/asterisk/patches/030-GNU-GLOB-exts-only-on-glibc.patch index f6289a6..0dad203 100644 --- a/net/asterisk/patches/030-GNU-GLOB-exts-only-on-glibc.patch +++ b/net/asterisk/patches/030-GNU-GLOB-exts-only-on-glibc.patch @@ -1,6 +1,6 @@ --- a/res/ael/ael.flex +++ b/res/ael/ael.flex -@@ -601,7 +601,7 @@ includes { STORE_POS; return KW_INCLUDES +@@ -598,7 +598,7 @@ includes { STORE_POS; return KW_INCLUDES snprintf(fnamebuf2,sizeof(fnamebuf2), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, fnamebuf); ast_copy_string(fnamebuf,fnamebuf2,sizeof(fnamebuf)); } @@ -11,7 +11,7 @@ glob_ret = glob(fnamebuf, GLOB_NOMAGIC|GLOB_BRACE, NULL, &globbuf); --- a/res/ael/ael_lex.c +++ b/res/ael/ael_lex.c -@@ -1982,7 +1982,7 @@ YY_RULE_SETUP +@@ -1966,7 +1966,7 @@ YY_RULE_SETUP snprintf(fnamebuf2,sizeof(fnamebuf2), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, fnamebuf); ast_copy_string(fnamebuf,fnamebuf2,sizeof(fnamebuf)); } diff --git a/net/asterisk/patches/130-eventfd.patch b/net/asterisk/patches/130-eventfd.patch index df22604..ba54c74 100644 --- a/net/asterisk/patches/130-eventfd.patch +++ b/net/asterisk/patches/130-eventfd.patch @@ -1,6 +1,6 @@ --- a/configure.ac +++ b/configure.ac -@@ -1255,7 +1255,7 @@ if test "${ac_cv_have_variable_fdset}x" +@@ -1256,7 +1256,7 @@ if test "${ac_cv_have_variable_fdset}x" fi AC_MSG_CHECKING([if we have usable eventfd support]) diff --git a/net/asterisk/patches/140-use-default-lua.patch b/net/asterisk/patches/140-use-default-lua.patch index af973d7..6d38d18 100644 --- a/net/asterisk/patches/140-use-default-lua.patch +++ b/net/asterisk/patches/140-use-default-lua.patch @@ -1,6 +1,6 @@ --- a/configure.ac +++ b/configure.ac -@@ -2599,7 +2599,7 @@ if test -z "$__opus_include" -o x"$__opu +@@ -2616,7 +2616,7 @@ if test -z "$__opus_include" -o x"$__opu fi AST_EXT_LIB_CHECK([OPUSFILE], [opusfile], [op_open_callbacks], [opus/opusfile.h], [], [$__opus_include]) diff --git a/net/asterisk/patches/180-res_crypto.c-Avoid-using-the-non-portable-ALLPERMS-m.patch b/net/asterisk/patches/180-res_crypto.c-Avoid-using-the-non-portable-ALLPERMS-m.patch new file mode 100644 index 0000000..ff801c6 --- /dev/null +++ b/net/asterisk/patches/180-res_crypto.c-Avoid-using-the-non-portable-ALLPERMS-m.patch @@ -0,0 +1,33 @@ +From 94c884d5b8afca96164852cfb29fc496bc5b9e0a Mon Sep 17 00:00:00 2001 +From: Sean Bright +Date: Mon, 5 Jun 2023 18:17:47 -0400 +Subject: [PATCH] res_crypto.c: Avoid using the non-portable ALLPERMS macro. + +ALLPERMS is not POSIX and it's trivial enough to not jump through +autoconf hoops to check for it. + +Fixes #149. +--- + res/res_crypto.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +--- a/res/res_crypto.c ++++ b/res/res_crypto.c +@@ -217,10 +217,15 @@ static struct ast_key *try_load_key(cons + return NULL; + } + ++ /* PERM_MASK is a bitwise OR of all possible file mode bits encoded in the ++ * `st_mode` member of `struct stat`. For POSIX compatible systems this ++ * will be 07777. */ ++#define PERM_MASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) ++ + /* only user read or read/write modes allowed */ + if (ktype == AST_KEY_PRIVATE && +- ((st.st_mode & ALLPERMS) & ~(S_IRUSR | S_IWUSR)) != 0) { +- ast_log(LOG_ERROR, "Private key file has bad permissions: %s: %#4o\n", ffname, st.st_mode & ALLPERMS); ++ ((st.st_mode & PERM_MASK) & ~(S_IRUSR | S_IWUSR)) != 0) { ++ ast_log(LOG_ERROR, "Private key file has bad permissions: %s: %#4o\n", ffname, st.st_mode & PERM_MASK); + fclose(f); + return NULL; + }