- When searching for lists with too many emails the system does not
freeze anymore.
- Removed references to the 'emails' field in the List models and added
the description
- Changed the lower visualization to show the description of the list
- Created a new public method to search and return the formated list
of emails

- Added an array to store all setup initialize plugins in
Setup_Initialize class;
- To use it, a class that implements Setup_Initialize_Custom_Interface
must be created. The method applyCustomizations will be executed after
the execution of initialize method of <Application>_Setup_Initialize
class.

- When sending signed emails (including signed and encrypted
emails), the system do a call to Tinebase.verifyCetificate.
- The server do chain validation and revocation and return the
results.
- If validation is ok, the system sends the email, if not the
system show an error message.

- Altered User, Group and Auth: included method addCustomBackend for
registration of new backend types;
- Altered backend classes to provide configuration defaults
independently of User, Group or Auth classes;
- Altered AuthenticationPanel.js to provide an easiest form to include
new configuration section for the new backend.

- Moved add unknown contacts procedure from js to php in order to
do only one ajax call to server
- Changed note addition to be done after unknown contacts
- Fixed a bug on adding note to contact in a digitally signed mail

- Created a new listContactModel to search the contacts in a list
without submiting all the contacts of a list
- Created a new backend to return the contacts of a list
- Created a new model for the Contact List
- Created Hooks for pagination
- Created a specific search to improve the contact search

- Created a new listContactModel to search the contacts in a list
without submiting all the contacts of a list
- Created a new backend to return the contacts of a list
- Created a new model for the Contact List
- Created Hooks for pagination
- Created a specific search to improve the contact search

- New configuration option to choose the Display name format using
LDAP accounts.
- Chose from 'given name surname' format (givenName sn), 'surname,
given name' format (sn, givenName) or choose a LDAP atribute
for the Fullname and another for the Displayname.
- Syncronize all name atributes from the LDAP during login.

- Created two new config constants on tinebase/Config
- Simplified the passwordexpired function in Zend/Ldap
- Added a regexp to verify the date. If the passwordexpirationtime
does not verify it will force the change on the password

- Implemented the group part of plugin system
- Plugins of Tinebase_Group are not hardcoded added anymore
- Rules for creating plugins now are defined by plugins themselves
- Plugins for Tinebase_Group can be added into init_plugins.php with
Tinebase_Group::addPlugin($pluginName)
- Plugin of Samba for Ldap was refactored for this new structure
- Interface of user and groups plugins has two new methods:
getOptions() and isAvailable()

- Plugins of Tinebase_User are not hardcoded added anymore
- Rules for creating plugins now are defined by plugins themselves
- Plugins for Tinebase_User can be added into init_plugins.php
with Tinebase_User::addPlugin($pluginName)
- Plugin of Samba for Ldap was refactored for this new structure
- Interface of user and groups plugins has two new methods: getOptions()
and isAvailable()

- Corrected some tests for the Expressomail. Mostly changing the
expected data
- Removed the test testForwardMessageWithAttachment. It will be
reaplyed later
- Small tests on the Expressomail/Backend/Folder to ensure the correct
data are been delivered
- Small testes on the Expressomail/Backend/Message to prevent some
minor errors when the test provide data that is unexpected
- Added a test on the Controller/Folder to ensure the array position
exists
- Added one more validation on the appedMessage method to ensure the
correct importation of non compliant emails
- Ensured the test is made in a object on the Tinebase/User/Ldap

- The filter plugin system was implemented in class
Tinebase_Frontend_Json_Abstract. Added the methods
addFilterModelPlugin and _getFilterModelPlugin that provides the
plugin for _decodeFilter method of this class

- Embedded http server now stores attachments indexing by
{message-eid, attachment-eid} -> attachment, and not just as
{attachment-eid} -> attachment
- When opening a received message, the eid is generated as a hash of
the root message header
- In the composition of new messages, the eid is generated randomly on
the MessageEditDialog panel and passed down to the upload components
- The local service for file uploading was modified to receive the
message's eid through post parameter
- Implemented local service for assembly and downloading of all the
message attachments as a zip file, accessed by the url
"http://localhost:<port>/downloadZip/<message-eid>"
- GridDetailsPanel has been changed with the inclusion of a link to
the zip download service

- Created a new Password Policy to enforce the "Does not allow
to use current password as new password"
- Added Translations to some untranslated Expiration phrases
- Included the Immediate option in the check expiration time on
the Setup
- Propagated the policy exception to the Json and to user

- Created tranlations on the policies enforced on the password change
- Treated the error message on pwd change failure so it appears a
little more human readable
- Changed translations on the name of some policies on the Setup

- Now it can use both a header attribute or the REMOTE_ADDR to
determine client ip address
- The header attribute or REMOTE_ADDR option is configurable in
config.inc.php
- Plugins implemented for AccessLog and Session_Validator_IpAddress

- In library, changed the algorithm type 'MD5' to use a base64 envelop
when gerenating a password hash.
- This new patch solves problems at instalations that already use the
broken MD5 algorithm, works without the need to acess setup and save
the authentication form

- Applyed corrections for Task9143
- At Task7637, in Tinebase/User.php some errors were found in
getDefaultInternalAddressbook and it was removed in Task9143
- Within Task9143, the method getDefaultInternalAddressbook was
put back, and the previosly found errors was corrected, but
one more error was found and corrected at Task9665

- Applyed corrections for Task9143
- At Task7637, in Tinebase/User.php some errors were found in
getDefaultInternalAddressbook and it was removed in Task9143;
- Within Task9143, the method getDefaultInternalAddressbook was
put back, and the previosly found errors was corrected, but one
more error was found and corrected at Task9665.

- Create a new column in the table "access_log" to store a sha1 hash of the passwords sent by activesync clients.

- If the current password sha1 hash is match the passwordhash field from the newest log entry with the same login_name don't call the method Tinebase_User->setLastLoginFailure that increases the login_failures counter in the accounts table.

- If the ActiveSync_Config::DISABLE_ACCESS_LOG configuration is set to true only write a new log entry if the password hash don't match the newest in the table.