summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-util.c
diff options
context:
space:
mode:
authorGuilhem Lettron <guilhem@barpilot.io>2019-11-30 03:51:40 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-12-04 23:24:06 +0900
commit2e22a54f4e085496088b77085f38b66532da59fb (patch)
treec3bc6bb24cafaae584504da112beb38d1b946695 /src/resolve/resolved-util.c
parentb7aa08ca15d0080bfbdc8820b8b9b617b550a0e0 (diff)
downloadsystemd-2e22a54f4e085496088b77085f38b66532da59fb.tar.gz
Implement SNI when using DNS-over-TLS
Some DNS providers need SNI to identify client. This can be used by adding #name to a DNS. Example: [Resolve] DNS=192.168.1.1#example.com
Diffstat (limited to 'src/resolve/resolved-util.c')
-rw-r--r--src/resolve/resolved-util.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/resolve/resolved-util.c b/src/resolve/resolved-util.c
new file mode 100644
index 0000000000..2f18f8c19d
--- /dev/null
+++ b/src/resolve/resolved-util.c
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "alloc-util.h"
+#include "in-addr-util.h"
+#include "macro.h"
+#include "resolved-util.h"
+
+int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name) {
+ _cleanup_free_ char *buf = NULL, *name = NULL;
+ const char *m;
+ int r;
+
+ assert(s);
+
+ m = strchr(s, '#');
+ if (m) {
+ name = strdup(m+1);
+ if (!name)
+ return -ENOMEM;
+
+ buf = strndup(s, m - s);
+ if (!buf)
+ return -ENOMEM;
+
+ s = buf;
+ }
+
+ r = in_addr_ifindex_from_string_auto(s, family, ret, ifindex);
+ if (r < 0)
+ return r;
+
+ if (server_name)
+ *server_name = TAKE_PTR(name);
+
+ return r;
+}