mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	* Updating comment to remove references to Caddy * Updating README to mark TODO items complete * Changing all debug print statements over to use logging package
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package kubernetes
 | |
| 
 | |
| import (
 | |
| 	"log"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| // NormalizeZoneList filters the zones argument to remove
 | |
| // array items that conflict with other items in zones.
 | |
| // For example, providing the following zones array:
 | |
| //    [ "a.b.c", "b.c", "a", "e.d.f", "a.b" ]
 | |
| // Returns:
 | |
| //    [ "a.b.c", "a", "e.d.f", "a.b" ]
 | |
| // Zones filted out:
 | |
| //    - "b.c" because "a.b.c" and "b.c" share the common top
 | |
| //      level "b.c". First listed zone wins if there is a conflict.
 | |
| //
 | |
| // Note: This may prove to be too restrictive in practice.
 | |
| //       Need to find counter-example use-cases.
 | |
| func NormalizeZoneList(zones []string) []string {
 | |
| 	filteredZones := []string{}
 | |
| 
 | |
| 	for _, z := range zones {
 | |
| 		zoneConflict, _ := subzoneConflict(filteredZones, z)
 | |
| 		if zoneConflict {
 | |
| 			log.Printf("[WARN] new zone '%v' from Corefile conflicts with existing zones: %v\n        Ignoring zone '%v'\n", z, filteredZones, z)
 | |
| 		} else {
 | |
| 			filteredZones = append(filteredZones, z)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return filteredZones
 | |
| }
 | |
| 
 | |
| // subzoneConflict returns true if name is a child or parent zone of
 | |
| // any element in zones. If conflicts exist, return the conflicting zones.
 | |
| func subzoneConflict(zones []string, name string) (bool, []string) {
 | |
| 	conflicts := []string{}
 | |
| 
 | |
| 	for _, z := range zones {
 | |
| 		if dns.IsSubDomain(z, name) || dns.IsSubDomain(name, z) {
 | |
| 			conflicts = append(conflicts, z)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return (len(conflicts) != 0), conflicts
 | |
| }
 |