From 94e21e69af4ffc6db84e66b736bcd6b9553a545d Mon Sep 17 00:00:00 2001
From: Eugene Burkov <e.burkov@adguard.com>
Date: Thu, 11 Mar 2021 14:01:48 +0300
Subject: [PATCH] Pull request: 2582 invalid hostname vol.3

Merge in DNS/adguard-home from 2582-zero-byte to master

Updates #2582.

Squashed commit of the following:

commit 88db23f26cd6ee9978310c7030f6866b9ef58785
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Mar 11 13:01:02 2021 +0300

    dhcpd: rm temporary workaround
---
 go.mod               |  2 +-
 go.sum               |  4 ++--
 internal/dhcpd/v4.go | 12 +-----------
 internal/dhcpd/v6.go |  3 ++-
 4 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/go.mod b/go.mod
index b007e7e3..e138ea44 100644
--- a/go.mod
+++ b/go.mod
@@ -16,7 +16,7 @@ require (
 	github.com/gobuffalo/packr/v2 v2.8.1 // indirect
 	github.com/google/go-cmp v0.5.5 // indirect
 	github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714
-	github.com/insomniacslk/dhcp v0.0.0-20210306224058-018caddcb1eb
+	github.com/insomniacslk/dhcp v0.0.0-20210310193751-cfd4d47082c2
 	github.com/kardianos/service v1.2.0
 	github.com/karrick/godirwalk v1.16.1 // indirect
 	github.com/lucas-clemente/quic-go v0.19.3
diff --git a/go.sum b/go.sum
index 9dd8b6c6..88e38993 100644
--- a/go.sum
+++ b/go.sum
@@ -216,8 +216,8 @@ github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Go
 github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/insomniacslk/dhcp v0.0.0-20210306224058-018caddcb1eb h1:IlbQi/Y9BmwqtsT+IfctERmRQcNsw4HvLAOSx16GseY=
-github.com/insomniacslk/dhcp v0.0.0-20210306224058-018caddcb1eb/go.mod h1:TKl4jN3Voofo4UJIicyNhWGp/nlQqQkFxmwIFTvBkKI=
+github.com/insomniacslk/dhcp v0.0.0-20210310193751-cfd4d47082c2 h1:NpTIlXznCStsY88jU+Gh1Dy5dt/jYV4z4uU8h2TUOt4=
+github.com/insomniacslk/dhcp v0.0.0-20210310193751-cfd4d47082c2/go.mod h1:TKl4jN3Voofo4UJIicyNhWGp/nlQqQkFxmwIFTvBkKI=
 github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
 github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
 github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
diff --git a/internal/dhcpd/v4.go b/internal/dhcpd/v4.go
index 38c0a90d..7d24699e 100644
--- a/internal/dhcpd/v4.go
+++ b/internal/dhcpd/v4.go
@@ -7,7 +7,6 @@ import (
 	"encoding/binary"
 	"fmt"
 	"net"
-	"strings"
 	"sync"
 	"time"
 
@@ -464,16 +463,7 @@ func (s *v4Server) processRequest(req, resp *dhcpv4.DHCPv4) (*Lease, bool) {
 	}
 
 	if lease.Expiry.Unix() != leaseExpireStatic {
-		// The trimming is required since some devices include trailing
-		// zero-byte in DHCP option length calculation.
-		//
-		// See https://github.com/AdguardTeam/AdGuardHome/issues/2582.
-		//
-		// TODO(e.burkov): Remove after the trimming for hostname option
-		// will be added into github.com/insomniacslk/dhcp module.
-		hostnameStr := strings.TrimRight(string(hostname), "\x00")
-
-		lease.Hostname = hostnameStr
+		lease.Hostname = string(hostname)
 		s.commitLease(lease)
 	} else if len(lease.Hostname) != 0 {
 		o := &optFQDN{
diff --git a/internal/dhcpd/v6.go b/internal/dhcpd/v6.go
index 0b43d6d1..b47387e7 100644
--- a/internal/dhcpd/v6.go
+++ b/internal/dhcpd/v6.go
@@ -46,7 +46,8 @@ func ip6InRange(start, ip net.IP) bool {
 	if len(start) != 16 {
 		return false
 	}
-	//lint:ignore SA1021 TODO(e.burkov): Ignore this for now, think about using masks.
+	//lint:ignore SA1021 TODO(e.burkov): Ignore this for now, think about
+	// using masks.
 	if !bytes.Equal(start[:15], ip[:15]) {
 		return false
 	}