propagate from branch 'ca.inverse.sogo.1_3_17' (head a4ef73c2ad79c8da8d8e0c93767ab06e14bc846b)

to branch 'ca.inverse.sogo' (head 25245057b6fcee6d3af9a15a930deba187d79422)

Monotone-Parent: 25245057b6fcee6d3af9a15a930deba187d79422
Monotone-Parent: a4ef73c2ad79c8da8d8e0c93767ab06e14bc846b
Monotone-Revision: 7634b9d503d61b6240548e75e7f872081debc6b4

Monotone-Author: jraby@inverse.ca
Monotone-Date: 2012-06-27T16:06:45
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Jean Raby 2012-06-27 16:06:45 +00:00
commit e587ae08cf
6 changed files with 83 additions and 25 deletions

View File

@ -1,3 +1,9 @@
2012-06-27 Jean Raby <jraby@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentObject.m
(PUTAction:): detect conflicting event UID and
deny the request accordingly.
2012-06-21 Ludovic Marcotte <lmarcotte@inverse.ca> 2012-06-21 Ludovic Marcotte <lmarcotte@inverse.ca>
* Added the SOGoSearchMinimumWordLength domain * Added the SOGoSearchMinimumWordLength domain

12
NEWS
View File

@ -1,3 +1,14 @@
1.3.17 (2012-MM-DD)
-------------------
New Features
-
Enhancements
- updated Czech translation
Bug Fixes
-
1.3.16 (2012-06-07) 1.3.16 (2012-06-07)
------------------- -------------------
Enhancements Enhancements
@ -8,6 +19,7 @@ Enhancements
- it's no longer possible to click the "Upload" button multiple times - it's no longer possible to click the "Upload" button multiple times
- allow delivery of mail with no subject, but alert the user - allow delivery of mail with no subject, but alert the user
- updated Dutch, German, French translations - updated Dutch, German, French translations
Bug Fixes Bug Fixes
- fixed compilation under GNU/kFreeBSD - fixed compilation under GNU/kFreeBSD
- fixed compilation for arm architecture - fixed compilation for arm architecture

View File

@ -67,4 +67,4 @@ vtodo_class2 = "(Skrytý úkol)";
= "%{Attendee} %{SentByText}dosud o Vaší pozvánce k události nerozhodl/a."; = "%{Attendee} %{SentByText}dosud o Vaší pozvánce k události nerozhodl/a.";
/* Resources */ /* Resources */
"Maximum number of simultaneous bookings (%{NumberOfSimultaneousBookings}) reached for resource \"%{Cn} %{SystemEmail}\"." = "Maximální počet současných rezervací (%{NumberOfSimultaneousBookings}) byl dosažen pro zdroj \"%{Cn} %{SystemEmail}\"."; "Maximum number of simultaneous bookings (%{NumberOfSimultaneousBookings}) reached for resource \"%{Cn} %{SystemEmail}\". The conflicting event is \"%{EventTitle}\", and starts on %{StartDate}." = "Byl dosažen maximální počet současných rezervací\n(%{NumberOfSimultaneousBookings}) pro zdroj \"%{Cn} %{SystemEmail}\". Konfliktní událost je \"%{EventTitle}\" a začíná %{StartDate}.";

View File

