tags parsing (#1486272)
+- Don't cut off attachment names when using non-RFC2231 encoding (#1485515)
+- Allow inserting signatures above replied message body (#1484272)
+- Managesieve 2.0: multi-script support
+- Fix imap_auth_type regression (#1486263)
+
+RELEASE 0.3.1
+------------------
+- Specify toolbar container in compose template (#1486247)
+- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#1486243)
+- Avoid unnecessary page loads for selected tab (#1486032)
+- Fix quota indicator issues by content generation on client-size (#1486197, #1486220)
+- Don't display disabled sections in Settings (#1486099)
+- Added server-side e-mail address validation with 'email_dns_check' option (#1485857)
+- Fix login page loading into an iframe when session expires (#1485952)
+- Allow setting port number in 'force_https' option (#1486091)
+- Option 'force_https' replaced by 'force_https' plugin
+- Fix IE issue with non-UTF-8 characters in AJAX response (#1486159)
+- Partially fixed "empty body" issue by showing raw body of malformed message (#1486166)
+- Fix importing/sending to email address with whitespace (#1486214)
+- Added XIMSS (CommuniGate) driver for Password plugin
+- Fix newly attached files are not saved in drafts w/o editing any text (#1486202)
+- Added attachment upload indicator with parallel upload (#1486058)
+- Use default_charset for bodies of messages without charset definition (#1486187)
+- Password: added cPanel driver
+- Fix return to first page from e-mail screen (#1486105)
+- Fix handling HTML comments in HTML messages (#1486189)
+- Fix folder/messagelist controls alignment - icons used (#1486072)
+- Fix LDAP addressbook shows 'Contact not found' error sometimes (#1486178)
+- Fix cache status checking + improve cache operations performance (#1486104)
+- Prevent from setting INBOX as any of special folders (#1486114)
+- Fix regular expression for e-mail address (#1486152)
+- Fix Received header format
+- Implemented sorting by message index - added 'index_sort' option (#1485936)
+- Fix dl() use in installer (#1486150)
+- Added 'ldap_debug' option
+- Fix "Empty startup greeting" bug (#1486085)
+- Fix setting user name in 'new_user_identity' plugin (#1486137)
+- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#1485995)
+- Fix all folders checking for new messages with disabled caching (#1486128)
+- Support skins in 'archive' and 'markasjunk' plugins
+- Added 'html_editor' hook (#1486068)
+- Fix DB constraint violation when populating messages cache (#1486052)
+- Password: added password strength options (#1486062)
+- Fix LDAP partial result warning (#1485536)
+- Fix delete in message view deletes permanently with flag_for_deletion=true (#1486101)
+- Use faster/secure mt_rand() (#1486094)
+- Fix roundcube hangs on empty inbox with bincimapd (#1486093)
+- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#1485926)
+- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#1485655)
+- Check 'post_max_size' for upload max filesize (#1486089)
+- Password Plugin: Fix %d inserts username instead of domain (#1486088)
+- Fix rcube_mdb2::affected_rows() (#1486082)
+
+RELEASE 0.3-stable
+------------------
+- Fix gn and givenName should be synonymous in LDAP addressbook (#1485892)
+- Add mail_domain to LDAP email entries without @ sign (#1485201)
+- Fix saving empty values in LDAP contact data (#1485781)
+- Fix LDAP contact update when RDN field is changed (#1485788)
+- Fix LDAP attributes case senitivity problems (#1485830)
+- Fix LDAP addressbook browsing when only one directory is used (#1486022)
+- Fix endless loop on error response for APPEND command (#1486060)
+- Don't require date.timezone setting in installer (#1485989)
+- Fix date sorting problem with Courier IMAP server (#1486065)
+- Unselect pressed buttons on mouse up (#1485987)
+- Don't set php_value error_log in .htaccess but mention in INSTALL (#1485924)
+- Fix too small status/flag/attachment columns in Safari 4 (#1486063)
+- Fix selection disabling while dragging splitter in webkit browsers (#1486056)
+- Added 'new_messages' plugin hook (#1486005)
+- Added 'logout_after' plugin hook (#1486042)
+- Added 'message_compose' hook
+- Added 'imap_connect' hook (#1485956)
+- Fix vcard_attachments plugin (#1486035)
+- Updated PEAR::Auth_SASL to 1.0.3 version
+- Use sequence names only with PostgreSQL (#1486018)
+- Re-designed User Preferences interface
+- Fix MS SQL DDL (#1486020)
+- Fix rcube_mdb2.php: call to setCharset not implemented in mssql driver (#1486019)
+- Added 'display_next' option
+- Fix rcube_mdb2::unixtimestamp for MS SQL (#1486015)
+- Fix HTML washing to respect character encoding
+- Fix endless loop in iil_C_Login() with Courier IMAP (#1486010)
+- Fix #messagemenu display on IE (#1486006)
+- Speedup UI by using sprites for (toolbar) buttons
+- Fix charset names with X- prefix handling
+- Fix displaying of HTML messages with unknown/malformed tags (#1486003)
+
+RELEASE 0.3-RC1
+---------------
+- Fix import of vCard entries with params (#1485453)
+- Fix HTML messages output with empty block elements (#1485974)
+- Use request tokens to protect POST requests from CSRF
+- Added hook when killing a session
+- Added hook to write_log function (#1485971)
+- Performance improvements by use UID commands (#1485690)
+- Fix HTML editor tabIndex setting (#1485972)
+- Added 'imap_debug' and 'smtp_debug' options
+- Support strftime's format modifiers in date_* options (#1484806)
+- Support %h variable in 'smtp_server' option (#1485766)
+- Show SMTP errors in browser (#1485927)
+- Allow WBR tag in HTML message (#1485960)
+- Use spl_autoload_register() instead of __autoload (#1485947)
+- Add hook for identities listing (#1485958)
+- Trigger hook 'smtp_connect' when opening an SMTP connection (#1485954)
+- Added config option to enforce HTTPS connections
+- Fix non-unicode characters caching in unicode database (#1484608)
+- Performance improvements of messages caching
+- Fix empty Date header issue (#1485923)
+- Open collapsed folders during drag & drop (#1485914)
+- Fixed link text replacements (#1485789)
+- Also trigger 'insertrow' events on page load (#1485826)
+- No link on subject in IE browsers (#1484913)
+- Fixed filename encoding according to RFC2231 (#1485875)
+- Added message Edit feature (#1483891, #1484440)
+- Fix message Etag generation for counter issues (#1485623)
+- Fix messages searching on MailEnable IMAP (#1485762)
+- Fixed many 'skip_deleted' issues (#1485634)
+- Fixed messages list sorting on servers without SORT capability
+- Colorized signatures in plain text messages
+- Reviewed/fixed skip_deleted/read_when_deleted/flag_for_deletion options handling in UI
+- Fix displaying of big maximum upload filesize (#1485889)
+- Added possibility to invert messages selection
+- After move/delete from 'show' action display next message instead of messages list (#1485887)
+- Fixed problem with double quote at the end of folder name (#1485884)
+- Speedup UI by using CSS sprites and etags/expires/deflate in Apache config (#1484858,#1485800)
+- Support UID EXPUNGE: remove only moved/deleted messages
+- Add drag cancelling with ESC key (#1484344)
+- Support initial identity name from virtuser_query (#1484003)
+- Added message menu, removed Print and Source buttons
+- Added possibility to save message as .eml file (#1485861)
+- Added 1 minute interval in autosave options (#1485854)
+- Support UTF-7 encoding in messages (#1485832)
+- Better support for malformed character names (#1485758)
+
+RELEASE 0.3-BETA
+----------------
+- Plugin API + jQuery engine
+- Added possibility to encrypt received header, option 'http_received_header_encrypt',
+ added some more logic in encrypt/decrypt functions for security
+- Fix Answered/Forwarded flag setting for messages in subfolders
+- Fix autocomplete problem with capital letters (#1485792)
+- Support UUencode content encoding (#1485839)
+- Minimize chance of race condition in session handling (#1485659, #1484678)
+- Fix session handling on non-session SQL query error (#1485734)
+- Fix html editor mode setting when reopening draft message (#1485834)
+- Added quick search box menu (#1484304)
+- Fix wrong column sort order icons (#1485823)
+- Updated TinyMCE to 3.2.3 version
+- Fix attachment names encoding when charset isn't specified in attachment part (#1484969)
+- Fix message normal priority problem (#1485820)
+- Fix autocomplete spinning wheel does not disappear (#1485804)
+- Added log_date_format option (#1485709)
+- Fix text wrapping in HTML editor after switching from plain text to HTML (#1485521)
+- Fix auto-complete function hangs with plus sign (#1485815)
+- Fix AJAX requests errors handler (#1485000)
+- Speed up message list displaying on IE
+- Fix read/write database recognition (#1485811)
+
+RELEASE 0.2.2
+-------------
+- Fix quicksearchbox look in Chrome and Konqueror (#1484841)
+- Fix UTF-8 byte-order mark removing (#1485514)
+- Fix folders subscribtions on Konqueror (#1484841)
+- Fix debug console on Konqueror and Safari
+- Fix messagelist focus issue when modifying status of selected messages (#1485807)
+- Support STARTTLS in IMAP connection (#1485284)
+- Fix DEL key problem in search boxes (#1485528)
+- Support several e-mail addresses per user from virtuser_file (#1485678)
+- Fix drag&drop with scrolling on IE (#1485786)
+- Fix adding signature separator in html mode (#1485350)
+- Fix opening attachment marks message as read (#1485803)
+- Fix 'temp_dir' does not support relative path under Windows (#1484529)
+- Fix "Initialize Database" button missing from installer (#1485802)
+- Fix compose window doesn't fit 1024x768 window (#1485396)
+- Fix service not available error when pressing back from compose dialog (#1485552)
+- Fix using mail() on Windows (#1485779)
+- Fix word wrapping in message-part's s for printing (#1485787)
+- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#1485714)
+- Fix double footer in HTML message with embedded images
+- Fix TNEF implementation bug (#1485773)
+- Fix incorrect row id parsing for LDAP contacts list (#1485784)
+- Fix 'mode' parameter in sqlite DSN (#1485772)
+
+RELEASE 0.2.1
+------------------
+- Use US-ASCII as failover when Unicode searching fails (#1485762)
+- Fix errors handling in IMAP command continuations (#1485762)
+- Fix FETCH result parsing for servers returning flags at the end of result (#1485763)
+- Fix datetime columns defaults in mysql's DDL (#1485641)
+- Fix attaching more than nine inline images (#1485759)
+- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#1485758)
+- Fix mime-type detection using a hard-coded map (#1485311)
+- Don't return empty string if charset conversion failed (#1485757)
+- Disable concurrent autocomplete query results display (#1485743)
+- Fix new lines stripped from message footer (#1485751)
+- Fix IE problem with mouse click autocomplete (#1485739)
+- Fix html body washing on reply/forward + fix attachments handling (#1485676)
+- Fix multiple recipients input parsing (#1485733)
+- Fix replying to message with html attachment (#1485676)
+- Use default_charset for messages without specified charset (#1485661, #1484961)
+- Support non-standard "GMT-XXXX" literal in date header (#1485729)
+- Added TNEF support to decode MS Outlook attachments (winmail.dat)
+- Fix "value continuation" MIME headers by adding required semicolon (#1485727)
+- Fix pressing select all/unread multiple times (#1485723)
+- Fix selecting all unread does not honor new messages (#1485724)
+- Fix some base64 encoded attachments handling (#1485725)
+- Support NGINX as IMAP backend: better BAD response handling (#1485720)
+- Performance fix: don't fetch attachment parts headers twice to parse filename
+- Fix checking for recent messages on various IMAP servers (#1485702)
+- Performance fix: Don't fetch quota and recent messages in "message view" mode
+- Fix displaying of alternative-inside-alternative messages (#1485713)
+- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#1485706)
+- Fix creation of folders with '&' sign in name
+- Fix parsing of email addresses without angle brackets (#1485693)
+- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on)
+- Fix large search results on server without SORT capability (#1485668)
+- Get rid of preg_replace() with eval modifier and create_function usage (#1485686)
+- Bring back and tags in HTML messages
+- Fix XSS vulnerability through background attributes as reported by Julien Cayssol
+- Fix problems with backslash as IMAP hierarchy delimiter (#1484467)
+- Secure vcard export by getting rid of preg's 'e' modifier use (#1485689)
+- Fix authentication when submitting form with existing session (#1485679)
+- Allow absolute URLs to images in HTML messages/sigs (#1485666)
+- Fix message body which contains both inline attachments and emotions
+- Fix SQL query execution errors handling in rcube_mdb2 class (#1485509)
+- Fix address names with '@' sign handling (#1485654)
+- Improve messages display performance
+- Fix messages searching with 'to:' modifier
+
+RELEASE 0.2-STABLE
+------------------
+- Fix mark popup in IE 7 (#1485369)
+- Fix line-break issue when copy & paste in Firefox (#1485425)
+- Fix autocomplete "unknown server error" (#1485637)
+- Fix STARTTLS before AUTH in SMTP connection (#1484883)
+- Support multiple quota values in QUOTAROOT resonse (#1485626)
+- Only abbreviate file name for IE < 7 browsers (#1485063)
+- Performance: allow setting imap rootdir and delimiter before connect (#1485172)
+- Fix sorting of folders with more than 2 levels (#1485569)
+- Fix search results page jumps in LDAP addressbook (#1485253)
+- Fix empty line before the signature in IE (#1485351)
+- Fix horizontal scrollbar in preview pane on IE (#1484633)
+- Add Robots meta tag in login page and installer (#1484846)
+- Added 'show_images' option, removed 'addrbook_show_images' (#1485597)
+- Option to check for new mails in all folders (#1484374)
+- Don't set client busy when checking for new messages (#1485276)
+- Allow UTF-8 folder names in config (#1485579)
+- Add junk_mbox option configuration in installer (#1485579)
+- Do serverside addressbook queries for autocompletion (#1485531)
+- Allow setting attachment col position in 'list_cols' option
+- Allow override 'list_cols' via skin (#1485577)
+- Fix 'cache' table cleanup on session destroy (#1485516)
+- Increase speed of session destroy and garbage clean up
+- Fix session timeout when DB server got clock skew (#1485490)
+- Fix handling of some malformed messages (#1484438)
+- Speed up raw message body handling
+- Better HTML entities conversion in html2text (#1485519)
+- Fix big memory consumption and speed up searching on servers without SORT capability
+- Fix setting locale to tr_TR, ku and az_AZ (#1485470)
+- Use SORT for searching on servers with SORT capability
+- Added message status filter
+- Fix empty file sending (#1485389)
+- Improved searching with many criterias (calling one SEARCH command)
+- Fix HTML editor initialization on IE (#1485304)
+- Add warning when switching editor mode from html to plain (#1485488)
+- Make identities list scrollable (#1485538)
+- Fix problem with numeric folder names (#1485527)
+- Added BYE response simple support to prevent from endless loops in imap.inc (#1483956)
+- Fix unread message unintentionally marked as read if read_when_deleted=true (#1485409)
+- Remove port number from SERVER_NAME in smtp_helo_host (#1485518)
+- Don't send disposition notification receipts for messages marked as 'read' (#1485523)
+- Added 'keep_alive' and 'min_keep_alive' options (#1485360)
+- Added option 'identities_level', removed 'multiple_identities'
+- Allow deleting identities when multiple_identities=false (#1485435)
+- Added option focus_on_new_message (#1485374)
+- Fix html2text class autoloading on Windows (#1485505)
+- Fix html signature formatting when identity save error occured (#1485426)
+- Add feedback and set busy when moving folder (#1485497)
+- Fix 'Empty' link visibility for some languages e.g. Slovak (#1485489)
+- Fix messages count bar overlapping (#1485270)
+- Fix adding signature in drafts compose mode (#1485484)
+- Fix iil_C_Sort() to support very long and/or divided responses (#1485283)
+- Fix matching case sensitivity when setting identity on reply (#1485480)
+- Prefer default identity on reply
+- Fix imap searching on ISMail server (#1485466)
+- Add css class for flagged messages (#1485464)
+- Write username instead of id in sendmail log (#1485477)
+- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1485475)
+- Fix js keywords escaping in json_serialize() for IE/Opera (#1485472)
+- Added bin/killcache.php script (#1485434)
+- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding()
+- Fix vCard file encoding detection for non-UTF-8 strings (#1485410)
+- Add 'skip_deleted' option in User Preferences (#1485445)
+- Minimize "inline" javascript scripts use (#1485433)
+- Fix css class setting for folders with names matching defined classes names (#1485355)
+- Fix race conditions when changing mailbox
+- Fix spellchecking when switching to html editor (#1485362)
+- Fix compose window width/height (#1485396)
+- Allow calling msgimport.sh/msgexport.sh from any directory (#1485431)
+- Localized filesize units (#1485340)
+- Better handling of "no identity" and "no email in identity" situations (#1485117)
+- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding eg. to be readable in MS Outlook/OE (#1485320)
+- Added "advanced options" feature in User Preferences
+- Fix unread counter when displaying cached massage in preview panel (#1485290)
+- Fix htmleditor spellchecking on MS Windows (#1485397)
+- Fix problem with non-ascii attachment names in Mail_mime (#1485267, #1485096)
+- Fix language autodetection (#1485401)
+- Fix button label in folders management (#1485405)
+- Fix collapsed folder not indicating unread msgs count of all subfolders (#1485403)
+- Fix handling of apostrophes in filenames decoded according to rfc2231
+
+RELEASE 0.2-BETA
+----------------
+- Made config files location configurable (#1485215)
+- Reduced memory footprint when forwarding attachments (#1485345)
+- Allow and use spellcheck attribute for input/textarea fields (#1485060)
+- Added icons for forwarded/forwarded+replied messages (#1485257)
+- Added Reply-To to forwarded emails (#1485315)
+- Display progress message for folders create/delete/rename (#1485357)
+- Smart Tags and NOBR tag support in html messages (#1485363, #1485327)
+- Redesign of the identities settings (#1484042)
+- Add config option to disable creation/deletion of identities (#1484498)
+- Added 'sendmail_delay' option to restrict messages sending interval (#1484491)
+- Added vertical splitter for folders list resizing
+- Added possibility to view all headers in message view
+- Fixed splitter drag/resize on Opera (#1485170)
+- Fixed quota img height/width setting from template (#1484857)
+- Refactor drag & drop functionality. Don't rely on browser events anymore (#1484453)
+- Insert "virtual" folders in subscription list (#1484779)
+- Added link to open message in new window
+- Enable export of address book contacts as vCard
+- Add feature to import contacts from vcard files (#1326103)
+- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946)
+- Allowed max. attachment size now indicated in compose screen (#1485030)
+- Also capture backspace key in list mode (#1484566)
+- Allow application/pgp parts to be displayed (#1484753)
+- Correctly handle options in mailto-links (#1485228)
+- Immediately save sort_col/sort_order in user prefs (#1485265)
+- Truncate very long (above 50 characters) attachment filenames when displaying
+- Allow to auto-detect client language if none set (#1484434)
+- Auto-detect the client timezone (user configurable)
+- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature
+- Fix Reply-To header displaying (#1485314)
+- Mark form buttons that provide the most obvious operation (mainaction)
+- Added option 'quota_zero_as_unlimited' (#1484604)
+- Added PRE handling in html2text class (#1484740)
+- Added folder hierarchy collapsing
+- Added options to use syslog instead of log file (#1484850)
+- Added Logging & Debugging section in Installer
+- Fix In-Reply-To and References headers when composing saved draft message (#1485288)
+- Fix html message charset conversion for charsets with underline (#1485287)
+- Fix buttons status after contacts deletion (#1485233)
+- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1484904)
+- Use current mailbox name in template (#1485256)
+- Better fix for skipping untagged responses (#1485261)
+- Added pspell support patch by Kris Steinhoff (#1483960)
+- Enable spellchecker for HTML editor (#1485114)
+- Respect spellcheck_uri in tinyMCE spellchecker (#1484196)
+- Case insensitive contacts searching using PostgreSQL (#1485259)
+- Make default imap folders configurable for each user (#1485075)
+- Save outgoing mail to selectable folder (#1324581)
+- Fix hiding of mark menu when clicking th button again (#1484944)
+- Use long date format in print mode (#1485191)
+- Updated TinyMCE to version 3.1.0.1
+- Re-enable autocomplete attribute for login form (#1485211)
+- Check PERMANENTFLAGS before saving $MDNSent flag (#1484963, #1485163)
+- Added flag column on messages list (#1484623)
+- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232)
+- Allow trash/junk subfolders to be purged (#1485085)
+- Store compose parameters in session and redirect to a unique URL
+- Fixed CRAM-MD5 authentication (#1484819)
+- Fixed forwarding messages with one HTML attachment (#1484442)
+- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1484914)
+- Added option to select skin in user preferences
+- Added option to configure displaying of attached images below the message body
+- Added option to display images in messages from known senders (#1484601)
+- User preferences grouped in more fieldsets
+- Fix corrupted MIME headers of messages in Sent folder (#1485111)
+- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124
+- Use keypress instead of keydown to select list's row (#1484816)
+- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1485002)
+
+RELEASE 0.2-ALPHA
+-----------------
+- Added option to disable autocompletion from selected LDAP address books (#1484922)
+- TLS support in LDAP connections: 'use_tls' property (#1485104)
+- Fixed removing messages from search set after deleting them (#1485106)
+- imap.inc: Fixed iil_C_FetchStructureString() to handle many
+ literal strings in response (#1484969)
+- Support for subfolders in default/protected folders (#1484665)
+- Disallowed delimiter in folder name (#1484803)
+- Support " and \ in folder names
+- Escape \ in login (#1484614)
+- Better HTML sanitization with the DOM-based washtml script (#1484701)
+- Fixed sorting of folders with non-ascii characters
+- Fixed Mysql DDL for default identities creation (#1485070)
+- In Preferences added possibility to configure 'read_when_deleted',
+ 'mdn_requests', 'flag_for_deletion' options
+- Made IMAP auth type configurable (#1483825)
+- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1485055)
+- Fixed attachment list on IE 6/7 (#1484807)
+- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
+- Make password input fields of type password in installer (#1484886)
+- Don't attempt to delete cache entries if enable_caching is FALSE (#1485051)
+- Optimized messages sorting on servers without sort capability (#1485049)
+- Corrected message headers decoding when charset isn't specified and improved
+ support for native languages (#1485050, #1485048)
+- Expanded LDAP configuration options to support LDAP server writes.
+- Installer: encode special characters in DB username/password (#1485042)
+- Fixed management of folders with national characters in names (#1485036, #1485001)
+- Fixed identities saving when using MDB2 pgsql driver (#1485032)
+- Fixed BCC header reset (#1484997)
+- Improved messages list performance - patch from Justin Heesemann
+- Append skin_path to images location only when it starts with '/' sign (#1484859)
+- Fix IMAP response in message body when message has no body (#1484964)
+- Fixed non-RFC dates formatting (#1484901)
+- Fixed typo in set_charset() (#1484991)
+- Decode entities when inserting HTML signature to plain text message (#1484990)
+- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
+- Fixed signature loading on Windows (#1484545)
+- Added language support to HTML editing (#1484862)
+- Fixed remove signature when replying (#1333167)
+- Fixed problem with line with a space at the end (#1484916)
+- Fixed tag filtering (#1484391)
+- Fixed tag filtering (#1484403)
+- Added sections (fieldset+label) in Settings interface
+- Mark as read in one action with message preview (#1484972)
+- Deleted redundant quota reads (#1484972)
+- Added options for empty trash and expunge inbox on logout (#1483863)
+- Removed lines wrapping when displaying message
+- Fixed month localization
+- Changed codebase to PHP5 with autoloader
+
+RELEASE 0.1.1
+-------------
+- Clear selection when selecting single item (#1484942)
+- Remove hard-coded image size in skin templates (#1484893)
+- Database schema improvements (dropped unnecessary indexes)
+- Fixed creating a new folder with a comma in its name (#1484681)
+- Fixed sorting of messages when default mailbox is empty (#1484317)
+- Improve message previewpane - less loading (#1484316)
+- Fixed login form autoompletion (#1484839)
+- Fixed virtuser_query option for mdb2 backend (#1484874)
+- Fixed attachment resoting from Drafts when message body was empty (#1484506)
+- Fixed usage of ob_gzhandler (#1484851)
+- Fixed message part window in IE6 (#1484610)
+- Fixed decoding of mime-encoded strings (#1484191)
+- Fixed some iconv/mb_string problems (#1484598)
+- Correctly quote mailbox name when using in URL (#1484313)
+- Fixed "headers already sent" errors (#1484860)
+
+RELEASE 0.1-STABLE
+------------------
+- Added interactive installer script
+- Fix folder adding/renaming inspired by #1484800
+- Localize folder name in page title (#1484785)
+- Fix code using wrong variable name (#1484018)
+- Allow to send mail with BCC recipients only
+- condense TinyMCE toolbar down to one line, removing table buttons (#1484747)
+- Add function to mark the selected messages as read/unread (#1457360)
+- Also do charset decoding as suggested in RFC 2231 (fix #1484321)
+- Show message count in folder list and hint when creating a subfolder
+- Distinguish ssl and tls for imap connections (#1484667)
+- Added some charset aliases to fix typical mis-labelling (#1484565)
+- Remember decision to display images for a certain message during session (#1484754)
+- Truncate attachment filenames to 55 characters due to an IE bug (#1484757)
+- Make sending of read receipts configurable
+- Respect config when localize folder names (#1484707)
+- Also respect receipt and priority settings when re-opening a draft message
+- Remember search results (closes #1483883), patch by the_glu
+- Add Received header on outgoing mail
+- Upgrade to TinyMCE 2.1.3
+- Allow inserting image attachments into HTML messages while composing (#1484557)
+- Implement Message-Disposition-Notification (Receipts)
+- Fix overriding of session vars when register_globals is on (#1484670)
+- Fix bug with case-sensitive folder names (#1484245)
+- Don't create default folders by default
+- Fixed some potential security risks (audited by Andris)
+- Only show new messages if they match the current search (#1484176)
+- Switch to/from when searcing in Sent folder (#1484555)
+- Correctly read the References header (#1484646)
+- Unset old cookie before sending a new value (#1484639)
+- Correctly decode attachments when downloading them (#1484645 and #1484642)
+- Suppress IE errors when clearing attachments form (#1484356)
+- Log error when login fails due to auto_create_user turned off
+- Filter linked/imported CSS files (closes #1484056)
+- Improve message compose screen (closes #1484383)
+- Select next row after removing one from list (#1484387)
+
+RELEASE 0.1-RC2
+---------------
+- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#1457344)
+- Suppress IE errors when clearing attachments form (#1484356)
+- Set preferences field in user table to NULL (#1484386)
+- Log error when login fails due to auto_create_user turned off
+- Filter linked/imported CSS files (closes #1484056)
+- Improve message compose screen (closes #1484383)
+- Select next row after removing one from list (#1484387)
+- Make smtp HELO/EHLO hostname configurable (#1484067)
+- IPv6 Compatability (#1484322), Patch #1484373
+- Unlock interface when message sending fails (#1484570)
+- Eval PHP code in template includes (if configured)
+- Show message when folder is empty. Mo more static text in table (#1484395)
+- Only display unread count in page title when new messages arrived
+- Fixed wrong delete button tooltip (#1483965)
+- Fixed charset encoding bug (#1484429)
+- Applied patch for LDAP version (#1484552)
+- Improved XHTML validation
+- Fix message list selection (#1484550)
+- Better fix lowercased usernames (#1484473)
+- Update pngbehavior Script as suggested in #1484490
+- Fixed moving/deleting messages when more than 1 is selected
+- Applied patch for LDAP contacts listing by Glen Ogilvie
+- Applied patch for more address fields in LDAP contacts (#1484402)
+- Add alternative for getallheaders() (fix #1484508)
+- Identify mailboxes case-sensitive
+- Sort mailbox list case-insensitive (closes #1484338)
+- Fix display of multipart messages from Apple Mail (closes #1484027)
+- Protect AJAX request from being fetched by a foreign site (XSS)
+- Make autocomplete for loginform configurable by the skin template
+- Fix compose function from address book (closes #1484426)
+- Added //IGNORE to iconv call (patch #1484420, closes #1484023)
+- Check if mbstring supports charset (#1484290 and #1484292)
+- Prefer iconv over mbstring (as suggested in #1484292)
+- Check filesize of template includes (#1484409)
+- Fixed bug with buttons not dimming/enabling properly after switching folders
+- Fixed compose window becoming unresponsive after saving a draft (#1484487)
+- Re-enabled "Back" button in compose window now that bug #1484487 is fixed
+- Fixed unresponsive interface issue when downloading attachments (#1484496)
+- Lowered status message time from 5 to 3 seconds to improve responsiveness
+- Raised .htaccess upload_max_filesize from 2M to 5M to differ from default php.ini
+- Increased "mailboxcontrols" mail.css width from 160 to 170px to fix non-english languages (#1484499)
+- Fix status message bug #1484464 with regard to #1484353
+- Fix address adding bug reported by David Koblas
+- Applied socket error patch by Thomas Mangin
+- Pass-by-reference workarround for PHP5 in sendmail.inc
+- Fixed buggy imap_root settings (closes #1484379)
+- Prevent default events on subject links (#1484399)
+- Use HTTP-POST requests for actions that change state
+
+RELEASE 0.1-RC1
+---------------
+- Use global filters and bind username/ for Ldap searches (#1484159)
+- Hide quota display if imap server does not support it
+- Hide address groups if no LDAP servers configured
+- Add link to message subjects (closes #1484257)
+- Better SQL query for contact listing/search (closes #1484369)
+- Fixed marking as read in preview pane (closes #1484364)
+- CSS hack to display attachments correctly in IE6
+- Wrap message body text (closes #1484148)
+- LDAP access is back in address book (closes #1484087)
+- Added search function for contacts
+- New Template parsing and output encoding
+- Fixed bugs #1484119 and #1483978
+- Fixed message moving procedure (closes #1484308)
+- Fixed display of multiple attachments (closes #1466563)
+- Fixed check for new messages (closes #1484310)
+- List attachments without filename
+- New session authentication: Change sessid cookie when login, authentication with sessauth cookie is now configurable.
+ Should close bugs #1483951 and #1484299
+- Correctly translate mailbox names (closes #1484276)
+- Quote e-mail address links (closes #1484300)
+- Updated PEAR::Mail_mime package
+- Accept single quotes for HTML attributes when modifying message body (thanks Jason)
+- Sanitize input for new users/identities (thanks Colin Alston)
+- Don't download HTML message parts
+- Convert HTML parts to plaintext if 'prefer_html' is off
+- Correctly parse message/rfc822 parts (closes #1484045)
+- Also use user_id for unique key in messages table (closes #1484074)
+- Hide contacts drop down on blur (closes #1484203)
+- Make entries in contacts drop down clickable
+- Turn off browser autocompletion on login page
+- Quote in text/html message parts
+- Hide border around radio buttons
+- Applied patch for attachment download by crichardson (closes #1484198)
+- Fixed bug in Postgres DB handling (closes #1484068)
+- Fixed bug of invalid calls to fetchRow() in rcube_db.inc (closes #1484280)
+- Fixed array_merge bug (closes #1484281)
+- Fixed flag for deletion in list view (closes #1484264)
+- Finally support semicolons as recipient separator (closes ##1484251)
+- Fixed message headers (subject) encoding
+- check if safe mode is on or not (closes #1484269)
+- Show "no subject" in message list if subject is missing (closes #1484243)
+- Solved page caching of message preview (closes #1484153)
+- Only use gzip compression if configured (closes #1484236)
+- Fixed priority selector issue (#1484150)
+- Fixed some CSS issues in default skin (closes #1484210 and #1484161)
+- Prevent from double quoting of numeric HTML character references (closes #1484253)
+- Fixed display of HTML message attachments (closes #1484178)
+- Applied patch for preview caching (closes #1484186)
+- Added error handling for attachment uploads
+- Use multibyte safe string functions where necessary (closes #1483988)
+- Applied security patch to validate the submitted host value (by Kees Cook)
+- Applied security patch to validate input values when deleting contacts (by Kees Cook)
+- Applied security patch that sanitizes emoticon paths when attaching them (by Kees Cook)
+- Applied a patch to more aggressively sanitize a HTML message
+- Visualize blocked images in HTML messages
+- Fixed wrong message listing when showing search results (closes #1484131)
+- Show remote images when opening HTML message part as attachment
+- Improve memory usage when sending mail (closes #1484098)
+- Mark messages as read once the preview is loaded (closes #1484132)
+- Include smtp final response in log (closes #1484081)
+- Corrected date string in sent message header (closes #1484125)
+- Correclty choose "To" column in sent and draft mailboxes (closes #1483943)
+- Changed srong tooltips for message browse buttons (closes #1483930)
+- Fixed signature delimeter character to be standard (Bug #1484035)
+- Fixed XSS vulnerability (Bug #1484109)
+- Remove newlines from mail headers (Bug #1484031)
+- Selection issues when moving/deleting (Bug #1484044)
+- Applied patch of Clement Moulin for imap host auto-selection
+- ISO-encode IMAP password for plaintext login (Bugs #1483977 & #1483886)
+- Fixed folder name encoding in subscription list (Bug #1484113)
+- Fixed JS errors in identity list (Bug #1484120)
+- Translate foldernames in folder form (closes #1484113)
+- Added first and last buttons to message list, address book
+ and message detail
+- Pressing Shift-Del bypasses Trash folder
+- Enable purge command for Junk folder
+- Fetch all aliases if virtuser_query is used instead
+- Re-enabled multi select of contacts (Bug #1484017)
+- Enable contact editing right after creation (Bug #1459641)
+- Correct UTF-7 to UTF-8 conversion if mbstring is not available
+- Fixed IMAP fetch of message body (Bug #1484019)
+- Fixed safe_mode problems (Bug #1418381)
+- Fixed wrong header encoding (Bug #1483976)
+- Made automatic draft saving configurable
+- Fixed JS bug when renaming folders (Bug #1483989)
+- Added quota display as image (by Brett Patterson)
+- Corrected creation of a message-id
+- New indentation for quoted message text
+- Improved HTML validity
+- Fixed URL character set (Ticket #1445501)
+- Fixed saving of contact into MySQL from LDAP query results (Ticket #1483820)
+- Fixed folder renaming: unsubscribe before rename (Bug #1483920)
+- Finalized new message parsing (+ chaching)
+- Fixed wrong usage of mbstring (Bug #1462439)
+- Set default spelling language (Ticket #1483938)
+- Added support for Nox Spell Server
+- Re-built message parsing (Bug #1327068)
+ Now based on the message structure delivered by the IMAP server.
+- Fixed some XSS and SQL injection issues
+- Fixed charset problems with folder renaming
diff --git a/INSTALL b/INSTALL
index 3fc6f5d..c2cb29c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,17 +13,15 @@ REQUIREMENTS
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 5.2.1 or greater including
- PCRE, DOM, JSON, XML, Session, Sockets (required)
- - Libiconv
- - Multibyte String (mbstring)
- - Mcrypt (supporting Triple DES)
- - Fileinfo (optional)
- - Database driver for either MySQL, Postgres or SQLite
-* The PEAR framework with the following packages installed:
+ - libiconv (recommended)
+ - mbstring, fileinfo, mcrypt (optional)
+* PEAR packages distributed with Roundcube or external:
- MDB2 2.5.0 or newer
- Mail_Mime 1.8.1 or newer
+ - Mail_mimeDecode 1.5.5 or newer
- Net_SMTP 1.4.2 or newer
- Net_IDNA2 0.1.1 or newer
- - Auth_SASL 1.0.3 or newer
+ - Auth_SASL 1.0.6 or newer
* php.ini options (see .htaccess file):
- error_reporting E_ALL & ~E_NOTICE (or lower)
- memory_limit > 16MB (increase as suitable to support large attachments)
@@ -33,6 +31,7 @@ REQUIREMENTS
- suhosin.session.encrypt disabled
- mbstring.func_overload disabled
- magic_quotes_runtime disabled
+ - magic_quotes_sybase disabled
* PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker
* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine
or the SQLite extension for PHP
diff --git a/INSTALL.orig b/INSTALL.orig
deleted file mode 100644
index 493baf7..0000000
--- a/INSTALL.orig
+++ /dev/null
@@ -1,233 +0,0 @@
-INTRODUCTION
-============
-
-This file describes the basic steps to install Roundcube Webmail on your
-web server. For additional information, please also consult the project's
-wiki page at http://trac.roundcube.net/wiki
-
-
-REQUIREMENTS
-============
-
-* The Apache, Lighttpd, Cherokee or Hiawatha web server
-* .htaccess support allowing overrides for DirectoryIndex
-* PHP Version 5.2.1 or greater including
- - PCRE, DOM, JSON, XML, Session, Sockets (required)
- - libiconv (recommended)
- - mbstring, fileinfo, mcrypt (optional)
-* PEAR packages distributed with Roundcube or external:
- - MDB2 2.5.0 or newer
- - Mail_Mime 1.8.1 or newer
- - Net_SMTP 1.4.2 or newer
- - Net_IDNA2 0.1.1 or newer
- - Auth_SASL 1.0.3 or newer
-* php.ini options (see .htaccess file):
- - error_reporting E_ALL & ~E_NOTICE (or lower)
- - memory_limit > 16MB (increase as suitable to support large attachments)
- - file_uploads enabled (for attachment upload features)
- - session.auto_start disabled
- - zend.ze1_compatibility_mode disabled
- - suhosin.session.encrypt disabled
- - mbstring.func_overload disabled
- - magic_quotes_runtime disabled
-* PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker
-* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine
- or the SQLite extension for PHP
-* One of the above databases with permission to create tables
-* An SMTP server (recommended) or PHP configured for mail delivery
-
-
-INSTALLATION
-============
-
-1. Decompress and put this folder somewhere inside your document root
-2. Make sure that the following directories (and the files within)
- are writable by the webserver
- - /temp
- - /logs
-3. Create a new database and a database user for Roundcube (see DATABASE SETUP)
-4. Point your browser to http://url-to-roundcube/installer/
-5. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
-6. After creating and testing the configuration, remove the installer directory
-7. Done!
-
-
-CONFIGURATION HINTS
-===================
-
-Roundcube writes internal errors to the 'errors' log file located in the logs
-directory which can be configured in config/main.inc.php. If you want ordinary
-PHP errors to be logged there as well, enable the 'php_value error_log' line
-in the .htaccess file and set the path to the log file accordingly.
-
-By default the session_path settings of PHP are not modified by Roundcube.
-However if you want to limit the session cookies to the directory where
-Roundcube resides you can uncomment and configure the according line
-in the .htaccess file.
-
-
-DATABASE SETUP
-==============
-
-Note: Database for Roundcube must use UTF-8 character set.
-
-* MySQL
--------
-Setting up the mysql database can be done by creating an empty database,
-importing the table layout and granting the proper permissions to the
-roundcube user. Here is an example of that procedure:
-
-# mysql
-> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
-> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
- IDENTIFIED BY 'password';
-> quit
-
-# mysql roundcubemail < SQL/mysql.initial.sql
-
-Note 1: 'password' is the master password for the roundcube user. It is strongly
-recommended you replace this with a more secure password. Please keep in
-mind: You need to specify this password later in 'config/db.inc.php'.
-
-
-* SQLite
---------
-You need sqlite 2 (preferably 2.8) to setup the sqlite db
-(sqlite 3.x also doesn't work at the moment). Here is
-an example how you can setup the sqlite.db for roundcube:
-
-# sqlite -init SQL/sqlite.initial.sql sqlite.db
-Loading resources from SQL/sqlite.initial.sql
-SQLite version 2.8.16
-Enter ".help" for instructions
-sqlite> .exit
-# chmod o+rw sqlite.db
-
-Make sure your configuration points to the sqlite.db file and that the
-webserver can write to the file and the directory containing the file.
-
-
-* PostgreSQL
-------------
-To use Roundcube with PostgreSQL support you have to follow these
-simple steps, which have to be done as the postgres system user (or
-which ever is the database superuser):
-
-$ createuser roundcube
-$ createdb -O roundcube -E UNICODE roundcubemail
-$ psql roundcubemail
-
-roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password';
-roundcubemail =# \c - roundcube
-roundcubemail => \i SQL/postgres.initial.sql
-
-All this has been tested with PostgreSQL 8.x and 7.4.x. Older
-versions don't have a -O option for the createdb, so if you are
-using that version you'll have to change ownership of the DB later.
-
-
-Database cleaning
------------------
-Do keep your database slick and clean we recommend to periodically execute
-bin/cleandb.sh which finally removes all records that are marked as deleted.
-Best solution is to install a cronjob running this script daily.
-
-
-
-MANUAL CONFIGURATION
-====================
-
-First of all, rename the files config/*.inc.php.dist to config/*.inc.php.
-You can then change these files according to your environment and your needs.
-Details about the config parameters can be found in the config files.
-See http://trac.roundcube.net/wiki/Howto_Install for even more guidance.
-
-You can also modify the default .htaccess file. This is necessary to
-increase the allowed size of file attachments, for example:
- php_value upload_max_filesize 2M
-
-
-UPGRADING
-=========
-
-If you already have a previous version of Roundcube installed,
-please refer to the instructions in UPGRADING guide.
-
-
-OPTIMISING
-==========
-
-There are two forms of optimisation here, compression and caching, both aimed
-at increasing an end user's experience using Roundcube Webmail. Compression
-allows the static web pages to be delivered with less bandwidth. The index.php
-of Roundcube Webmail already enables compression on its output. The settings
-below allow compression to occur for all static files. Caching sets HTTP
-response headers that enable a user's web client to understand what is static
-and how to cache it.
-
-The caching directives used are:
- * Etags - sets at tag so the client can request is the page has changed
- * Cache-control - defines the age of the page and that the page is 'public'
- This enables clients to cache javascript files that don't have private
- information between sessions even if using HTTPS. It also allows proxies
- to share the same cached page between users.
- * Expires - provides another hint to increase the lifetime of static pages.
-
-For more information refer to RFC 2616.
-
-Side effects:
--------------
-These directives are designed for production use. If you are using this in
-a development environment you may get horribly confused if your webclient
-is caching stuff that you changed on the server. Disabling the expires
-parts below should save you some grief.
-
-If you are changing the skins, it is recommended that you copy content to
-a different directory apart from 'default'.
-
-Apache:
--------
-To enable these features in apache the following modules need to be enabled:
- * mod_deflate
- * mod_expires
- * mod_headers
-
-The optimisation is already included in the .htaccess file in the top
-directory of your installation.
-
-If you are using Apache version 2.2.9 and later, in the .htaccess file
-change the 'append' word to 'merge' for a more correct response. Keeping
-as 'append' shouldn't cause any problems though changing to merge will
-eliminate the possibility of duplicate 'public' headers in Cache-control.
-
-Lighttpd:
----------
-With Lightty the addition of Expire: tags by mod_expire is incompatible with
-the addition of "Cache-control: public". Using Cache-control 'public' is
-used below as it is assumed to give a better caching result.
-
-Enable modules in server.modules:
- "mod_setenv"
- "mod_compress"
-
-Mod_compress is a server side cache of compressed files to improve its performance.
-
-$HTTP["host"] == "www.example.com" {
-
- static-file.etags = "enable"
- # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails
- etag.use-mtime = "enable"
-
- # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv
- $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" {
- setenv.add-response-header = ( "Cache-Control" => "public, max-age=2592000")
- }
-
- # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress
- # set compress.cache-dir to somewhere outside the docroot.
- compress.cache-dir = var.statedir + "/cache/compress"
-
- compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")
-}
-
-
diff --git a/LICENSE b/LICENSE
index d511905..94a9ed0 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,285 +1,626 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
- Preamble
+ Preamble
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
this License.
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -287,15 +628,15 @@ free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
+state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -303,37 +644,31 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ .
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README b/README
deleted file mode 100644
index 3af0a1f..0000000
--- a/README
+++ /dev/null
@@ -1,60 +0,0 @@
-Roundcube Webmail (http://roundcube.net)
-
-
-Introduction:
--------------
-Roundcube Webmail is a browser-based multilingual IMAP client with an
-application-like user interface. It provides full functionality you expect
-from an e-mail client, including MIME support, address book, folder management,
-message searching and spell checking. Roundcube Webmail is written in PHP and
-requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is
-easily extendable and the user interface is fully customizable using skins
-which are pure XHTML and CSS 2.
-
-This project includes other open-source classes/libraries from PEAR
-(http://pear.php.net), an IMAP library derived from IlohaMail
-the TinyMCE rich text editor, Googiespell library for spell checking
-or the HTML sanitizer by Frederic Motte.
-
-The current default skin uses icons designed by Stephen Horlander and Kevin
-Gerich for Mozilla.org.
-
-
-Installation:
--------------
-For detailed instructions on how to install Roundcube webmail on your server,
-please refer to the INSTALL document in the same directory as this document.
-Please carefully read the REQUIREMENTS section of the INSTALL instructions.
-
-If you're updating an older version of Roundcube please follow the steps
-described in the UPGRADING file.
-
-
-Licensing:
-----------
-This product is distributed under the GNU General Public License Version 2.
-Please read through the file LICENSE for more information about our license.
-
-Even if skins might contain some programming work, they are not considered
-as a linked part of the application and therefore skins DO NOT fall under
-the provisions of the GPL license. See the README file located in the skins
-folder for details on the skin license.
-
-
-Contribution:
--------------
-Want to help make Roundcube the best webmail solution ever?
-Roundcube is open source software. Our developers and contributors all
-are volunteers and we're always looking for new additions and resources.
-For more information visit http://roundcube.net/contribute
-
-
-Contact:
---------
-For any bug reports or feature requests please refer to the tracking system
-at trac.roundcube.net (http://trac.roundcube.net/wiki/Howto_ReportIssues) or
-subscribe to our mailing list. See http://roundcube.net/support
-for details.
-
-You're always welcome to send a message to the project admin:
-hello@roundcube.net
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b6c3811
--- /dev/null
+++ b/README.md
@@ -0,0 +1,93 @@
+Roundcube Webmail
+=================
+[roundcube.net](http://roundcube.net)
+
+
+INTRODUCTION
+------------
+Roundcube Webmail is a browser-based multilingual IMAP client with an
+application-like user interface. It provides full functionality you expect
+from an email client, including MIME support, address book, folder management,
+message searching and spell checking. Roundcube Webmail is written in PHP and
+requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is
+easily extendable and the user interface is fully customizable using skins
+which are pure XHTML and CSS 2.
+
+The code is mainly written in PHP and is designed to run on a webserver.
+It includes other open-source classes/libraries from [PEAR][pear],
+an IMAP library derived from [IlohaMail][iloha] the [TinyMCE][tinymce] rich
+text editor, [Googiespell][googiespell] library for spell checking or
+the [WASHTML][washtml] sanitizer by Frederic Motte.
+
+The current default skin uses icons designed by Stephen Horlander and [Kevin
+Gerich][kmgerich] for Mozilla.org.
+
+
+INSTALLATION
+------------
+For detailed instructions on how to install Roundcube webmail on your server,
+please refer to the INSTALL document in the same directory as this document.
+
+If you're updating an older version of Roundcube please follow the steps
+described in the UPGRADING file.
+
+
+LICENSE
+-------
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License (**with exceptions
+for skins & plugins**) as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see [www.gnu.org/licenses/][gpl].
+
+This file forms part of the Roundcube Webmail Software for which the
+following exception is added: Plugins and Skins which merely make
+function calls to the Roundcube Webmail Software, and for that purpose
+include it by reference shall not be considered modifications of
+the software.
+
+If you wish to use this file in another project or create a modified
+version that will not be part of the Roundcube Webmail Software, you
+may remove the exception above and use this source code under the
+original version of the license.
+
+For more details about licensing and the exceptions for skins and plugins
+see [roundcube.net/license][license]
+
+
+CONTRIBUTION
+------------
+Want to help make Roundcube the best webmail solution ever?
+Roundcube is open source software. Our developers and contributors all
+are volunteers and we're always looking for new additions and resources.
+For more information visit [roundcube.net/contribute][contrib]
+
+
+CONTACT
+-------
+For any bug reports or feature requests please refer to the tracking system
+at [trac.roundcube.net][tracreport] or subscribe to our mailing list.
+See [roundcube.net/support][support] for details.
+
+You're always welcome to send a message to the project admin:
+hello(at)roundcube(dot)net
+
+
+[pear]: http://pear.php.net
+[iloha]: http://sourceforge.net/projects/ilohamail/
+[tinymce]: http://www.tinymce.com/
+[googiespell]: http://orangoo.com/labs/GoogieSpell/
+[washtml]: http://www.ubixis.com/washtml/
+[kmgerich]: http://kmgerich.com/
+[gpl]: http://www.gnu.org/licenses/
+[license]: http://roundcube.net/license
+[contrib]: http://roundcube.net/contribute
+[support]: http://roundcube.net/support
+[tracreport]: http://trac.roundcube.net/wiki/Howto_ReportIssues
diff --git a/SQL/mssql.initial.sql b/SQL/mssql.initial.sql
index 72c24f1..2ac6aa6 100644
--- a/SQL/mssql.initial.sql
+++ b/SQL/mssql.initial.sql
@@ -40,7 +40,7 @@ CREATE TABLE [dbo].[contacts] (
[changed] [datetime] NOT NULL ,
[del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,
[name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
- [email] [text] COLLATE Latin1_General_CI_AI NOT NULL ,
+ [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL ,
[firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
[surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,
[vcard] [text] COLLATE Latin1_General_CI_AI NULL ,
diff --git a/SQL/mssql.upgrade.sql b/SQL/mssql.upgrade.sql
index d4a5e41..d111ef3 100644
--- a/SQL/mssql.upgrade.sql
+++ b/SQL/mssql.upgrade.sql
@@ -246,6 +246,19 @@ GO
-- Updates from version 0.7
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL
GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
+-- Updates from version 0.8-rc
+ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
+GO
+ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL
+GO
+ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
+GO
+
\ No newline at end of file
diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql
index 177ba93..300ceb5 100644
--- a/SQL/mysql.update.sql
+++ b/SQL/mysql.update.sql
@@ -147,6 +147,8 @@ TRUNCATE TABLE `cache`;
-- Updates from version 0.6
+/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
+
ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL;
ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
@@ -209,6 +211,8 @@ CREATE TABLE `cache_messages` (
PRIMARY KEY (`user_id`, `mailbox`, `uid`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
+/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
+
-- Updates from version 0.7-beta
ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL;
diff --git a/UPGRADING b/UPGRADING
index ce951d1..babe168 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -32,17 +32,18 @@ it on a unix system, you need to do the following operations by hand:
- ./bin/
- ./SQL/
- ./program/
- - ./installer/
- - ./skins/default/
- - ./plugins/
-2. Run ./bin/update.sh from the commandline OR
+2. rsync the contents of the following folders from your installation
+ directory into the target folder:
+ ./skins/
+ ./plugins/
+3. Run ./bin/update.sh from the commandline OR
open http://url-to-roundcube/installer/ in a browser and choose "3 Test config".
To enable the latter one, you have to temporary set 'enable_installer'
to true in your local config/main.inc.php file.
-3. Let the update script/installer check your configuration and
+4. Let the update script/installer check your configuration and
update your config files and database schema as suggested by the updater.
-4. Make sure 'enable_installer' is set to false again.
-5. See Post-Upgrade Activities section.
+5. Make sure 'enable_installer' is set to false again.
+6. See Post-Upgrade Activities section.
Post-Upgrade Activities
diff --git a/bin/cleandb.sh b/bin/cleandb.sh
index a1b38d0..174cbb1 100755
--- a/bin/cleandb.sh
+++ b/bin/cleandb.sh
@@ -7,7 +7,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2010, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Finally remove all db records marked as deleted some time ago |
@@ -16,7 +19,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: cleandb.sh 4677 2011-04-20 13:10:45Z alec $
+ $Id$
*/
diff --git a/bin/decrypt.sh b/bin/decrypt.sh
index 75269ef..d257f9b 100755
--- a/bin/decrypt.sh
+++ b/bin/decrypt.sh
@@ -7,7 +7,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2009, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Decrypt the encrypted parts of the HTTP Received: headers |
@@ -16,7 +19,7 @@
| Author: Tomas Tevesz |
+-----------------------------------------------------------------------+
- $Id: decrypt.sh 4677 2011-04-20 13:10:45Z alec $
+ $Id$
*/
/*-
diff --git a/bin/dumpschema.sh b/bin/dumpschema.sh
deleted file mode 100755
index 9240bf3..0000000
--- a/bin/dumpschema.sh
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env php
- |
- +-----------------------------------------------------------------------+
-
- $Id: dumpschema.sh 4677 2011-04-20 13:10:45Z alec $
-
-*/
-
-define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
-
-require INSTALL_PATH.'program/include/clisetup.php';
-
-/** callback function for schema dump **/
-function print_schema($dump)
-{
- foreach ((array)$dump as $part)
- echo $dump . "\n";
-}
-
-$config = new rcube_config();
-
-// don't allow public access if not in devel_mode
-if (!$config->get('devel_mode') && $_SERVER['REMOTE_ADDR']) {
- header("HTTP/1.0 401 Access denied");
- die("Access denied!");
-}
-
-$options = array(
- 'use_transactions' => false,
- 'log_line_break' => "\n",
- 'idxname_format' => '%s',
- 'debug' => false,
- 'quote_identifier' => true,
- 'force_defaults' => false,
- 'portability' => false,
-);
-
-$dsnw = $config->get('db_dsnw');
-$dsn_array = MDB2::parseDSN($dsnw);
-
-// set options for postgres databases
-if ($dsn_array['phptype'] == 'pgsql') {
- $options['disable_smart_seqname'] = true;
- $options['seqname_format'] = '%s';
-}
-
-$schema =& MDB2_Schema::factory($dsnw, $options);
-$schema->db->supported['transactions'] = false;
-
-
-// send as text/xml when opened in browser
-if ($_SERVER['REMOTE_ADDR'])
- header('Content-Type: text/xml');
-
-
-if (PEAR::isError($schema)) {
- $error = $schema->getMessage() . ' ' . $schema->getUserInfo();
-}
-else {
- $dump_config = array(
- // 'output_mode' => 'file',
- 'output' => 'print_schema',
- );
-
- $definition = $schema->getDefinitionFromDatabase();
- $definition['charset'] = 'utf8';
-
- if (PEAR::isError($definition)) {
- $error = $definition->getMessage() . ' ' . $definition->getUserInfo();
- }
- else {
- $operation = $schema->dumpDatabase($definition, $dump_config, MDB2_SCHEMA_DUMP_STRUCTURE);
- if (PEAR::isError($operation)) {
- $error = $operation->getMessage() . ' ' . $operation->getUserInfo();
- }
- }
-}
-
-$schema->disconnect();
-
-if ($error && !$_SERVER['REMOTE_ADDR'])
- fputs(STDERR, $error);
-
-?>
diff --git a/bin/exportgettext.sh b/bin/exportgettext.sh
new file mode 100755
index 0000000..c1e6302
--- /dev/null
+++ b/bin/exportgettext.sh
@@ -0,0 +1,236 @@
+#!/usr/bin/env php
+ |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
+require INSTALL_PATH.'program/include/clisetup.php';
+
+if ($argc < 2) {
+ die("Usage: " . basename($argv[0]) . " SRCDIR DESTDIR\n");
+}
+
+$srcdir = unslashify(realpath($argv[1]));
+$destdir = unslashify($argv[2]);
+$layout = 'launchpad'; # or 'narro';
+$langcode_map = array(
+ 'hy_AM' => 'hy',
+ 'ar_SA' => 'ar',
+ 'az_AZ' => 'az',
+ 'bg_BG' => 'bg',
+ 'bs_BA' => 'bs',
+ 'ca_ES' => 'ca',
+ 'cs_CZ' => 'cs',
+ 'cy_GB' => 'cy',
+ 'da_DK' => 'da',
+ 'et_EE' => 'et',
+ 'el_GR' => 'el',
+ 'eu_ES' => 'eu',
+ 'fa_IR' => 'fa',
+ 'ga_IE' => 'ga',
+ 'ka_GE' => 'ka',
+ 'gl_ES' => 'gl',
+ 'he_IL' => 'he',
+ 'hi_IN' => 'hi',
+ 'hr_HR' => 'hr',
+ 'ja_JP' => 'ja',
+ 'ko_KR' => 'ko',
+ 'km_KH' => 'km',
+ 'ms_MY' => 'ms',
+ 'mr_IN' => 'mr',
+ 'pl_PL' => 'pl',
+ 'si_LK' => 'si',
+ 'sl_SI' => 'sl',
+ 'sq_AL' => 'sq',
+ 'sr_CS' => 'sr',
+ 'sv_SE' => 'sv',
+ 'uk_UA' => 'uk',
+ 'vi_VN' => 'vi',
+);
+
+
+// converting roundcube localization dir
+if (is_dir($srcdir.'/en_US')) {
+ load_en_US($srcdir.'/en_US');
+
+ foreach (glob($srcdir.'/*') as $locdir) {
+ if (is_dir($locdir)) {
+ $lang = basename($locdir);
+ //echo "$locdir => $destdir$lang\n";
+ convert_dir($locdir, $destdir . ($layout != 'launchpad' ? $lang : ''));
+ }
+ }
+}
+// converting single localization directory
+else if (is_dir($srcdir)) {
+ if (is_file($srcdir.'/en_US.inc')) // plugin localization
+ load_en_US($srcdir.'/en_US.inc');
+ else
+ load_en_US(realpath($srcdir.'/../en_US')); // single language
+ convert_dir($srcdir, $destdir);
+}
+// converting a single file
+else if (is_file($srcdir)) {
+ //load_en_US();
+ convert_file($srcdir, $destdir);
+}
+
+
+/**
+ * Load en_US localization which is used to build msgids
+ */
+function load_en_US($fn)
+{
+ $texts = array();
+
+ if (is_dir($fn)) {
+ foreach (glob($fn.'/*.inc') as $ifn) {
+ include($ifn);
+ $texts = array_merge($texts, (array)$labels, (array)$messages);
+ }
+ }
+ else if (is_file($fn)) {
+ include($fn);
+ $texts = array_merge($texts, (array)$labels, (array)$messages);
+ }
+
+ $GLOBALS['en_US'] = $texts;
+}
+
+/**
+ * Convert all .inc files in the given src directory
+ */
+function convert_dir($indir, $outdir)
+{
+ global $layout;
+
+ if (!is_dir($outdir)) // attempt to create destination dir
+ mkdir($outdir, 0777, true);
+
+ foreach (glob($indir.'/*.inc') as $fn) {
+ $filename = basename($fn);
+
+ // create subdir for each template (launchpad rules)
+ if ($layout == 'launchpad' && preg_match('/^(labels|messages)/', $filename, $m)) {
+ $lang = end(explode('/', $indir));
+ $destdir = $outdir . '/' . $m[1];
+ if (!is_dir($destdir))
+ mkdir($destdir, 0777, true);
+ $outfn = $destdir . '/' . $lang . '.po';
+ }
+ else {
+ $outfn = $outdir . '/' . preg_replace('/\.[a-z0-9]+$/i', '', basename($fn)) . '.po';
+ }
+
+ convert_file($fn, $outfn);
+ }
+}
+
+/**
+ * Convert the given Roundcube localization file into a gettext .po file
+ */
+function convert_file($fn, $outfn)
+{
+ global $layout, $langcode_map;
+
+ $basename = basename($fn);
+ $srcname = str_replace(INSTALL_PATH, '', $fn);
+ $product = preg_match('!plugins/(\w+)!', $srcname, $m) ? 'roundcube-plugin-' . $m[1] : 'roundcubemail';
+ $lang = preg_match('!/([a-z]{2}(_[A-Z]{2})?)[./]!', $outfn, $m) ? $m[1] : '';
+ $labels = $messages = $seen = array();
+
+ if (is_dir($outfn))
+ $outfn .= '/' . $basename . '.po';
+
+ // launchpad requires the template file to have the same name as the directory
+ if (strstr($outfn, '/en_US') && $layout == 'launchpad') {
+ $a = explode('/', $outfn);
+ array_pop($a);
+ $templ = end($a);
+ $a[] = $templ . '.pot';
+ $outfn = join('/', $a);
+ $is_pot = true;
+ }
+ // launchpad is very picky about file names
+ else if ($layout == 'launchpad' && preg_match($regex = '!/([a-z]{2})_([A-Z]{2})!', $outfn, $m)) {
+ if ($shortlang = $langcode_map[$lang])
+ $outfn = preg_replace($regex, '/'.$shortlang, $outfn);
+ else if ($m[1] == strtolower($m[2]))
+ $outfn = preg_replace($regex, '/\1', $outfn);
+ }
+
+ include($fn);
+ $texts = array_merge($labels, $messages);
+
+ // write header
+ $header = <<\\n"
+"Language: %s\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+EOF;
+
+ $out = sprintf($header, $srcname, $product, $is_pot ? "POT-Creation-Date" : "PO-Revision-Date", date('c'), $shortlang ? $shortlang : $lang);
+ $out .= "\n";
+
+ $messages = array();
+ foreach ((array)$texts as $label => $msgstr) {
+ $msgid = $is_pot ? $msgstr : ($GLOBALS['en_US'][$label] ?: $label);
+ $messages[$msgid][] = $label;
+ }
+
+ foreach ($messages as $msgid => $labels) {
+ $out .= "\n";
+ foreach ($labels as $label)
+ $out .= "#: $srcname:$label\n";
+ $msgstr = $texts[$label];
+ $out .= 'msgid ' . gettext_quote($msgid) . "\n";
+ $out .= 'msgstr ' . gettext_quote(!$is_pot ? $msgstr : '') . "\n";
+ }
+
+ if ($outfn == '-')
+ echo $out;
+ else {
+ echo "$fn\t=>\t$outfn\n";
+ file_put_contents($outfn, $out);
+ }
+}
+
+function gettext_quote($str)
+{
+ $out = "";
+ $lines = explode("\n", wordwrap(stripslashes($str)));
+ $last = count($lines) - 1;
+ foreach ($lines as $i => $line)
+ $out .= '"' . addcslashes($line, '"') . ($i < $last ? ' ' : '') . "\"\n";
+ return rtrim($out);
+}
+
+?>
diff --git a/bin/importgettext.sh b/bin/importgettext.sh
new file mode 100755
index 0000000..cda1f6e
--- /dev/null
+++ b/bin/importgettext.sh
@@ -0,0 +1,199 @@
+#!/usr/bin/env php
+ |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
+require INSTALL_PATH.'program/include/clisetup.php';
+
+if ($argc < 2) {
+ die("Usage: " . basename($argv[0]) . " SRCDIR\n");
+}
+
+$srcdir = unslashify(realpath($argv[1]));
+
+if (is_dir($srcdir)) {
+ $out = import_dir($srcdir);
+}
+else if (is_file($srcdir)) {
+ $out = import_file($srcdir);
+}
+
+// write output files
+foreach ($out as $outfn => $texts) {
+ $lang = preg_match('!/([a-z]{2}(_[A-Z]{2})?)[./]!', $outfn, $m) ? $m[1] : '';
+ $varname = strpos($outfn, 'messages.inc') !== false ? 'messages' : 'labels';
+
+ $header = <</i', '', $texts['_translator']);
+ $output = sprintf($header, $lang, $varname.'.inc', date('Y'), $author, $varname);
+
+ foreach ($texts as $label => $value) {
+ if (is_array($value)) { var_dump($outfn, $label, $value); exit; }
+ if ($label[0] != '_' && strlen($value))
+ $output .= sprintf("\$%s['%s'] = '%s';\n", $varname, $label, strtr(addcslashes($value, "'"), array("\r" => '', "\n" => '\n')));
+ }
+
+ $output .= "\n";
+ $dir = dirname($outfn);
+ @mkdir($dir, 664, true);
+ if (file_put_contents($outfn, $output))
+ echo "-> $outfn\n";
+}
+
+
+/**
+ * Convert all .po files in the given src directory
+ */
+function import_dir($indir)
+{
+ $out = array();
+ foreach (glob($indir.'/*.po') as $fn) {
+ $out = array_merge_recursive($out, import_file($fn));
+ }
+ return $out;
+}
+
+/**
+ * Convert the given .po file into a Roundcube localization array
+ */
+function import_file($fn)
+{
+ $out = array();
+ $lines = file($fn);
+ $language = '';
+ $translator = '';
+
+ // get language code from file name
+ if (preg_match('/-([a-z_]+).po$/i', $fn, $m))
+ $language = expand_langcode($m[1]);
+
+ $is_header = true;
+ $msgid = null;
+ $msgstr = '';
+ $dests = array();
+ foreach ($lines as $i => $line) {
+ $line = trim($line);
+
+ // parse header
+ if ($is_header && $line[0] == '"') {
+ list($key, $val) = explode(": ", preg_replace('/\\\n$/', '', trim($line, '"')), 2);
+ switch (strtolower($key)) {
+ case 'language':
+ $language = expand_langcode($val);
+ break;
+ case 'last-translator':
+ $translator = $val;
+ break;
+ }
+ }
+
+ // empty line
+ if ($line == '') {
+ if ($msgid && $dests) {
+ foreach ($dests as $dest) {
+ list($file, $label) = explode(':', $dest);
+ $out[$file][$label] = $msgstr;
+ }
+ }
+
+ $msgid = null;
+ $msgstr = '';
+ $dests = array();
+ }
+
+ // meta line
+ if ($line[0] == '#') {
+ $value = trim(substr($line, 2));
+ if ($line[1] == ':')
+ $dests[] = str_replace('en_US', $language, $value);
+ }
+ else if (strpos($line, 'msgid') === 0) {
+ $msgid = gettext_decode(substr($line, 6));
+
+ if (!empty($msgid))
+ $is_header = false;
+ }
+ else if (strpos($line, 'msgstr') === 0) {
+ $msgstr = gettext_decode(substr($line, 7));
+ }
+ else if ($msgid && $line[0] == '"') {
+ $msgstr .= gettext_decode($line);
+ }
+ else if ($msgid !== null && $line[0] == '"') {
+ $msgid .= gettext_decode($line);
+ }
+ }
+
+ if ($msgid && $dests) {
+ foreach ($dests as $dest) {
+ list($file, $label) = explode(':', $dest);
+ $out[$file][$label] = $msgstr;
+ $out[$file]['_translator'] = $translator;
+ }
+ }
+
+ return $language ? $out : array();
+}
+
+
+function gettext_decode($str)
+{
+ return stripslashes(trim($str, '"'));
+}
+
+/**
+ * Translate two-chars language codes to our internally used language identifiers
+ */
+function expand_langcode($lang)
+{
+ static $rcube_language_aliases, $rcube_languages;
+
+ if (!$rcube_language_aliases)
+ include(INSTALL_PATH . 'program/localization/index.inc');
+
+ if ($rcube_language_aliases[$lang])
+ return $rcube_language_aliases[$lang];
+ else if (strlen($lang) == 2 && !isset($rcube_languages[$lang]))
+ return strtolower($lang) . '_' . strtoupper($lang);
+ else
+ return $lang;
+}
+
+
+?>
diff --git a/bin/indexcontacts.sh b/bin/indexcontacts.sh
index cbeffe9..3f1e811 100755
--- a/bin/indexcontacts.sh
+++ b/bin/indexcontacts.sh
@@ -7,7 +7,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2011, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Update the fulltext index for all contacts of the internal |
@@ -16,7 +19,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: indexcontacts.sh 5307 2011-10-05 09:28:25Z alec $
+ $Id$
*/
diff --git a/bin/installto.sh b/bin/installto.sh
index bcba57c..4107cf9 100755
--- a/bin/installto.sh
+++ b/bin/installto.sh
@@ -5,8 +5,11 @@
| bin/installto.sh |
| |
| This file is part of the Roundcube Webmail client |
- | Copyright (C) 2011, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | Copyright (C) 2012, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Update an existing Roundcube installation with files from |
@@ -15,7 +18,7 @@
| Author: Thomas Bruederli |
+-----------------------------------------------------------------------+
- $Id: installto.sh 5311 2011-10-06 08:20:11Z thomasb $
+ $Id$
*/
@@ -44,20 +47,31 @@ $input = trim(fgets(STDIN));
if (strtolower($input) == 'y') {
$err = false;
echo "Copying files to target location...";
- foreach (array('program','installer','bin','SQL','plugins','skins/default') as $dir) {
+ foreach (array('program','installer','bin','SQL','plugins','skins') as $dir) {
if (!system("rsync -avC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) {
$err = true;
break;
}
}
- foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README','UPGRADING') as $file) {
+ foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) {
if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) {
$err = true;
break;
}
}
echo "done.\n\n";
-
+
+ if (is_dir("$target_dir/skins/default")) {
+ echo "Removing old default skin...";
+ system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
+ foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) {
+ $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir);
+ if (is_dir("$target_dir/$plugin_skin_dir/classic"))
+ system("rm -rf $target_dir/$plugin_skin_dir/default");
+ }
+ echo "done.\n\n";
+ }
+
if (!$err) {
echo "Running update script at target...\n";
system("cd $target_dir && bin/update.sh --version=$oldversion");
diff --git a/bin/makedoc.sh b/bin/makedoc.sh
deleted file mode 100755
index 40c75bf..0000000
--- a/bin/makedoc.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-TITLE="Roundcube Classes"
-PACKAGES="Core"
-
-INSTALL_PATH="`dirname $0`/.."
-PATH_PROJECT=$INSTALL_PATH/program/include
-PATH_DOCS=$INSTALL_PATH/doc/phpdoc
-BIN_PHPDOC="`/usr/bin/which phpdoc`"
-
-if [ ! -x "$BIN_PHPDOC" ]
-then
- echo "phpdoc not found: $BIN_PHPDOC"
- exit 1
-fi
-
-OUTPUTFORMAT=HTML
-CONVERTER=frames
-TEMPLATE=earthli
-PRIVATE=off
-
-# make documentation
-$BIN_PHPDOC -d $PATH_PROJECT -t $PATH_DOCS -ti "$TITLE" -dn $PACKAGES \
--o $OUTPUTFORMAT:$CONVERTER:$TEMPLATE -pp $PRIVATE
-
diff --git a/bin/msgexport.sh b/bin/msgexport.sh
index 0aa33b5..c876f5f 100755
--- a/bin/msgexport.sh
+++ b/bin/msgexport.sh
@@ -30,12 +30,16 @@ function progress_update($pos, $max)
function export_mailbox($mbox, $filename)
{
global $IMAP;
-
- $IMAP->set_mailbox($mbox);
-
+
+ $IMAP->set_folder($mbox);
+
+ $index = $IMAP->index($mbox, null, 'ASC');
+ $count = $index->countMessages();
+ $index = $index->get();
+
vputs("Getting message list of {$mbox}...");
- vputs($IMAP->messagecount()." messages\n");
-
+ vputs("$count messages\n");
+
if ($filename)
{
if (!($out = fopen($filename, 'w')))
@@ -47,21 +51,20 @@ function export_mailbox($mbox, $filename)
}
else
$out = STDOUT;
-
- for ($count = $IMAP->messagecount(), $i=1; $i <= $count; $i++)
+
+ for ($i = 0; $i < $count; $i++)
{
- $headers = $IMAP->get_headers($i, null, false);
- $from = current($IMAP->decode_address_list($headers->from, 1, false));
-
+ $headers = $IMAP->get_message_headers($index[$i]);
+ $from = current(rcube_mime::decode_address_list($headers->from, 1, false));
+
fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid));
- fwrite($out, $IMAP->conn->fetchPartHeader($mbox, $i));
- fwrite($out, $IMAP->conn->handlePartBody($mbox, $i));
+ fwrite($out, $IMAP->print_raw_body($headers->uid));
fwrite($out, "\n\n\n");
-
- progress_update($i, $count);
+
+ progress_update($i+1, $count);
}
vputs("\ncomplete.\n");
-
+
if ($filename)
fclose($out);
}
@@ -114,9 +117,9 @@ $IMAP = new rcube_imap(null);
if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
{
vputs("IMAP login successful.\n");
-
+
$filename = null;
- $mailboxes = $args['mbox'] == '*' ? $IMAP->list_mailboxes(null) : array($args['mbox']);
+ $mailboxes = $args['mbox'] == '*' ? $IMAP->list_folders(null) : array($args['mbox']);
foreach ($mailboxes as $mbox)
{
@@ -124,7 +127,7 @@ if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
$filename = preg_replace('/\.[a-z0-9]{3,4}$/i', '', $args['file']) . asciiwords($mbox) . '.mbox';
else if ($args['mbox'] == '*')
$filename = asciiwords($mbox) . '.mbox';
-
+
if ($args['mbox'] == '*' && in_array(strtolower($mbox), array('junk','spam','trash')))
continue;
diff --git a/bin/update.sh b/bin/update.sh
index 52ac637..9c71be2 100755
--- a/bin/update.sh
+++ b/bin/update.sh
@@ -6,7 +6,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2010-2011, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Check local configuration and database schema after upgrading |
@@ -111,6 +114,12 @@ if ($RCI->configured) {
if ($write1 && $write2) {
echo "Done.\n";
echo "Your configuration files are now up-to-date!\n";
+
+ if ($messages['missing']) {
+ echo "But you still need to add the following missing options:\n";
+ foreach ($messages['missing'] as $msg)
+ echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n";
+ }
}
else {
echo "Failed to write config files!\n";
diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist
index c1464f9..a02d7dc 100644
--- a/config/db.inc.php.dist
+++ b/config/db.inc.php.dist
@@ -6,7 +6,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2009, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index e4de49f..15da00d 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -6,7 +6,10 @@
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2011, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
@@ -103,6 +106,10 @@ $rcmail_config['imap_force_caps'] = false;
// Enable this option to force LSUB command usage instead.
$rcmail_config['imap_force_lsub'] = false;
+// Some server configurations (e.g. Courier) doesn't list folders in all namespaces
+// Enable this option to force listing of folders in all namespaces
+$rcmail_config['imap_force_ns'] = false;
+
// IMAP connection timeout, in seconds. Default: 0 (no limit)
$rcmail_config['imap_timeout'] = 0;
@@ -134,7 +141,8 @@ $rcmail_config['messages_cache'] = false;
// For example %n = mail.domain.tld, %d = domain.tld
$rcmail_config['smtp_server'] = '';
-// SMTP port (default is 25; 465 for SSL)
+// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
+// deprecated SSL over SMTP (aka SMTPS))
$rcmail_config['smtp_port'] = 25;
// SMTP username (if required) if you use %u as the username Roundcube
@@ -172,6 +180,19 @@ $rcmail_config['smtp_timeout'] = 0;
// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING!
$rcmail_config['enable_installer'] = false;
+// provide an URL where a user can get support for this Roundcube installation
+// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
+$rcmail_config['support_url'] = '';
+
+// replace Roundcube logo with this image
+// specify an URL relative to the document root of this Roundcube installation
+$rcmail_config['skin_logo'] = null;
+
+// automatically create a new Roundcube user when log-in the first time.
+// a new user will be created once the IMAP login succeeds.
+// set to false if only registered users can use this service
+$rcmail_config['auto_create_user'] = true;
+
// use this folder to store log files (must be writeable for apache user)
// This is used by the 'file' log driver.
$rcmail_config['log_dir'] = 'logs/';
@@ -191,30 +212,26 @@ $rcmail_config['force_https'] = false;
// tell PHP that it should work as under secure connection
// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set)
// e.g. when you're running Roundcube behind a https proxy
+// this option is mutually exclusive to 'force_https' and only either one of them should be set to true.
$rcmail_config['use_https'] = false;
// Allow browser-autocompletion on login form.
// 0 - disabled, 1 - username and host only, 2 - username, host, password
$rcmail_config['login_autocomplete'] = 0;
-// If users authentication is not case sensitive this must be enabled.
-// You can also use it to force conversion of logins to lower case.
+// Forces conversion of logins to lower case.
+// 0 - disabled, 1 - only domain part, 2 - domain and local part.
+// If users authentication is not case-sensitive this must be enabled.
// After enabling it all user records need to be updated, e.g. with query:
// UPDATE users SET username = LOWER(username);
-$rcmail_config['login_lc'] = false;
-
-// automatically create a new Roundcube user when log-in the first time.
-// a new user will be created once the IMAP login succeeds.
-// set to false if only registered users can use this service
-$rcmail_config['auto_create_user'] = true;
-
-// replace Roundcube logo with this image
-// specify an URL relative to the document root of this Roundcube installation
-$rcmail_config['skin_logo'] = null;
+$rcmail_config['login_lc'] = 0;
// Includes should be interpreted as PHP files
$rcmail_config['skin_include_php'] = false;
+// display software version on login screen
+$rcmail_config['display_version'] = false;
+
// Session lifetime in minutes
// must be greater than 'keep_alive'/60
$rcmail_config['session_lifetime'] = 10;
@@ -231,8 +248,8 @@ $rcmail_config['session_name'] = null;
$rcmail_config['session_storage'] = 'db';
// Use these hosts for accessing memcached
-// Define any number of hosts in the form hostname:port
-$rcmail_config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211' );
+// Define any number of hosts in the form of hostname:port or unix:///path/to/sock.file
+$rcmail_config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' );
// check client IP in session athorization
$rcmail_config['ip_check'] = false;
@@ -365,15 +382,15 @@ $rcmail_config['plugins'] = array();
// ----------------------------------
// default messages sort column. Use empty value for default server's sorting,
-// or 'arrival', 'date', 'subject', 'from', 'to', 'size', 'cc'
+// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc'
$rcmail_config['message_sort_col'] = '';
// default messages sort order
$rcmail_config['message_sort_order'] = 'DESC';
// These cols are shown in the message list. Available cols are:
-// subject, from, to, cc, replyto, date, size, status, flag, attachment, 'priority'
-$rcmail_config['list_cols'] = array('subject', 'status', 'from', 'date', 'size', 'flag', 'attachment');
+// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, 'priority'
+$rcmail_config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment');
// the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR
@@ -419,7 +436,7 @@ $rcmail_config['trash_mbox'] = 'Trash';
// display these folders separately in the mailbox list.
// these folders will also be displayed with localized names
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
-$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
+$rcmail_config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
// automatically create the above listed default folders on first login
$rcmail_config['create_default_folders'] = false;
@@ -566,27 +583,42 @@ $rcmail_config['ldap_public']['Verisign'] = array(
// The RDN field that is used for new entries, this field needs
// to be one of the search_fields, the base of base_dn is appended
// to the RDN to insert into the LDAP directory.
- 'LDAP_rdn' => 'mail',
+ 'LDAP_rdn' => 'cn',
// The required fields needed to build a new contact as required by
// the object classes (can include additional fields not required by the object classes).
'required_fields' => array('cn', 'sn', 'mail'),
'search_fields' => array('mail', 'cn'), // fields to search in
// mapping of contact fields to directory attributes
+ // for every attribute one can specify the number of values (limit) allowed.
+ // default is 1, a wildcard * means unlimited
'fieldmap' => array(
- // Roundcube => LDAP
+ // Roundcube => LDAP:limit
'name' => 'cn',
'surname' => 'sn',
'firstname' => 'givenName',
- 'email' => 'mail',
+ 'title' => 'title',
+ 'email' => 'mail:*',
'phone:home' => 'homePhone',
'phone:work' => 'telephoneNumber',
'phone:mobile' => 'mobile',
+ 'phone:pager' => 'pager',
'street' => 'street',
'zipcode' => 'postalCode',
+ 'region' => 'st',
'locality' => 'l',
- 'country' => 'c',
- 'organization' => 'o',
+// if you uncomment country, you need to modify 'sub_fields' above
+// 'country' => 'c',
+ 'department' => 'departmentNumber',
+ 'notes' => 'description',
+// these currently don't work:
+// 'phone:workfax' => 'facsimileTelephoneNumber',
+// 'photo' => 'jpegPhoto',
+// 'organization' => 'o',
+// 'manager' => 'manager',
+// 'assistant' => 'secretary',
),
+ // Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country'
+ 'sub_fields' => array(),
'sort' => 'cn', // The field to sort the listing by.
'scope' => 'sub', // search mode: sub|base|list
'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
@@ -649,10 +681,13 @@ $rcmail_config['addressbook_search_mode'] = 0;
$rcmail_config['default_charset'] = 'ISO-8859-1';
// skin name: folder from skins/
-$rcmail_config['skin'] = 'default';
+$rcmail_config['skin'] = 'larry';
+
+// show up to X items in messages list view
+$rcmail_config['mail_pagesize'] = 50;
-// show up to X items in list view
-$rcmail_config['pagesize'] = 40;
+// show up to X items in contacts list view
+$rcmail_config['addressbook_pagesize'] = 50;
// sort contacts by this col (preferably either one of name, firstname, surname)
$rcmail_config['addressbook_sort_col'] = 'surname';
@@ -665,11 +700,10 @@ $rcmail_config['addressbook_sort_col'] = 'surname';
$rcmail_config['addressbook_name_listing'] = 0;
// use this timezone to display date/time
+// valid timezone identifers are listed here: php.net/manual/en/timezones.php
+// 'auto' will use the browser's timezone settings
$rcmail_config['timezone'] = 'auto';
-// is daylight saving On? Default: (bool)date('I');
-$rcmail_config['dst_active'] = null;
-
// prefer displaying HTML messages
$rcmail_config['prefer_html'] = true;
@@ -760,7 +794,7 @@ $rcmail_config['force_7bit'] = false;
// Defaults of the search field configuration.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
-// Please note that folder names should to be in sync with $rcmail_config['default_imap_folders']
+// Please note that folder names should to be in sync with $rcmail_config['default_folders']
$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));
// Defaults of the addressbook search field configuration.
@@ -772,6 +806,9 @@ $rcmail_config['addressbook_search_mods'] = null; // Example: array('name'=>1,
// when user is over quota and Trash is included in the quota.
$rcmail_config['delete_always'] = false;
+// Directly delete messages in Junk instead of moving to Trash
+$rcmail_config['delete_junk'] = false;
+
// Behavior if a received message requests a message delivery notification (read receipt)
// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
// 3 = send automatically if sender is in addressbook, otherwise ask the user
@@ -801,4 +838,9 @@ $rcmail_config['spellcheck_before_send'] = false;
// Skip alternative email addresses in autocompletion (show one address per contact)
$rcmail_config['autocomplete_single'] = false;
+// Default font for composed HTML message.
+// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New,
+// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana
+$rcmail_config['default_font'] = '';
+
// end of config file
diff --git a/config/mimetypes.php b/config/mimetypes.php
index d404c1f..f0c1013 100644
--- a/config/mimetypes.php
+++ b/config/mimetypes.php
@@ -46,4 +46,4 @@ return array(
'ics' => 'text/calendar',
);
-?>
\ No newline at end of file
+?>
diff --git a/index.php b/index.php
index 43a47f0..30ade93 100644
--- a/index.php
+++ b/index.php
@@ -2,28 +2,39 @@
/*
+-------------------------------------------------------------------------+
| Roundcube Webmail IMAP Client |
- | Version 0.7.2 |
+ | Version 0.8.4 |
| |
| Copyright (C) 2005-2012, The Roundcube Dev Team |
| |
- | This program is free software; you can redistribute it and/or modify |
- | it under the terms of the GNU General Public License version 2 |
- | as published by the Free Software Foundation. |
+ | This program is free software: you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License (with exceptions |
+ | for skins & plugins) as published by the Free Software Foundation, |
+ | either version 3 of the License, or (at your option) any later version. |
+ | |
+ | This file forms part of the Roundcube Webmail Software for which the |
+ | following exception is added: Plugins and Skins which merely make |
+ | function calls to the Roundcube Webmail Software, and for that purpose |
+ | include it by reference shall not be considered modifications of |
+ | the software. |
+ | |
+ | If you wish to use this file in another project or create a modified |
+ | version that will not be part of the Roundcube Webmail Software, you |
+ | may remove the exception above and use this source code under the |
+ | original version of the license. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
- | You should have received a copy of the GNU General Public License along |
- | with this program; if not, write to the Free Software Foundation, Inc., |
- | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
+ | You should have received a copy of the GNU General Public License |
+ | along with this program. If not, see http://www.gnu.org/licenses/. |
| |
+-------------------------------------------------------------------------+
| Author: Thomas Bruederli |
+-------------------------------------------------------------------------+
- $Id: index.php 5995 2012-03-11 16:22:50Z thomasb $
+ $Id$
*/
@@ -48,7 +59,7 @@ if ($err_str = $RCMAIL->config->get_error()) {
}
// check DB connections and exit on failure
-if ($err_str = $DB->is_error()) {
+if ($err_str = $RCMAIL->db->is_error()) {
raise_error(array(
'code' => 603,
'type' => 'db',
@@ -92,13 +103,9 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
'valid' => $request_valid,
));
- // check if client supports cookies
- if ($auth['cookiecheck'] && empty($_COOKIE)) {
- $OUTPUT->show_message("cookiesdisabled", 'warning');
- }
- else if ($auth['valid'] && !$auth['abort'] &&
- !empty($auth['host']) && !empty($auth['user']) &&
- $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'])
+ // Login
+ if ($auth['valid'] && !$auth['abort'] &&
+ $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck'])
) {
// create new session ID, don't destroy the current session
// it was destroyed already by $RCMAIL->kill_session() above
@@ -119,6 +126,10 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
// prevent endless looping on login page
if ($query['_task'] == 'login')
unset($query['_task']);
+
+ // prevent redirect to compose with specified ID (#1488226)
+ if ($query['_action'] == 'compose' && !empty($query['_id']))
+ $query = array();
}
// allow plugins to control the redirect url after login success
@@ -129,9 +140,23 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
$OUTPUT->redirect($redir);
}
else {
- $error_code = is_object($IMAP) ? $IMAP->get_error_code() : -1;
+ if (!$auth['valid']) {
+ $error_code = RCMAIL::ERROR_INVALID_REQUEST;
+ }
+ else {
+ $error_code = $auth['error'] ? $auth['error'] : $RCMAIL->login_error();
+ }
+
+ $error_labels = array(
+ RCMAIL::ERROR_STORAGE => 'storageerror',
+ RCMAIL::ERROR_COOKIES_DISABLED => 'cookiesdisabled',
+ RCMAIL::ERROR_INVALID_REQUEST => 'invalidrequest',
+ RCMAIL::ERROR_INVALID_HOST => 'invalidhost',
+ );
+
+ $error_message = $error_labels[$error_code] ? $error_labels[$error_code] : 'loginfailed';
- $OUTPUT->show_message($error_code < -1 ? 'imaperror' : (!$auth['valid'] ? 'invalidrequest' : 'loginfailed'), 'warning');
+ $OUTPUT->show_message($error_message, 'warning');
$RCMAIL->plugins->exec_hook('login_failed', array(
'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user']));
$RCMAIL->kill_session();
@@ -140,7 +165,11 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
// end session (after optional referer check)
else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id']) && (!$RCMAIL->config->get('referer_check') || rcube_check_referer())) {
- $userdata = array('user' => $_SESSION['username'], 'host' => $_SESSION['imap_host'], 'lang' => $RCMAIL->user->language);
+ $userdata = array(
+ 'user' => $_SESSION['username'],
+ 'host' => $_SESSION['storage_host'],
+ 'lang' => $RCMAIL->user->language,
+ );
$OUTPUT->show_message('loggedout');
$RCMAIL->logout_actions();
$RCMAIL->kill_session();
@@ -184,33 +213,35 @@ if (empty($RCMAIL->user->ID)) {
if ($session_error || $_REQUEST['_err'] == 'session')
$OUTPUT->show_message('sessionerror', 'error', null, true, -1);
- $RCMAIL->set_task('login');
- $OUTPUT->send('login');
+ $plugin = $RCMAIL->plugins->exec_hook('unauthenticated', array('task' => 'login', 'error' => $session_error));
+
+ $RCMAIL->set_task($plugin['task']);
+ $OUTPUT->send($plugin['task']);
}
// CSRF prevention
else {
- // don't check for valid request tokens in these actions
- $request_check_whitelist = array('login'=>1, 'spell'=>1);
-
- // check client X-header to verify request origin
- if ($OUTPUT->ajax_call) {
- if (rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token() && !$RCMAIL->config->get('devel_mode')) {
- header('HTTP/1.1 403 Forbidden');
- die("Invalid Request");
+ $request_check_whitelist = array('login'=>1, 'spell'=>1, 'spell_html'=>1);
+
+ if (!$request_check_whitelist[$RCMAIL->action]) {
+ // check client X-header to verify request origin
+ if ($OUTPUT->ajax_call) {
+ if (rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token()) {
+ header('HTTP/1.1 403 Forbidden');
+ die("Invalid Request");
+ }
+ }
+ // check request token in POST form submissions
+ else if (!empty($_POST) && !$RCMAIL->check_request()) {
+ $OUTPUT->show_message('invalidrequest', 'error');
+ $OUTPUT->send($RCMAIL->task);
}
- }
- // check request token in POST form submissions
- else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAIL->check_request()) {
- $OUTPUT->show_message('invalidrequest', 'error');
- $OUTPUT->send($RCMAIL->task);
- }
- // check referer if configured
- if (!$request_check_whitelist[$RCMAIL->action] && $RCMAIL->config->get('referer_check') && !rcube_check_referer()) {
- raise_error(array(
- 'code' => 403,
- 'type' => 'php',
- 'message' => "Referer check failed"), true, true);
+ // check referer if configured
+ if ($RCMAIL->config->get('referer_check') && !rcube_check_referer()) {
+ raise_error(array(
+ 'code' => 403, 'type' => 'php',
+ 'message' => "Referer check failed"), true, true);
+ }
}
}
diff --git a/installer/check.php b/installer/check.php
index 944d384..5cb3022 100644
--- a/installer/check.php
+++ b/installer/check.php
@@ -16,6 +16,7 @@ $optional_php_exts = array(
'OpenSSL' => 'openssl',
'Mcrypt' => 'mcrypt',
'Intl' => 'intl',
+ 'Exif' => 'exif',
);
$required_libs = array(
@@ -39,10 +40,14 @@ $ini_checks = array(
'zend.ze1_compatibility_mode' => 0,
'mbstring.func_overload' => 0,
'suhosin.session.encrypt' => 0,
+ 'magic_quotes_runtime' => 0,
+ 'magic_quotes_sybase' => 0,
+ 'date.timezone' => '-NOTEMPTY-',
);
$optional_checks = array(
- 'date.timezone' => '-NOTEMPTY-',
+ // required for utils/modcss.inc, should we require this?
+ 'allow_url_fopen' => 1,
);
$source_urls = array(
@@ -57,10 +62,12 @@ $source_urls = array(
'JSON' => 'http://www.php.net/manual/en/book.json.php',
'DOM' => 'http://www.php.net/manual/en/book.dom.php',
'Intl' => 'http://www.php.net/manual/en/book.intl.php',
+ 'Exif' => 'http://www.php.net/manual/en/book.exif.php',
'PEAR' => 'http://pear.php.net',
'MDB2' => 'http://pear.php.net/package/MDB2',
'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP',
'Mail_mime' => 'http://pear.php.net/package/Mail_mime',
+ 'Net_IDNA2' => 'http://pear.php.net/package/Net_IDNA2',
);
echo ' ';
@@ -165,7 +172,15 @@ foreach ($ini_checks as $var => $val) {
$status = ini_get($var);
if ($val === '-NOTEMPTY-') {
if (empty($status)) {
- $RCI->fail($var, "cannot be empty and needs to be set");
+ $RCI->fail($var, "empty value detected");
+ } else if ($var == 'date.timezone') {
+ try {
+ $tz = new DateTimeZone($status);
+ $RCI->pass($var);
+ }
+ catch (Exception $e) {
+ $RCI->fail($var, "invalid value detected");
+ }
} else {
$RCI->pass($var);
}
diff --git a/installer/client.js b/installer/client.js
index 3121b26..5a1e6da 100644
--- a/installer/client.js
+++ b/installer/client.js
@@ -1,3 +1,20 @@
+/*
+ +-----------------------------------------------------------------------+
+ | Roundcube installer cleint function |
+ | |
+ | This file is part of the Roundcube web development suite |
+ | Copyright (C) 2009-2012, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+*/
function toggleblock(id, link)
{
diff --git a/installer/config.php b/installer/config.php
index dabc478..bd676b1 100644
--- a/installer/config.php
+++ b/installer/config.php
@@ -59,29 +59,39 @@ echo $input_prodname->show($RCI->getprop('product_name'));
The name of your service (used to compose page titles)
-temp_dir
+support_url
'_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
-echo $input_tempdir->show($RCI->getprop('temp_dir'));
+$input_support = new html_inputfield(array('name' => '_support_url', 'size' => 50, 'id' => "cfgsupporturl"));
+echo $input_support->show($RCI->getprop('support_url'));
?>
-Use this folder to store temp files (must be writeable for webserver)
+Provide an URL where a user can get support for this Roundcube installation. PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
+Enter an absolute URL (inculding http://) to a support page/form or a mailto: link.
-
-ip_check
+skin_logo
'_ip_check', 'id' => "cfgipcheck"));
-echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));
+$input_skin = new html_inputfield(array('name' => '_skin_logo', 'size' => 50, 'id' => "cfgskinlogo"));
+echo $input_skin->show($RCI->getprop('skin_logo'));
?>
-Check client IP in session authorization
+Custom image to display instead of the Roundcube logo.
+Enter a URL relative to the document root of this Roundcube installation.
+
-This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.
+temp_dir
+
+ '_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
+echo $input_tempdir->show($RCI->getprop('temp_dir'));
+
+?>
+Use this folder to store temp files (must be writeable for webserver)
des_key
@@ -97,6 +107,19 @@ echo $input_deskey->show($RCI->getprop('des_key'));
If you enter it manually please provide a string of exactly 24 chars.