Module: kamailio
Branch: master
Commit: 57ed2639259f7116795f6214ca505cc86bb7ccb5
URL:
https://github.com/kamailio/kamailio/commit/57ed2639259f7116795f6214ca505cc…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2023-11-22T10:09:16+01:00
ims_ipsec_pcscf: do not change msg r-uri with ipsec_destroy() param
- only changing r-uri shortcut inside sip msg field can have side
effects, avoid it by providing the parameter to fill_contact()
- use core fixup function for handling config parameter for aor
---
Modified: src/modules/ims_ipsec_pcscf/cmd.c
Modified: src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
---
Diff:
https://github.com/kamailio/kamailio/commit/57ed2639259f7116795f6214ca505cc…
Patch:
https://github.com/kamailio/kamailio/commit/57ed2639259f7116795f6214ca505cc…
---
diff --git a/src/modules/ims_ipsec_pcscf/cmd.c b/src/modules/ims_ipsec_pcscf/cmd.c
index aa905b09a9b..69d1fccc502 100644
--- a/src/modules/ims_ipsec_pcscf/cmd.c
+++ b/src/modules/ims_ipsec_pcscf/cmd.c
@@ -162,7 +162,7 @@ static str get_www_auth_param(const char *param_name, str www_auth)
}
static int fill_contact(
- pcontact_info_t *ci, sip_msg_t *m, tm_cell_t *t, int sflags)
+ pcontact_info_t *ci, sip_msg_t *m, tm_cell_t *t, str *ruri, int sflags)
{
contact_body_t *cb = NULL;
struct via_body *vb = NULL;
@@ -183,8 +183,13 @@ static int fill_contact(
memset(&uri, 0, sizeof(struct sip_uri));
- if((sflags & IPSEC_DSTADDR_SEARCH) && m->dst_uri.s != NULL
- && m->dst_uri.len > 0) {
+ if(ruri != NULL && ruri->len > 0) {
+ suri.s = ruri->s;
+ suri.len = ruri->len;
+ LM_DBG("using param r-uri for contact filling: %.*s\n", suri.len,
+ suri.s);
+ } else if((sflags & IPSEC_DSTADDR_SEARCH) && m->dst_uri.s != NULL
+ && m->dst_uri.len > 0) {
suri = m->dst_uri;
LM_DBG("using dst uri for contact filling: %.*s\n", suri.len,
suri.s);
@@ -702,7 +707,7 @@ int ipsec_create(struct sip_msg *m, udomain_t *d, int _cflags)
t = tmb.t_gett();
}
// Find the contact
- if(fill_contact(&ci, m, t, _cflags) != 0) {
+ if(fill_contact(&ci, m, t, NULL, _cflags) != 0) {
LM_ERR("Error filling in contact data\n");
return ret;
}
@@ -860,7 +865,7 @@ int ipsec_forward(struct sip_msg *m, udomain_t *d, int _cflags)
//
// Find the contact
//
- if(fill_contact(&ci, m, t, _cflags) != 0) {
+ if(fill_contact(&ci, m, t, NULL, _cflags) != 0) {
LM_ERR("Error filling in contact data\n");
return ret;
}
@@ -1052,14 +1057,8 @@ int ipsec_destroy(struct sip_msg *m, udomain_t *d, str *uri)
t = tmb.t_gett();
}
- // Insert URI in SIP message
- if(uri != NULL) {
- m->first_line.u.request.uri.s = uri->s;
- m->first_line.u.request.uri.len = uri->len;
- }
-
// Find the contact
- if(fill_contact(&ci, m, t, 0) != 0) {
+ if(fill_contact(&ci, m, t, uri, 0) != 0) {
LM_ERR("Error filling in contact data\n");
return ret;
}
diff --git a/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
b/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
index 3709a78c610..1e25650e1bc 100644
--- a/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
+++ b/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
@@ -23,6 +23,7 @@
*/
#include "../../core/sr_module.h"
+#include "../../core/mod_fix.h"
#include "../../modules/tm/tm_load.h"
#include "../ims_usrloc_pcscf/usrloc.h"
@@ -459,24 +460,7 @@ static int unregister_fixup(void **param, int param_no)
if(param_no == 1) {
return domain_fixup(param, param_no);
} else {
- pv_elem_t *model = NULL;
- str s;
-
- /* convert to str */
- s.s = (char *)*param;
- s.len = strlen(s.s);
-
- model = NULL;
- if(s.len == 0) {
- LM_ERR("no param!\n");
- return E_CFG;
- }
- if(pv_parse_format(&s, &model) < 0 || model == NULL) {
- LM_ERR("wrong format [%s]!\n", s.s);
- return E_CFG;
- }
- *param = (void *)model;
- return 0;
+ return fixup_spve_all(param, param_no);
}
return E_CFG;
}
@@ -503,13 +487,11 @@ static int w_forward(struct sip_msg *_m, char *_d, char *_cflags)
static int w_destroy(struct sip_msg *_m, char *_d, char *_aor)
{
- pv_elem_t *model;
str aor;
if(_aor) {
- model = (pv_elem_t *)_aor;
- if(pv_printf_s(_m, model, &aor) < 0) {
- LM_ERR("error - cannot print the format\n");
+ if(fixup_get_svalue(_m, (gparam_t *)_aor, &aor) < 0) {
+ LM_ERR("failed to get aor parameter\n");
return -1;
}
LM_DBG("URI: %.*s\n", aor.len, aor.s);