[sr-dev] git:master:a7588f38: db_mysql: database URL supports IPv6 address as hostname
Henning Westerholt
hw at skalatan.de
Mon Sep 9 21:52:04 CEST 2019
Module: kamailio
Branch: master
Commit: a7588f382605991bef4499de8c89b10a9468c8cf
URL: https://github.com/kamailio/kamailio/commit/a7588f382605991bef4499de8c89b10a9468c8cf
Author: Alexey Vasilyev <alexei.vasilyev at gmail.com>
Committer: Henning Westerholt <hw at skalatan.de>
Date: 2019-09-09T21:51:59+02:00
db_mysql: database URL supports IPv6 address as hostname
- changed parsing of db_url to accept IPv6 address for hostname
---
Modified: src/modules/db_mysql/my_uri.c
---
Diff: https://github.com/kamailio/kamailio/commit/a7588f382605991bef4499de8c89b10a9468c8cf.diff
Patch: https://github.com/kamailio/kamailio/commit/a7588f382605991bef4499de8c89b10a9468c8cf.patch
---
diff --git a/src/modules/db_mysql/my_uri.c b/src/modules/db_mysql/my_uri.c
index 48267ba95c..8ab819e3ed 100644
--- a/src/modules/db_mysql/my_uri.c
+++ b/src/modules/db_mysql/my_uri.c
@@ -96,12 +96,13 @@ static int parse_mysql_uri(struct my_uri* res, str* uri)
ST_USER_HOST, /* Username or hostname */
ST_PASS_PORT, /* Password or port part */
ST_HOST, /* Hostname part */
+ ST_HOST6, /* Hostname part IPv6 */
ST_PORT, /* Port part */
ST_DB /* Database part */
};
enum state st;
- int i;
+ int i, ipv6_flag=0;
const char* begin;
char* prev_token;
@@ -157,6 +158,11 @@ static int parse_mysql_uri(struct my_uri* res, str* uri)
begin = uri->s + i + 1;
break;
+ case '[':
+ st = ST_HOST6;
+ begin = uri->s + i + 1;
+ break;
+
case '/':
if (dupl_string(&res->host, begin, uri->s + i) < 0) goto err;
if (dupl_string(&res->database, uri->s + i + 1, uri->s + uri->len) < 0) goto err;
@@ -185,19 +191,33 @@ static int parse_mysql_uri(struct my_uri* res, str* uri)
case ST_HOST:
switch(uri->s[i]) {
+ case '[':
+ st = ST_HOST6;
+ begin = uri->s + i + 1;
+ break;
+
case ':':
st = ST_PORT;
- if (dupl_string(&res->host, begin, uri->s + i) < 0) goto err;
+ if (dupl_string(&res->host, begin, uri->s + i - ipv6_flag) < 0) goto err;
begin = uri->s + i + 1;
break;
case '/':
- if (dupl_string(&res->host, begin, uri->s + i) < 0) goto err;
+ if (dupl_string(&res->host, begin, uri->s + i - ipv6_flag) < 0) goto err;
if (dupl_string(&res->database, uri->s + i + 1, uri->s + uri->len) < 0) goto err;
return 0;
}
break;
+ case ST_HOST6:
+ switch(uri->s[i]) {
+ case ']':
+ ipv6_flag = 1;
+ st = ST_HOST;
+ break;
+ }
+ break;
+
case ST_PORT:
switch(uri->s[i]) {
case '/':
More information about the sr-dev
mailing list