Skip to content

Commit

Permalink
CacheDB: Allow "@" in URL "params" part
Browse files Browse the repository at this point in the history
(cherry picked from commit a6d16dd)
  • Loading branch information
liviuchircu committed Feb 7, 2025
1 parent 7d42129 commit e2eb015
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
12 changes: 10 additions & 2 deletions cachedb/cachedb_id.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ static int parse_cachedb_url(struct cachedb_id* id, const str* url)

enum state st;
unsigned int len, i, ipv6_flag=0, multi_hosts=0;
char* begin, *last_at;
char* begin, *last_at, *last_slash, *last_qm;
char* prev_token,*start_host=NULL,*start_prev=NULL,*ptr;

prev_token = 0;
Expand All @@ -112,7 +112,15 @@ static int parse_cachedb_url(struct cachedb_id* id, const str* url)
if (dupl_string(&id->initial_url,url->s,url->s+url->len) < 0)
goto err;

last_at = q_memrchr(url->s, '@', url->len);
last_slash = q_memrchr(url->s, '/', url->len);
last_qm = q_memrchr(url->s, '?', url->len);

/* ignore any '@' characters inside the "params" part */
if (last_qm || last_slash)
last_at = q_memrchr(url->s, '@',
last_slash ? (last_slash-url->s) : (last_qm-url->s));
else
last_at = q_memrchr(url->s, '@', url->len);

for(i = 0; i < len; i++) {
switch(st) {
Expand Down
13 changes: 13 additions & 0 deletions cachedb/test/test_cachedb.c
Original file line number Diff line number Diff line change
Expand Up @@ -927,4 +927,17 @@ static void test_cachedb_url(void)
ok(!strcmp(db->host, "h1,h2,h3:6379"));
ok(!strcmp(db->database, "d"));
ok(db->port == 0);

CDB_PARSE("mongodb://opensips-voip-cosmosdb:"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"@opensips-voip-cosmosdb.mongo.cosmos.azure.com:10255"
"/?ssl=true&replicaSet=opensipsdb&retrywrites=false"
"&maxIdleTimeMS=120000&appName=@opensips-voip-cosmosdb@");
ok(db->flags == 0);
ok(!strcmp(db->username, "opensips-voip-cosmosdb"));
ok(!strcmp(db->password, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
ok(!strcmp(db->host, "opensips-voip-cosmosdb.mongo.cosmos.azure.com"));
ok(db->port == 10255);
ok(!strcmp(db->extra_options, "ssl=true&replicaSet=opensipsdb&retrywrites=false&maxIdleTimeMS=120000&appName=@opensips-voip-cosmosdb@"));
ok(!db->database);
}

0 comments on commit e2eb015

Please sign in to comment.