diff options
author | Guilhem Lettron <guilhem@barpilot.io> | 2019-11-30 03:51:40 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-12-04 23:24:06 +0900 |
commit | 2e22a54f4e085496088b77085f38b66532da59fb (patch) | |
tree | c3bc6bb24cafaae584504da112beb38d1b946695 /src/resolve/resolved-util.c | |
parent | b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0 (diff) | |
download | systemd-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.c | 36 |
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; +} |