Fix cli registration of expired machines

Signed-off-by: Laurent Marchaud <laurent@marchaud.com>
This commit is contained in:
Laurent Marchaud 2022-08-19 12:38:39 +02:00
parent 19455399f4
commit c6ea9b4b80
No known key found for this signature in database
GPG Key ID: FAD4D3279AE317C5
2 changed files with 19 additions and 2 deletions

7
api.go
View File

@ -346,6 +346,13 @@ func (h *Headscale) RegistrationHandler(
// The machine has expired // The machine has expired
h.handleMachineExpired(writer, req, machineKey, registerRequest, *machine) h.handleMachineExpired(writer, req, machineKey, registerRequest, *machine)
machine.Expiry = &time.Time{}
h.registrationCache.Set(
machineKeyStr,
*machine,
registerCacheExpiration,
)
return return
} }
} }

View File

@ -24,8 +24,9 @@ const (
ErrMachineNotFoundRegistrationCache = Error( ErrMachineNotFoundRegistrationCache = Error(
"machine not found in registration cache", "machine not found in registration cache",
) )
ErrCouldNotConvertMachineInterface = Error("failed to convert machine interface") errCouldNotConvertMachineInterface = Error("failed to convert machine interface")
ErrHostnameTooLong = Error("Hostname too long") errHostnameTooLong = Error("Hostname too long")
errDifferentRegisteredNamespace = Error("machine was previously registered with a different namespace")
MachineGivenNameHashLength = 8 MachineGivenNameHashLength = 8
MachineGivenNameTrimSize = 2 MachineGivenNameTrimSize = 2
) )
@ -789,6 +790,11 @@ func (h *Headscale) RegisterMachineFromAuthCallback(
) )
} }
// Registration of expired machine with different namespace
if registrationMachine.ID != 0 && registrationMachine.NamespaceID != namespace.ID {
return nil, errDifferentRegisteredNamespace
}
registrationMachine.NamespaceID = namespace.ID registrationMachine.NamespaceID = namespace.ID
registrationMachine.RegisterMethod = registrationMethod registrationMachine.RegisterMethod = registrationMethod
@ -796,6 +802,10 @@ func (h *Headscale) RegisterMachineFromAuthCallback(
registrationMachine, registrationMachine,
) )
if err == nil {
h.registrationCache.Delete(machineKeyStr)
}
return machine, err return machine, err
} else { } else {
return nil, ErrCouldNotConvertMachineInterface return nil, ErrCouldNotConvertMachineInterface