Skip to content

Commit

Permalink
[mid_]registrar: fix default flag values for lookup() and save()
Browse files Browse the repository at this point in the history
The default values for unset flags were not properly set if any other flags
were provided to the save()/lookup() functions.

Fixes #3097

(cherry picked from commit 89f947b)
  • Loading branch information
rvlad-patrascu committed May 19, 2023
1 parent 4c1b9a5 commit 69f5f82
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 7 deletions.
5 changes: 4 additions & 1 deletion lib/reg/lookup.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ lookup_rc lookup(struct sip_msg *req, udomain_t *d,

if (lookup_flags) {
flags = lookup_flags->flags;
ua_re = &lookup_flags->ua_re;
if (lookup_flags->ua_re_is_set)
ua_re = &lookup_flags->ua_re;
max_latency = lookup_flags->max_latency;
}

Expand Down Expand Up @@ -509,6 +510,8 @@ int reg_fixup_lookup_flags(void** param)
return -1;
}
*(p + re_len) = '/';

lookup_flags->ua_re_is_set = 1;
}

/* max-ping-latency */
Expand Down
1 change: 1 addition & 0 deletions lib/reg/lookup.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ typedef enum _lookup_rc {
struct lookup_flags {
unsigned int flags;
regex_t ua_re;
char ua_re_is_set;
int max_latency;
};

Expand Down
5 changes: 2 additions & 3 deletions lib/reg/save_flags.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ static str save_kv_flag_names[] = {
STR_NULL
};

int reg_fixup_save_flags(void** param)
int reg_fixup_save_flags(void** param, struct save_flags *default_flags)
{
struct save_flags *save_flags;
str flag_vals[SAVE_KV_FLAGS_NO];
Expand All @@ -59,9 +59,8 @@ int reg_fixup_save_flags(void** param)
LM_ERR("out of pkg memory\n");
return -1;
}
memset(save_flags, 0, sizeof *save_flags);

memset(flag_vals, 0, sizeof flag_vals);
*save_flags = *default_flags;

if (fixup_named_flags(param, save_flag_names, save_kv_flag_names,
flag_vals) < 0) {
Expand Down
2 changes: 1 addition & 1 deletion lib/reg/save_flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,6 @@ struct save_flags {
};

int reg_fixup_free_save_flags(void** param);
int reg_fixup_save_flags(void** param);
int reg_fixup_save_flags(void** param, struct save_flags *default_flags);

#endif
8 changes: 7 additions & 1 deletion modules/mid_registrar/mid_registrar.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,13 @@ static int fix_out_expires(void **out_exp)

static int save_flags_fixup(void **param)
{
return reg_fixup_save_flags(param);
struct save_flags default_flags;

memset(&default_flags, 0, sizeof default_flags);
default_flags.cmatch.mode = CT_MATCH_NONE;
default_flags.max_contacts = max_contacts;

return reg_fixup_save_flags(param, &default_flags);
}

static int save_flags_fixup_free(void **param)
Expand Down
10 changes: 9 additions & 1 deletion modules/registrar/reg_mod.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,15 @@ static int domain_fixup(void** param)

static int save_flags_fixup(void **param)
{
return reg_fixup_save_flags(param);
struct save_flags default_flags;

memset(&default_flags, 0, sizeof default_flags);
default_flags.cmatch.mode = CT_MATCH_NONE;
default_flags.min_expires = min_expires;
default_flags.max_expires = max_expires;
default_flags.max_contacts = max_contacts;

return reg_fixup_save_flags(param, &default_flags);
}

static int save_flags_fixup_free(void **param)
Expand Down

0 comments on commit 69f5f82

Please sign in to comment.