diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go index 9def7c3c3..e3f84b697 100644 --- a/federationapi/routing/send.go +++ b/federationapi/routing/send.go @@ -17,6 +17,7 @@ package routing import ( "context" "encoding/json" + "errors" "fmt" "net/http" "time" @@ -378,7 +379,7 @@ func (t *txnReq) processEvent(ctx context.Context, e gomatrixserverlib.Event, is } // pass the event to the roomserver - return api.SendEvents( + err := api.SendEvents( context.Background(), t.rsAPI, []gomatrixserverlib.HeaderedEvent{ @@ -387,6 +388,12 @@ func (t *txnReq) processEvent(ctx context.Context, e gomatrixserverlib.Event, is api.DoNotSendToOtherServers, nil, ) + var notAllowed *gomatrixserverlib.NotAllowed + if errors.As(err, ¬Allowed) { + // the event was rejected, silently ignore. + err = nil + } + return err } func checkAllowedByState(e gomatrixserverlib.Event, stateEvents []gomatrixserverlib.Event) error { diff --git a/roomserver/internal/input/input_events.go b/roomserver/internal/input/input_events.go index 1e88e95a7..7ffef1c06 100644 --- a/roomserver/internal/input/input_events.go +++ b/roomserver/internal/input/input_events.go @@ -47,9 +47,9 @@ func (r *Inputer) processRoomEvent( // Check that the event passes authentication checks and work out // the numeric IDs for the auth events. isRejected := false - authEventNIDs, err := helpers.CheckAuthEvents(ctx, r.DB, headered, input.AuthEventIDs) - if err != nil { - logrus.WithError(err).WithField("event_id", event.EventID()).WithField("auth_event_ids", input.AuthEventIDs).Error("processRoomEvent.checkAuthEvents failed for event, rejecting event") + authEventNIDs, rejectionErr := helpers.CheckAuthEvents(ctx, r.DB, headered, input.AuthEventIDs) + if rejectionErr != nil { + logrus.WithError(rejectionErr).WithField("event_id", event.EventID()).WithField("auth_event_ids", input.AuthEventIDs).Error("processRoomEvent.checkAuthEvents failed for event, rejecting event") isRejected = true } @@ -72,7 +72,12 @@ func (r *Inputer) processRoomEvent( } // We stop here if the event is rejected: We've stored it but won't update forward extremities or notify anyone about it. if isRejected { - return event.EventID(), nil + logrus.WithFields(logrus.Fields{ + "event_id": event.EventID(), + "type": event.Type(), + "room": event.RoomID(), + }).Debug("Stored rejected event") + return event.EventID(), rejectionErr } // if storing this event results in it being redacted then do so. if redactedEventID == event.EventID() {