Skip to content

Commit 89f947b

Browse files
[mid_]registrar: fix default flag values for lookup() and save()
The default values for unset flags were not properly set if any other flags were provided to the save()/lookup() functions. Fixes #3097
1 parent 1688087 commit 89f947b

File tree

6 files changed

+24
-7
lines changed

6 files changed

+24
-7
lines changed

lib/reg/lookup.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ lookup_rc lookup(struct sip_msg *req, udomain_t *d,
7373

7474
if (lookup_flags) {
7575
flags = lookup_flags->flags;
76-
ua_re = &lookup_flags->ua_re;
76+
if (lookup_flags->ua_re_is_set)
77+
ua_re = &lookup_flags->ua_re;
7778
max_latency = lookup_flags->max_latency;
7879
}
7980

@@ -509,6 +510,8 @@ int reg_fixup_lookup_flags(void** param)
509510
return -1;
510511
}
511512
*(p + re_len) = '/';
513+
514+
lookup_flags->ua_re_is_set = 1;
512515
}
513516

514517
/* max-ping-latency */

lib/reg/lookup.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ typedef enum _lookup_rc {
4848
struct lookup_flags {
4949
unsigned int flags;
5050
regex_t ua_re;
51+
char ua_re_is_set;
5152
int max_latency;
5253
};
5354

lib/reg/save_flags.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static str save_kv_flag_names[] = {
4747
STR_NULL
4848
};
4949

50-
int reg_fixup_save_flags(void** param)
50+
int reg_fixup_save_flags(void** param, struct save_flags *default_flags)
5151
{
5252
struct save_flags *save_flags;
5353
str flag_vals[SAVE_KV_FLAGS_NO];
@@ -59,9 +59,8 @@ int reg_fixup_save_flags(void** param)
5959
LM_ERR("out of pkg memory\n");
6060
return -1;
6161
}
62-
memset(save_flags, 0, sizeof *save_flags);
6362

64-
memset(flag_vals, 0, sizeof flag_vals);
63+
*save_flags = *default_flags;
6564

6665
if (fixup_named_flags(param, save_flag_names, save_kv_flag_names,
6766
flag_vals) < 0) {

lib/reg/save_flags.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,6 @@ struct save_flags {
5757
};
5858

5959
int reg_fixup_free_save_flags(void** param);
60-
int reg_fixup_save_flags(void** param);
60+
int reg_fixup_save_flags(void** param, struct save_flags *default_flags);
6161

6262
#endif

modules/mid_registrar/mid_registrar.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,13 @@ static int fix_out_expires(void **out_exp)
277277

278278
static int save_flags_fixup(void **param)
279279
{
280-
return reg_fixup_save_flags(param);
280+
struct save_flags default_flags;
281+
282+
memset(&default_flags, 0, sizeof default_flags);
283+
default_flags.cmatch.mode = CT_MATCH_NONE;
284+
default_flags.max_contacts = max_contacts;
285+
286+
return reg_fixup_save_flags(param, &default_flags);
281287
}
282288

283289
static int save_flags_fixup_free(void **param)

modules/registrar/reg_mod.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,15 @@ static int domain_fixup(void** param)
431431

432432
static int save_flags_fixup(void **param)
433433
{
434-
return reg_fixup_save_flags(param);
434+
struct save_flags default_flags;
435+
436+
memset(&default_flags, 0, sizeof default_flags);
437+
default_flags.cmatch.mode = CT_MATCH_NONE;
438+
default_flags.min_expires = min_expires;
439+
default_flags.max_expires = max_expires;
440+
default_flags.max_contacts = max_contacts;
441+
442+
return reg_fixup_save_flags(param, &default_flags);
435443
}
436444

437445
static int save_flags_fixup_free(void **param)

0 commit comments

Comments
 (0)