@ -305,9 +305,7 @@ var nlAddCmd = &ffcli.Command{
Name : "add" ,
Name : "add" ,
ShortUsage : "tailscale lock add <public-key>..." ,
ShortUsage : "tailscale lock add <public-key>..." ,
ShortHelp : "Add one or more trusted signing keys to tailnet lock" ,
ShortHelp : "Add one or more trusted signing keys to tailnet lock" ,
Exec : func ( ctx context . Context , args [ ] string ) error {
Exec : runNetworkLockAdd ,
return runNetworkLockModify ( ctx , args , nil )
} ,
}
}
var nlRemoveArgs struct {
var nlRemoveArgs struct {
@ -331,6 +329,9 @@ func runNetworkLockRemove(ctx context.Context, args []string) error {
if err != nil {
if err != nil {
return err
return err
}
}
if len ( removeKeys ) == 0 {
return fmt . Errorf ( "missing argument, expected one or more tailnet lock keys" )
}
st , err := localClient . NetworkLockStatus ( ctx )
st , err := localClient . NetworkLockStatus ( ctx )
if err != nil {
if err != nil {
return fixTailscaledConnectError ( err )
return fixTailscaledConnectError ( err )
@ -445,25 +446,24 @@ func parseNLArgs(args []string, parseKeys, parseDisablements bool) (keys []tka.K
return keys , disablements , nil
return keys , disablements , nil
}
}
func runNetworkLockModify ( ctx context . Context , addArgs , remove Args [ ] string ) error {
func runNetworkLockAdd ( ctx context . Context , addArgs [ ] string ) error {
st , err := localClient . NetworkLockStatus ( ctx )
addKeys , _ , err := parseNLArgs ( addArgs , true , false )
if err != nil {
if err != nil {
return fixTailscaledConnectError ( err )
return err
}
}
if ! st . Enabled {
if len ( addKeys ) == 0 {
return errors . New ( "tailnet lock is not enabled ")
return fmt . Errorf ( "missing argument, expected one or more tailnet lock keys ")
}
}
addKeys , _ , err := parseNLArgs ( addArgs , true , false )
st , err := localClient . NetworkLockStatus ( ctx )
if err != nil {
if err != nil {
return err
return fixTailscaledConnectError ( err )
}
}
removeKeys , _ , err := parseNLArgs ( removeArgs , true , false )
if ! st . Enabled {
if err != nil {
return errors . New ( "tailnet lock is not enabled" )
return err
}
}
if err := localClient . NetworkLockModify ( ctx , addKeys , removeKeys ) ; err != nil {
if err := localClient . NetworkLockModify ( ctx , addKeys , nil ) ; err != nil {
return err
return err
}
}
return nil
return nil
@ -819,13 +819,17 @@ Revocation is a multi-step process that requires several signing nodes to ` + "`
func runNetworkLockRevokeKeys ( ctx context . Context , args [ ] string ) error {
func runNetworkLockRevokeKeys ( ctx context . Context , args [ ] string ) error {
// First step in the process
// First step in the process
if ! nlRevokeKeysArgs . cosign && ! nlRevokeKeysArgs . finish {
if ! nlRevokeKeysArgs . cosign && ! nlRevokeKeysArgs . finish {
remo veKeys , _ , err := parseNLArgs ( args , true , false )
revok eKeys , _ , err := parseNLArgs ( args , true , false )
if err != nil {
if err != nil {
return err
return err
}
}
keyIDs := make ( [ ] tkatype . KeyID , len ( removeKeys ) )
if len ( revokeKeys ) == 0 {
for i , k := range removeKeys {
return fmt . Errorf ( "missing argument, expected one or more tailnet lock keys" )
}
keyIDs := make ( [ ] tkatype . KeyID , len ( revokeKeys ) )
for i , k := range revokeKeys {
keyIDs [ i ] , err = k . ID ( )
keyIDs [ i ] , err = k . ID ( )
if err != nil {
if err != nil {
return fmt . Errorf ( "generating keyID: %v" , err )
return fmt . Errorf ( "generating keyID: %v" , err )