@ -1756,15 +1756,25 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent
{ {
iCalCalendar *calendar; iCalCalendar *calendar;
SOGoUser *ownerUser; SOGoUser *ownerUser;
iCalEvent *event; iCalEvent *event, *conflictingEvent;
NSString *eventUID;
BOOL scheduling; BOOL scheduling;
calendar = [iCalCalendar parseSingleFromSource: [rq contentAsString]]; calendar = [iCalCalendar parseSingleFromSource: [rq contentAsString]];
event = [[calendar events] objectAtIndex: 0]; event = [[calendar events] objectAtIndex: 0];
eventUID = [event uid];
ownerUser = [SOGoUser userWithLogin: owner]; ownerUser = [SOGoUser userWithLogin: owner];
scheduling = [self _shouldScheduleEvent: [event organizer]]; scheduling = [self _shouldScheduleEvent: [event organizer]];
// make sure eventUID doesn't conflict with an existing event - see bug #1853
// TODO: send out a no-uid-conflict (DAV:href) xml element (rfc4791 section 5.3.2.1)
if (conflictingEvent = [container resourceNameForEventUID: eventUID])
{
NSString *reason = [NSString stringWithFormat: @"Event UID already in use. (%s)", eventUID];
return [NSException exceptionWithHTTPStatus:403 reason: reason];
}
// //
// New event and we're the organizer -- send invitation to all attendees // New event and we're the organizer -- send invitation to all attendees

View File

@ -4,6 +4,9 @@
# attendee1_delegate_username and superuser. # attendee1_delegate_username and superuser.
# when writing new tests, avoid using superuser when not absolutely needed # when writing new tests, avoid using superuser when not absolutely needed
# TODO
# - Individual tests should set the ACLs themselves on Resources tests
from config import hostname, port, username, password, \ from config import hostname, port, username, password, \
superuser, superuser_password, \ superuser, superuser_password, \
attendee1, attendee1_username, \ attendee1, attendee1_username, \
@ -791,6 +794,31 @@ class CalDAVSchedulingTest(unittest.TestCase):
for attendee in org_ev.vevent.attendee_list: for attendee in org_ev.vevent.attendee_list:
self.assertNotEqual(self.user_email, attendee.value) self.assertNotEqual(self.user_email, attendee.value)
def testEventsWithSameUID(self):
""" PUT 2 events with the same UID - bug #1853 """
ics_name = "test-same-uid.ics"
self.ics_list += [ics_name]
self._deleteEvent(self.client,
"%s%s" % (self.user_calendar, ics_name), None)
conflict_ics_name = "test-same-uid-conflict.ics"
self.ics_list += [ics_name]
self._deleteEvent(self.client,
"%s%s" % (self.user_calendar, conflict_ics_name), None)
# 1. create simple event
summary="same uid"
uid=summary
event = self._newEvent(summary, uid)
self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event)
# PUT the same event with a new filename - should trigger a 403
self._putEvent(self.client, "%s%s" % (self.user_calendar, conflict_ics_name), event, exp_status=403)
def testInvitationDelegation(self): def testInvitationDelegation(self):
""" invitation delegation """ """ invitation delegation """

View File

@ -11,7 +11,7 @@
"Reply" = "Odpovědět"; "Reply" = "Odpovědět";
"Reply All" = "Odp. všem"; "Reply All" = "Odp. všem";
"Print" = "Tisk"; "Print" = "Tisk";
"Stop" = "Stop"; "Stop" = "Zastavit";
"Write" = "Napsat"; "Write" = "Napsat";
"Send" = "Odeslat"; "Send" = "Odeslat";
@ -19,6 +19,7 @@
"Attach" = "Přiložit"; "Attach" = "Přiložit";
"Save" = "Uložit"; "Save" = "Uložit";
"Options" = "Možnosti"; "Options" = "Možnosti";
"Close" = "Zavřít";
"Size" = "Velikost"; "Size" = "Velikost";
/* Tooltips */ /* Tooltips */
@ -63,8 +64,10 @@
"Shared Account: " = "Sdílený účet: "; "Shared Account: " = "Sdílený účet: ";
/* acls */ /* acls */
"Default Roles" = "Výchozí oprávnění"; "Access rights to" = "Přístupová práva k";
"User rights for:" = "Uživatelská práva pro:"; "For user" = "Pro uživatele";
"Any Authenticated User" = "Všichni ověření uživatelé";
"List and see this folder" = "Prohlížet tuto složku"; "List and see this folder" = "Prohlížet tuto složku";
"Read mails from this folder" = "Číst maily v této složce"; "Read mails from this folder" = "Číst maily v této složce";
@ -104,15 +107,13 @@
"cc" = "Kopie"; "cc" = "Kopie";
"bcc" = "Skrytá kopie"; "bcc" = "Skrytá kopie";
"Addressbook" = "Adresář";
"Edit Draft..." = "Upravit koncept..."; "Edit Draft..." = "Upravit koncept...";
"Load Images" = "Nahrát obrázky"; "Load Images" = "Nahrát obrázky";
"Return Receipt" = "Return Receipt"; "Return Receipt" = "Potvrzení o přečtení";
"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?"; "The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "Odesílatel této zprávy si přeje být informován o tom, že jste si tuto zprávu přečetli. Chcete odesílateli poslat potvrzení?";
"Return Receipt (displayed) - %@"= "Return Receipt (displayed) - %@"; "Return Receipt (displayed) - %@"= "Potvrzení o přečtení (zobrazeno) - %@";
"This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents." = "This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents."; "This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents." = "Toto je potvrzení o přečtení ke zprávě, kterou jste poslali pro %@.\n\nPoznámka: Potvrzení o přijetí znamená pouze to, že se zpráva zobrazila na počítači adresáta. Není ale zaručeno, že adresát zprávu četl a porozuměl jejímu obsahu.";
"Priority" = "Priorita"; "Priority" = "Priorita";
"highest" = "Nejvyšší"; "highest" = "Nejvyšší";
@ -123,6 +124,9 @@
"This mail is being sent from an unsecure network!" = "Tento mail je odesílán z nezabezpečené sítě!"; "This mail is being sent from an unsecure network!" = "Tento mail je odesílán z nezabezpečené sítě!";
"Address Book:" = "Adresář:";
"Search For:" = "Hledat:";
/* Popup "show" */ /* Popup "show" */
"all" = "všechny"; "all" = "všechny";
@ -141,8 +145,7 @@
"Date" = "Datum"; "Date" = "Datum";
"View" = "Zobrazit"; "View" = "Zobrazit";
"All" = "Všechny"; "All" = "Všechny";
"Unread" = "Nepřečtené"; "No message" = "Žádná zpráva";
"No message" = "No message";
"messages" = "zprávy"; "messages" = "zprávy";
"first" = "Nejnovější"; "first" = "Nejnovější";
@ -196,8 +199,8 @@
"Delete Folder" = "Smazat složku"; "Delete Folder" = "Smazat složku";
"Use This Folder For" = "Použít tuto složku pro"; "Use This Folder For" = "Použít tuto složku pro";
"Get Messages for Account" = "Stáhnout zprávy pro účet"; "Get Messages for Account" = "Stáhnout zprávy pro účet";
"Properties..." = "Properties..."; "Properties..." = "Vlastnosti...";
"Delegation..." = "Delegation..."; "Delegation..." = "Delegoní...";
/* Use This Folder menu */ /* Use This Folder menu */
"Sent Messages" = "Odeslané zprávy"; "Sent Messages" = "Odeslané zprávy";
@ -208,7 +211,6 @@
"Open Message In New Window" = "Otevřít zprávu v novém okně"; "Open Message In New Window" = "Otevřít zprávu v novém okně";
"Reply to Sender Only" = "Odpovědět pouze odesílateli"; "Reply to Sender Only" = "Odpovědět pouze odesílateli";
"Reply to All" = "Odpovědět všem"; "Reply to All" = "Odpovědět všem";
"Forward" = "Přeposlat";
"Edit As New..." = "Upravit jako novou..."; "Edit As New..." = "Upravit jako novou...";
"Move To" = "Přesunout do"; "Move To" = "Přesunout do";
"Copy To" = "Kopírovat do"; "Copy To" = "Kopírovat do";
@ -255,11 +257,11 @@
"Please select a message." = "Vyberte zprávu prosím."; "Please select a message." = "Vyberte zprávu prosím.";
"Please select a message to print." = "Zvolte prosím zprávu, kterou chcete tisknout."; "Please select a message to print." = "Zvolte prosím zprávu, kterou chcete tisknout.";
"Please select only one message to print." = "Zvolte pouze jednu zprávu, kterou chcete tisknout."; "Please select only one message to print." = "Zvolte pouze jednu zprávu, kterou chcete tisknout.";
"The message you have selected doesn't exist anymore." = "The message you have selected doesn't exist anymore."; "The message you have selected doesn't exist anymore." = "Zpráva, kterou jste zvolili, již neexistuje.";
"The folder with name \"%{0}\" could not be created." "The folder with name \"%{0}\" could not be created."
= "Složka s názvem \"%{0}\" nemohla být vytvořen."; = "Složka s názvem \"%{0}\" nemohla být vytvořena.";
"This folder could not be renamed to \"%{0}\"." "This folder could not be renamed to \"%{0}\"."
= "Tato složka nemohla být přejmenována na \"%{0}\"."; = "Tato složka nemohla být přejmenována na \"%{0}\".";
"The folder could not be deleted." "The folder could not be deleted."
@ -272,20 +274,20 @@
"You need to choose a non-virtual folder!" = "Musíte zvolit ne-virtuální složku!"; "You need to choose a non-virtual folder!" = "Musíte zvolit ne-virtuální složku!";
"Moving a message into its own folder is impossible!" "Moving a message into its own folder is impossible!"
= "Je nemožné přesunout zprávu do své vlastní složky!"; = "Zprávu nelze přesunout do své vlastní složky!";
"Copying a message into its own folder is impossible!" "Copying a message into its own folder is impossible!"
= "Je nemožné zkopírovat zprávu do své vlastní složky!"; = "Zprávu nelze zkopírovat do své vlastní složky!";
/* Message operations */ /* Message operations */
"The messages could not be moved to the trash folder. Would you like to delete them immediately?" "The messages could not be moved to the trash folder. Would you like to delete them immediately?"
= "The messages could not be moved to the trash folder. Would you like to delete them immediately?"; = "Zprávy nemohou být přesunuty do koše. Chcete je smazat trvale?";
/* Message editing */ /* Message editing */
"error_validationfailed" = "Potvrzení selhalo";
"error_missingsubject" = "Chybí předmět"; "error_missingsubject" = "Chybí předmět";
"error_missingrecipients" = "Příjemci nebyli specifikováni"; "error_missingrecipients" = "Příjemci nebyli specifikováni";
"Send Anyway" = "Odeslat";
/* Message sending */ /* Message sending */
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid."; "cannot send message: (smtp) all recipients discarded" = "Zprávu nelze odeslat: adresy všech příjemců jsou neplatné.";
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:"; "cannot send message (smtp) - recipients discarded:" = "Zprávu nelze odeslat: následující adresy jsou neplatné:";
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server."; "cannot send message: (smtp) error when connecting" = "Zprávu nelze odeslat: při spojení se SMTP serverem došlo k chybě.";