mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-31 08:01:34 +01:00 
			
		
		
		
	This commit is contained in:
		
							parent
							
								
									52a3b54ba2
								
							
						
					
					
						commit
						cc42fc394a
					
				| @ -20,6 +20,7 @@ | |||||||
| - Improved compatibilty of built-in DERP server with clients connecting over WebSocket. | - Improved compatibilty of built-in DERP server with clients connecting over WebSocket. | ||||||
| - Allow nodes to use SSH agent forwarding [#2145](https://github.com/juanfont/headscale/pull/2145) | - Allow nodes to use SSH agent forwarding [#2145](https://github.com/juanfont/headscale/pull/2145) | ||||||
| - Fixed processing of fields in post request in MoveNode rpc [#2179](https://github.com/juanfont/headscale/pull/2179) | - Fixed processing of fields in post request in MoveNode rpc [#2179](https://github.com/juanfont/headscale/pull/2179) | ||||||
|  | - Added conversion of 'Hostname' to 'givenName' in a node with FQDN rules applied [#2198](https://github.com/juanfont/headscale/pull/2198) | ||||||
| 
 | 
 | ||||||
| ## 0.23.0 (2024-09-18) | ## 0.23.0 (2024-09-18) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -607,6 +607,7 @@ func enableRoutes(tx *gorm.DB, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func generateGivenName(suppliedName string, randomSuffix bool) (string, error) { | func generateGivenName(suppliedName string, randomSuffix bool) (string, error) { | ||||||
|  | 	suppliedName = util.ConvertWithFQDNRules(suppliedName) | ||||||
| 	if len(suppliedName) > util.LabelHostnameLength { | 	if len(suppliedName) > util.LabelHostnameLength { | ||||||
| 		return "", types.ErrHostnameTooLong | 		return "", types.ErrHostnameTooLong | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -392,6 +392,15 @@ func TestHeadscale_generateGivenName(t *testing.T) { | |||||||
| 			want:    regexp.MustCompile("^testnode$"), | 			want:    regexp.MustCompile("^testnode$"), | ||||||
| 			wantErr: false, | 			wantErr: false, | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: "UPPERCASE node name generation", | ||||||
|  | 			args: args{ | ||||||
|  | 				suppliedName: "TestNode", | ||||||
|  | 				randomSuffix: false, | ||||||
|  | 			}, | ||||||
|  | 			want:    regexp.MustCompile("^testnode$"), | ||||||
|  | 			wantErr: false, | ||||||
|  | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			name: "node name with 53 chars", | 			name: "node name with 53 chars", | ||||||
| 			args: args{ | 			args: args{ | ||||||
|  | |||||||
| @ -50,6 +50,13 @@ func CheckForFQDNRules(name string) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func ConvertWithFQDNRules(name string) string { | ||||||
|  | 	name = strings.ToLower(name) | ||||||
|  | 	name = invalidCharsInUserRegex.ReplaceAllString(name, "") | ||||||
|  | 
 | ||||||
|  | 	return name | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // generateMagicDNSRootDomains generates a list of DNS entries to be included in `Routes` in `MapResponse`. | // generateMagicDNSRootDomains generates a list of DNS entries to be included in `Routes` in `MapResponse`. | ||||||
| // This list of reverse DNS entries instructs the OS on what subnets and domains the Tailscale embedded DNS | // This list of reverse DNS entries instructs the OS on what subnets and domains the Tailscale embedded DNS | ||||||
| // server (listening in 100.100.100.100 udp/53) should be used for. | // server (listening in 100.100.100.100 udp/53) should be used for. | ||||||
|  | |||||||
| @ -53,6 +53,52 @@ func TestCheckForFQDNRules(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestConvertWithFQDNRules(t *testing.T) { | ||||||
|  | 	tests := []struct { | ||||||
|  | 		name        string | ||||||
|  | 		hostname    string | ||||||
|  | 		dnsHostName string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name:        "User1.test", | ||||||
|  | 			hostname:    "User1.Test", | ||||||
|  | 			dnsHostName: "user1.test", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "User'1$2.test", | ||||||
|  | 			hostname:    "User'1$2.Test", | ||||||
|  | 			dnsHostName: "user12.test", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "User-^_12.local.test", | ||||||
|  | 			hostname:    "User-^_12.local.Test", | ||||||
|  | 			dnsHostName: "user-12.local.test", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "User-MacBook-Pro", | ||||||
|  | 			hostname:    "User-MacBook-Pro", | ||||||
|  | 			dnsHostName: "user-macbook-pro", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "User-Linux-Ubuntu/Fedora", | ||||||
|  | 			hostname:    "User-Linux-Ubuntu/Fedora", | ||||||
|  | 			dnsHostName: "user-linux-ubuntufedora", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "User-[Space]123", | ||||||
|  | 			hostname:    "User-[ ]123", | ||||||
|  | 			dnsHostName: "user-123", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		t.Run(tt.name, func(t *testing.T) { | ||||||
|  | 			fqdnHostName := ConvertWithFQDNRules(tt.hostname) | ||||||
|  | 			assert.Equal(t, tt.dnsHostName, fqdnHostName) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestMagicDNSRootDomains100(t *testing.T) { | func TestMagicDNSRootDomains100(t *testing.T) { | ||||||
| 	domains := GenerateIPv4DNSRootDomain(netip.MustParsePrefix("100.64.0.0/10")) | 	domains := GenerateIPv4DNSRootDomain(netip.MustParsePrefix("100.64.0.0/10")) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user