[sr-dev] git:5.2:5a4debab: lib: database URL supports IPv6 address as hostname

Henning Westerholt hw at skalatan.de
Mon Sep 9 21:57:05 CEST 2019


Module: kamailio
Branch: 5.2
Commit: 5a4debabd3c6e997200947453503a972b9dcab0f
URL: https://github.com/kamailio/kamailio/commit/5a4debabd3c6e997200947453503a972b9dcab0f

Author: Alexey Vasilyev <alexei.vasilyev at gmail.com>
Committer: Henning Westerholt <hw at skalatan.de>
Date: 2019-09-09T21:53:21+02:00

lib: database URL supports IPv6 address as hostname

- changed parsing of db_url to accept IPv6 address for hostname

(cherry picked from commit 9e29e262f0107cedbf2e2d61d045b05c5a5fc410)

---

Modified: src/lib/srdb1/db_id.c

---

Diff:  https://github.com/kamailio/kamailio/commit/5a4debabd3c6e997200947453503a972b9dcab0f.diff
Patch: https://github.com/kamailio/kamailio/commit/5a4debabd3c6e997200947453503a972b9dcab0f.patch

---

diff --git a/src/lib/srdb1/db_id.c b/src/lib/srdb1/db_id.c
index ef985e52ad..8a43def2d9 100644
--- a/src/lib/srdb1/db_id.c
+++ b/src/lib/srdb1/db_id.c
@@ -100,12 +100,13 @@ static int parse_db_url(struct db_id* id, const str* url)
 		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;
-	unsigned int len, i, j, a, foundanother;
+	unsigned int len, i, j, a, foundanother, ipv6_flag=0;
 	const char* begin;
 	char* prev_token;
 
@@ -188,6 +189,11 @@ static int parse_db_url(struct db_id* id, const str* url)
 				begin = url->s + i + 1;
 				break;
 
+			case '[':
+				st = ST_HOST6;
+				begin = url->s + i + 1;
+				break;
+
 			case '/':
 				if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
 				if (dupl_string_name(&id->database, url->s + i + 1, url->s + len) < 0) goto err;
@@ -224,19 +230,33 @@ static int parse_db_url(struct db_id* id, const str* url)
 
 		case ST_HOST:
 			switch(url->s[i]) {
+			case '[':
+				st = ST_HOST6;
+				begin = url->s + i + 1;
+				break;
+
 			case ':':
 				st = ST_PORT;
-				if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
+				if (dupl_string(&id->host, begin, url->s + i - ipv6_flag) < 0) goto err;
 				begin = url->s + i + 1;
 				break;
 
 			case '/':
-				if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
+				if (dupl_string(&id->host, begin, url->s + i - ipv6_flag) < 0) goto err;
 				if (dupl_string_name(&id->database, url->s + i + 1, url->s + len) < 0) goto err;
 				return 0;
 			}
 			break;
 
+		case ST_HOST6:
+			switch(url->s[i]) {
+			case ']':
+				ipv6_flag = 1;
+				st = ST_HOST;
+				break;
+			}
+			break;
+
 		case ST_PORT:
 			switch(url->s[i]) {
 			case '/':




More information about the sr-dev mailing list