mirror of
https://github.com/juanfont/headscale.git
synced 2024-12-22 07:57:34 +00:00
Fix most nil pointers, actually make it check for unique across headscale
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
830d59fe8c
commit
bc1c1f5ce8
@ -479,7 +479,7 @@ func (api headscaleV1APIServer) DebugCreateMachine(
|
|||||||
Hostname: "DebugTestMachine",
|
Hostname: "DebugTestMachine",
|
||||||
}
|
}
|
||||||
|
|
||||||
givenName, err := api.h.GenerateGivenName(namespace.Name, request.GetKey(), request.GetName())
|
givenName, err := api.h.GenerateGivenName(request.GetKey(), request.GetName())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -71,8 +71,8 @@ func TestPingAll(t *testing.T) {
|
|||||||
|
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
err = scenario.Shutdown()
|
// err = scenario.Shutdown()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
t.Errorf("failed to tear down scenario: %s", err)
|
// t.Errorf("failed to tear down scenario: %s", err)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
31
machine.go
31
machine.go
@ -332,6 +332,15 @@ func (h *Headscale) ListMachines() ([]Machine, error) {
|
|||||||
return machines, nil
|
return machines, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Headscale) ListMachinesByGivenName(givenName string) ([]Machine, error) {
|
||||||
|
machines := []Machine{}
|
||||||
|
if err := h.db.Preload("AuthKey").Preload("AuthKey.Namespace").Preload("Namespace").Find(&machines).Where("given_name = ?", givenName).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return machines, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetMachine finds a Machine by name and namespace and returns the Machine struct.
|
// GetMachine finds a Machine by name and namespace and returns the Machine struct.
|
||||||
func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error) {
|
func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error) {
|
||||||
machines, err := h.ListMachinesInNamespace(namespace)
|
machines, err := h.ListMachinesInNamespace(namespace)
|
||||||
@ -1061,21 +1070,27 @@ func (h *Headscale) generateGivenName(suppliedName string, randomSuffix bool) (s
|
|||||||
return normalizedHostname, nil
|
return normalizedHostname, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Headscale) GenerateGivenName(namespace string, machineKey string, suppliedName string) (string, error) {
|
func (h *Headscale) GenerateGivenName(machineKey string, suppliedName string) (string, error) {
|
||||||
givenName, err := h.generateGivenName(suppliedName, false)
|
givenName, err := h.generateGivenName(suppliedName, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tailscale rules (may differ) https://tailscale.com/kb/1098/machine-names/
|
// Tailscale rules (may differ) https://tailscale.com/kb/1098/machine-names/
|
||||||
machine, _ := h.GetMachineByGivenName(namespace, givenName)
|
machines, err := h.ListMachinesByGivenName(givenName)
|
||||||
if machine != nil && machine.MachineKey != machineKey && machine.GivenName == givenName {
|
if err != nil {
|
||||||
postfixedName, err := h.generateGivenName(suppliedName, true)
|
return "", err
|
||||||
if err != nil {
|
}
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
givenName = postfixedName
|
for _, machine := range machines {
|
||||||
|
if machine.MachineKey != machineKey && machine.GivenName == givenName {
|
||||||
|
postfixedName, err := h.generateGivenName(suppliedName, true)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
givenName = postfixedName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return givenName, nil
|
return givenName, nil
|
||||||
|
@ -150,7 +150,10 @@ func (h *Headscale) handleRegisterCommon(
|
|||||||
Bool("noise", machineKey.IsZero()).
|
Bool("noise", machineKey.IsZero()).
|
||||||
Msg("New machine not yet in the database")
|
Msg("New machine not yet in the database")
|
||||||
|
|
||||||
givenName, err := h.GenerateGivenName(machine.Namespace.Name, machine.MachineKey, registerRequest.Hostinfo.Hostname)
|
givenName, err := h.GenerateGivenName(
|
||||||
|
machineKey.String(),
|
||||||
|
registerRequest.Hostinfo.Hostname,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Caller().
|
Caller().
|
||||||
@ -374,7 +377,7 @@ func (h *Headscale) handleAuthKeyCommon(
|
|||||||
} else {
|
} else {
|
||||||
now := time.Now().UTC()
|
now := time.Now().UTC()
|
||||||
|
|
||||||
givenName, err := h.GenerateGivenName(machine.Namespace.Name, MachinePublicKeyStripPrefix(machineKey), registerRequest.Hostinfo.Hostname)
|
givenName, err := h.GenerateGivenName(MachinePublicKeyStripPrefix(machineKey), registerRequest.Hostinfo.Hostname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Caller().
|
Caller().
|
||||||
|
Loading…
x
Reference in New Issue
Block a user