| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // Copyright 2018-present the CoreDHCP Authors. All rights reserved
- // This source code is licensed under the MIT license found in the
- // LICENSE file in the root directory of this source tree.
- package searchdomains
- // This is an searchdomains plugin that adds default DNS search domains.
- import (
- "github.com/coredhcp/coredhcp/handler"
- "github.com/coredhcp/coredhcp/logger"
- "github.com/coredhcp/coredhcp/plugins"
- "github.com/insomniacslk/dhcp/dhcpv4"
- "github.com/insomniacslk/dhcp/dhcpv6"
- "github.com/insomniacslk/dhcp/rfc1035label"
- )
- var log = logger.GetLogger("plugins/searchdomains")
- // Plugin wraps the default DNS search domain options.
- // Note that importing the plugin is not enough to use it: you have to
- // explicitly specify the intention to use it in the `config.yml` file, in the
- // plugins section. For searchdomains:
- //
- // server6:
- // listen: '[::]547'
- // - searchdomains: domain.a domain.b
- // - server_id: LL aa:bb:cc:dd:ee:ff
- // - file: "leases.txt"
- //
- var Plugin = plugins.Plugin{
- Name: "searchdomains",
- Setup6: setup6,
- Setup4: setup4,
- }
- // These are the DNS search domains that are set by the plugin.
- // Note that DHCPv4 and DHCPv6 options are totally independent.
- // If you need the same settings for both, you'll need to configure
- // this plugin once for the v4 and once for the v6 server.
- var v4SearchList []string
- var v6SearchList []string
- // copySlice creates a new copy of a string slice in memory.
- // This helps to ensure that downstream plugins can't corrupt
- // this plugin's configuration
- func copySlice(original []string) []string {
- copied := make([]string, len(original))
- copy(copied, original)
- return copied
- }
- func setup6(args ...string) (handler.Handler6, error) {
- v6SearchList = args
- log.Printf("Registered domain search list (DHCPv6) %s", v6SearchList)
- return domainSearchListHandler6, nil
- }
- func setup4(args ...string) (handler.Handler4, error) {
- v4SearchList = args
- log.Printf("Registered domain search list (DHCPv4) %s", v4SearchList)
- return domainSearchListHandler4, nil
- }
- func domainSearchListHandler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
- resp.UpdateOption(dhcpv6.OptDomainSearchList(&rfc1035label.Labels{
- Labels: copySlice(v6SearchList),
- }))
- return resp, false
- }
- func domainSearchListHandler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
- resp.UpdateOption(dhcpv4.OptDomainSearch(&rfc1035label.Labels{
- Labels: copySlice(v4SearchList),
- }))
- return resp, false
- }
|