Prechádzať zdrojové kódy

Merge pull request #41 from slackhq/lighthouse_static_map_error

Add an error (non fatal) when a lighthouse host has no static entry
Ryan Huber 5 rokov pred
rodič
commit
94441789d5
3 zmenil súbory, kde vykonal 39 pridanie a 0 odobranie
  1. 12 0
      lighthouse.go
  2. 21 0
      lighthouse_test.go
  3. 6 0
      main.go

+ 12 - 0
lighthouse.go

@@ -53,6 +53,18 @@ func NewLightHouse(amLighthouse bool, myIp uint32, ips []string, interval int, n
 	return &h
 }
 
+func (lh *LightHouse) ValidateLHStaticEntries() error {
+	for lhIP, _ := range lh.lighthouses {
+		for ip, _ := range lh.staticList {
+			if lhIP == ip {
+				continue
+			}
+			return fmt.Errorf("Lighthouse %s does not have a static_host_map entry", IntIp(lhIP))
+		}
+	}
+	return nil
+}
+
 func (lh *LightHouse) Query(ip uint32, f EncWriter) ([]udpAddr, error) {
 	if !lh.IsLighthouseIP(ip) {
 		lh.QueryServer(ip, f)

+ 21 - 0
lighthouse_test.go

@@ -46,6 +46,27 @@ func TestNewipandportsfromudpaddrs(t *testing.T) {
 
 }
 
+func Test_lhStaticMapping(t *testing.T) {
+	lh1 := "10.128.0.2"
+
+	lh1IP := net.ParseIP(lh1)
+
+	udpServer, _ := NewListener("0.0.0.0", 0, true)
+
+	meh := NewLightHouse(true, 1, []string{lh1}, 10, 10003, udpServer, false)
+	meh.AddRemote(ip2int(lh1IP), NewUDPAddr(ip2int(lh1IP), uint16(4242)), true)
+	err := meh.ValidateLHStaticEntries()
+	assert.Nil(t, err)
+
+	lh2 := "10.128.0.3"
+	meh = NewLightHouse(true, 1, []string{lh1, lh2}, 10, 10003, udpServer, false)
+	meh.AddRemote(ip2int(lh1IP), NewUDPAddr(ip2int(lh1IP), uint16(4242)), true)
+	err = meh.ValidateLHStaticEntries()
+	assert.EqualError(t, err, "Lighthouse 10.128.0.3 does not have a static_host_map entry")
+}
+
+//func NewLightHouse(amLighthouse bool, myIp uint32, ips []string, interval int, nebulaPort int, pc *udpConn, punchBack bool) *LightHouse {
+
 /*
 func TestLHQuery(t *testing.T) {
 	//n := NewLhQueryByIpString("10.128.0.3")

+ 6 - 0
main.go

@@ -205,6 +205,7 @@ func Main(configPath string, configTest bool, buildVersion string) {
 		go dnsMain(hostMap)
 	}
 
+	//TODO: Move all of this inside functions in lighthouse.go
 	for k, v := range config.GetMap("static_host_map", map[interface{}]interface{}{}) {
 		vpnIp := net.ParseIP(fmt.Sprintf("%v", k))
 		vals, ok := v.([]interface{})
@@ -236,6 +237,11 @@ func Main(configPath string, configTest bool, buildVersion string) {
 		}
 	}
 
+	err = lightHouse.ValidateLHStaticEntries()
+	if err != nil {
+		l.WithError(err).Error("Lighthouse unreachable")
+	}
+
 	handshakeManager := NewHandshakeManager(tunCidr, preferredRanges, hostMap, lightHouse, udpServer)
 
 	//TODO: These will be reused for psk