diff options
author | Steven Barth <steven@midlink.org> | 2014-06-12 10:01:06 +0200 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2014-06-12 10:01:06 +0200 |
commit | ff3f9bb1a2421c02f53504b177ff35e366ed43ab (patch) | |
tree | cb8ff6a1eea58cae61e00b1995b5ebd23ebfcdb5 | |
parent | 6c93cef912cc3f9b0bd0805bd66289d72bc315e5 (diff) |
dhcpv4: use search domain instead of domain option
-rw-r--r-- | src/dhcpv4.c | 16 | ||||
-rw-r--r-- | src/dhcpv4.h | 1 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 4b69467..53e4682 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -362,14 +362,16 @@ static void handle_dhcpv4(void *addr, void *data, size_t len, dhcpv4_put(&reply, &cookie, DHCPV4_OPT_MTU, 2, &mtu); } - if (iface->search) { - char b[256]; - if (dn_expand(iface->search, iface->search + iface->search_len, - iface->search, b, sizeof(b)) > 0) - dhcpv4_put(&reply, &cookie, DHCPV4_OPT_DOMAIN, strlen(b), b); + if (iface->search && iface->search_len <= 255) { + dhcpv4_put(&reply, &cookie, DHCPV4_OPT_SEARCH_DOMAIN, + iface->search_len, iface->search); } else if (!res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) { - dhcpv4_put(&reply, &cookie, DHCPV4_OPT_DOMAIN, - strlen(_res.dnsrch[0]), _res.dnsrch[0]); + uint8_t search_buf[256]; + int len = dn_comp(_res.dnsrch[0], search_buf, + sizeof(search_buf), NULL, NULL); + if (len > 0) + dhcpv4_put(&reply, &cookie, DHCPV4_OPT_SEARCH_DOMAIN, + len, search_buf); } dhcpv4_put(&reply, &cookie, DHCPV4_OPT_ROUTER, 4, &ifaddr.sin_addr); diff --git a/src/dhcpv4.h b/src/dhcpv4.h index a31d8fe..57d52dc 100644 --- a/src/dhcpv4.h +++ b/src/dhcpv4.h @@ -51,6 +51,7 @@ enum dhcpv4_opt { DHCPV4_OPT_HOSTNAME = 10, DHCPV4_OPT_REQUEST = 17, DHCPV4_OPT_USER_CLASS = 77, + DHCPV4_OPT_SEARCH_DOMAIN = 119, DHCPV4_OPT_END = 255, }; |