mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-25 05:49:06 +01:00
Merge branch 'feature/user-info-with-role-permissions' into feature/users-roles-endpoint
This commit is contained in:
@@ -48,6 +48,9 @@ var loginCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update host's static platform and system information
|
||||||
|
system.UpdateStaticInfo()
|
||||||
|
|
||||||
// workaround to run without service
|
// workaround to run without service
|
||||||
if logFile == "console" {
|
if logFile == "console" {
|
||||||
err = handleRebrand(cmd)
|
err = handleRebrand(cmd)
|
||||||
|
|||||||
@@ -16,12 +16,17 @@ import (
|
|||||||
|
|
||||||
"github.com/netbirdio/netbird/client/proto"
|
"github.com/netbirdio/netbird/client/proto"
|
||||||
"github.com/netbirdio/netbird/client/server"
|
"github.com/netbirdio/netbird/client/server"
|
||||||
|
"github.com/netbirdio/netbird/client/system"
|
||||||
"github.com/netbirdio/netbird/util"
|
"github.com/netbirdio/netbird/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *program) Start(svc service.Service) error {
|
func (p *program) Start(svc service.Service) error {
|
||||||
// Start should not block. Do the actual work async.
|
// Start should not block. Do the actual work async.
|
||||||
log.Info("starting Netbird service") //nolint
|
log.Info("starting Netbird service") //nolint
|
||||||
|
|
||||||
|
// Collect static system and platform information
|
||||||
|
system.UpdateStaticInfo()
|
||||||
|
|
||||||
// in any case, even if configuration does not exists we run daemon to serve CLI gRPC API.
|
// in any case, even if configuration does not exists we run daemon to serve CLI gRPC API.
|
||||||
p.serv = grpc.NewServer()
|
p.serv = grpc.NewServer()
|
||||||
|
|
||||||
|
|||||||
@@ -631,7 +631,9 @@ func (r *router) addNatRule(pair firewall.RouterPair) error {
|
|||||||
"-j", "MARK", "--set-mark", fmt.Sprintf("%#x", markValue),
|
"-j", "MARK", "--set-mark", fmt.Sprintf("%#x", markValue),
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := r.iptablesClient.Append(tableMangle, chainRTPRE, rule...); err != nil {
|
// Ensure nat rules come first, so the mark can be overwritten.
|
||||||
|
// Currently overwritten by the dst-type LOCAL rules for redirected traffic.
|
||||||
|
if err := r.iptablesClient.Insert(tableMangle, chainRTPRE, 1, rule...); err != nil {
|
||||||
// TODO: rollback ipset counter
|
// TODO: rollback ipset counter
|
||||||
return fmt.Errorf("error while adding marking rule for %s: %v", pair.Destination, err)
|
return fmt.Errorf("error while adding marking rule for %s: %v", pair.Destination, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -666,7 +666,9 @@ func (r *router) addNatRule(pair firewall.RouterPair) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r.rules[ruleKey] = r.conn.AddRule(&nftables.Rule{
|
// Ensure nat rules come first, so the mark can be overwritten.
|
||||||
|
// Currently overwritten by the dst-type LOCAL rules for redirected traffic.
|
||||||
|
r.rules[ruleKey] = r.conn.InsertRule(&nftables.Rule{
|
||||||
Table: r.workTable,
|
Table: r.workTable,
|
||||||
Chain: r.chains[chainNameManglePrerouting],
|
Chain: r.chains[chainNameManglePrerouting],
|
||||||
Exprs: exprs,
|
Exprs: exprs,
|
||||||
|
|||||||
@@ -185,3 +185,10 @@ func GetInfoWithChecks(ctx context.Context, checks []*proto.Checks) (*Info, erro
|
|||||||
|
|
||||||
return info, nil
|
return info, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateStaticInfo asynchronously updates static system and platform information
|
||||||
|
func UpdateStaticInfo() {
|
||||||
|
go func() {
|
||||||
|
_ = updateStaticInfo()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,12 +16,6 @@ var (
|
|||||||
once sync.Once
|
once sync.Once
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
go func() {
|
|
||||||
_ = updateStaticInfo()
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateStaticInfo() StaticInfo {
|
func updateStaticInfo() StaticInfo {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
//go:build android || freebsd || ios
|
||||||
|
|
||||||
|
package system
|
||||||
|
|
||||||
|
// updateStaticInfo returns an empty implementation for unsupported platforms
|
||||||
|
func updateStaticInfo() StaticInfo {
|
||||||
|
return StaticInfo{}
|
||||||
|
}
|
||||||
@@ -128,7 +128,13 @@ func (c *GrpcClient) Sync(ctx context.Context, sysInfo *system.Info, msgHandler
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.handleStream(ctx, *serverPubKey, sysInfo, msgHandler)
|
streamErr := c.handleStream(ctx, *serverPubKey, sysInfo, msgHandler)
|
||||||
|
if c.conn.GetState() != connectivity.Shutdown {
|
||||||
|
if err := c.conn.Close(); err != nil {
|
||||||
|
log.Warnf("failed closing connection to Management service: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return streamErr
|
||||||
}
|
}
|
||||||
|
|
||||||
err := backoff.Retry(operation, defaultBackoff(ctx))
|
err := backoff.Retry(operation, defaultBackoff(ctx))
|
||||||
@@ -159,6 +165,7 @@ func (c *GrpcClient) handleStream(ctx context.Context, serverPubKey wgtypes.Key,
|
|||||||
// blocking until error
|
// blocking until error
|
||||||
err = c.receiveEvents(stream, serverPubKey, msgHandler)
|
err = c.receiveEvents(stream, serverPubKey, msgHandler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
c.notifyDisconnected(err)
|
||||||
s, _ := gstatus.FromError(err)
|
s, _ := gstatus.FromError(err)
|
||||||
switch s.Code() {
|
switch s.Code() {
|
||||||
case codes.PermissionDenied:
|
case codes.PermissionDenied:
|
||||||
@@ -167,7 +174,6 @@ func (c *GrpcClient) handleStream(ctx context.Context, serverPubKey wgtypes.Key,
|
|||||||
log.Debugf("management connection context has been canceled, this usually indicates shutdown")
|
log.Debugf("management connection context has been canceled, this usually indicates shutdown")
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
c.notifyDisconnected(err)
|
|
||||||
log.Warnf("disconnected from the Management service but will retry silently. Reason: %v", err)
|
log.Warnf("disconnected from the Management service but will retry silently. Reason: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -258,10 +264,10 @@ func (c *GrpcClient) receiveEvents(stream proto.ManagementService_SyncClient, se
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = msgHandler(decryptedResp)
|
if err := msgHandler(decryptedResp); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Errorf("failed handling an update message received from Management Service: %v", err.Error())
|
log.Errorf("failed handling an update message received from Management Service: %v", err.Error())
|
||||||
return err
|
// hide any grpc error code that is not relevant for management
|
||||||
|
return fmt.Errorf("msg handler error: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user