// Sets the given secLabel on the endpoint with the given endpointID. Returns a pointer of // a copy endpoint if the endpoint was found, nil otherwise. func (d *Daemon) setEndpointSecLabel(endpointID *uint16, dockerID, dockerEPID string, labels *labels.SecCtxLabel) *endpoint.Endpoint { var ( ep *endpoint.Endpoint ok bool ) setIfNotEmpty := func(receiver *string, provider string) { if receiver != nil && *receiver == "" && provider != "" { *receiver = provider } } setIfNotEmptyUint16 := func(receiver *uint16, provider *uint16) { if receiver != nil && *receiver == 0 && provider != nil && *provider != 0 { *receiver = *provider } } d.endpointsMU.Lock() defer d.endpointsMU.Unlock() if endpointID != nil { ep, ok = d.endpoints[*endpointID] } else if dockerID != "" { ep, ok = d.endpointsDocker[dockerID] } else if dockerEPID != "" { ep, ok = d.endpointsDockerEP[dockerEPID] } else { return nil } if ok { setIfNotEmpty(&ep.DockerID, dockerID) setIfNotEmpty(&ep.DockerEndpointID, dockerEPID) setIfNotEmptyUint16(&ep.ID, endpointID) ep.SetSecLabel(labels) // Update all IDs in respective MAPs d.insertEndpoint(ep) return ep.DeepCopy() } return nil }