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
  • Loading branch information
rvlad-patrascu committed May 19, 2023
1 parent 1688087 commit 89f947b
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 89f947b

Please sign in to comment.