diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 0a770a3f8..55080d480 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -126,7 +126,7 @@ } - (SOGoAppointmentObject *) _lookupEvent: (NSString *) eventUID - forUID: (NSString *) uid + forUID: (NSString *) uid { SOGoAppointmentFolder *folder; SOGoAppointmentObject *object; @@ -2155,6 +2155,26 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent if (userIsOrganizer) { + // We check ACLs of the 'organizer' - in case someone forges the SENT-BY + NSString *uid; + + uid = [[oldEvent organizer] uidInContext: context]; + + if ([[[context activeUser] login] caseInsensitiveCompare: uid] != NSOrderedSame) + { + SOGoAppointmentObject *organizerObject; + + organizerObject = [self _lookupEvent: [oldEvent uid] forUID: uid]; + roles = [[context activeUser] rolesForObject: organizerObject + inContext: context]; + + if (![roles containsObject: @"ComponentModifier"]) + { + return [NSException exceptionWithHTTPStatus: 409 + reason: @"Not allowed to perform this action. Wrong SENT-BY being used regarding access rights on organizer's calendar."]; + } + } + // A RECCURENCE-ID was removed if (!newEvent && oldEvent) [self prepareDeleteOccurence: oldEvent];