# changelog

author: - Clement Oudot <clem@ltb-project.org> - 0.4-1
changelog:
  - Bug #183: Corrected german translations
  - Bug #189: Accentued characters in passwords are not well managed
  - Bug #258: LTB advertises features even if not configured
  - Bug #269: Bad link to token page
  - Feature #146: Lost Password
  - Feature #178: Reject some special characters from passwords
  - Feature #181: Secret Question feature to reset/set your own password
  - Feature #185: Provide packages for SSP
  - Feature #186: Check special characters in password
  - Feature #207: Use separate files for language strings
  - Feature #233: Rewrite documentation
  - Feature #256: Display password policy details only on failures for authenticated users
  - Feature #259: Check that user doesn't reuse the same password
  - Feature #266: Add pt-BR lang


author: - Clement Oudot <clem@ltb-project.org> - 0.5-1
changelog:
  - Bug #273: Canoot change password on Active Directory
  - Bug #274: Cannot change password on Active Directory as user
  - Bug #276: Canot change AD Password as User or Manager
  - Bug #288: Problems with 'Reset your password with a mail challenge'
  - Bug #298: security issue in email password reset
  - Bug #300: Warning Ldap_get_dn
  - Bug #304: LDAP Tool Box
  - Bug #305: LDAP Tool Box
  - Bug #309: Password reset via email token fails to send in a parameter
  - Feature #272: Dutch translation
  - Feature #275: Added a couple of features
  - Feature #289: Delete token if password change is ok
  - Feature #290: Configure token lifetime
  - Feature #307: Token reset form should be hidden if token is missing or invalid


author: - Clement Oudot <clem@ltb-project.org> - 0.6-1
changelog:
  - Bug #320: Token crypt function does not wotk with PHP 5.2 and inferior
  - Bug #322: Several PHP bugs and logging feature added (PATCH included)
  - Feature #310: Add a password complexity points check
  - Feature #311: Notify user by mail after password change
  - Feature #317: Set content-type header for mail
  - Feature #319: Change password with a mail challenge - add oprions -f to see correct FROM header
  - Feature #323: Added support for reCAPTCHA (patches included)


author: - Clement Oudot <clem@ltb-project.org> - 0.7-1
changelog:
  - Bug #343: Crypt tokens needs php5-mcrypt
  - Bug #346: DIsabled accounts
  - Bug #347: PHP libraries test are bypassed
  - Bug #361: Self Service Password - wrong link in mail notification
  - Bug #362: Self Service Password - register an answer, error with date
  - Bug #378: Wrong mb_encode_mimeheader in send_mail function - SSP
  - Feature #329: automatic Language detection
  - Feature #330: Configuration for reCAPTCHA
  - Feature #340: Catalan translation
  - Feature #345: Account unlock
  - Feature #352: Add shadowLastChange configuration
  - Feature #358: Option to force password change in AD
  - Feature #376: Polish translation


author: - Clement Oudot <clem@ltb-project.org> - 0.8-1
changelog:
  - Bug #399: Mistakes in the English translation
  - Bug #479: Self-Service-Password in Sapnish
  - Bug #503: Typo in german language file "phpmhash"
  - Bug #515: reCaptcha does not use HTTPS
  - Feature #354: Send random generated password by SMS
  - Feature #359: Use hash() function instead of mhash() when possible
  - Feature #379: I'd like to add SSP to FreeBSD ports
  - Feature #452: Change samba password only if there is an objectClass=sambaSamAccount in the users profile
  - Feature #463: Set default action from configuration file
  - Feature #491: Group local password policy configs in an array to pass around
  - Feature #492: Add config to choose where show password policy
  - Feature #493: Brazilian portuguese translation/improvements
  - Feature #499: Add extra messages
  - Feature #504: Use CSS3 variable name
  - Feature #516: Russian translation
  - Feature #522: Italian translation
  - Feature #537: Detect all missing translation
  - Feature #538: Check login input string to prevent LDAP injection


author: - Clement Oudot <clem@ltb-project.org> - 0.9-1
changelog:
  - Bug #351: Allow binddn to be one that is not a manager
  - Bug #393: Warning in logs if no forbidden caracters defined
  - Bug #556: If password in Active Directory is expired, user cannot change their password
  - Bug #557: Duplicate index in spanish translation file
  - Bug #563: PHP Fatal error: Call to undefined function mb_internal_encoding()
  - Bug #571: Show policy above in resetByToken
  - Bug #611: Small typo in lang/en.inc.php
  - Bug #719: Add option for algorythm selection for crypt hashes
  - Bug #767: Adresse email with a + don’t match
  - Bug #776: self-service-password may fail to detect a samba account
  - Bug #787: Bug on password policy display in "resetbytoken"
  - Feature #381: Check mb_string extension
  - Feature #587: Slovak translation
  - Feature #595: Self Service Password translation for Portuguese (Portugal) pt-PT
  - Feature #627: Move supported languages to the config file
  - Feature #628: Corrections for german language
  - Feature #632: Simplified Chinese translation for self-service-password
  - Feature #640: New german translation
  - Feature #659: Partially hide mobile phone number, to prevent username to phone number lookups (privacy)
  - Feature #699: set hash type based on stored password
  - Feature #705: starttls functionality
  - Feature #714: Add some attibutes sambaSamAccount/shadowAccount
  - Feature #724: Self Service Password: custom hooks / external scripts
  - Feature #728: Slovenian translation
  - Feature #798: Change password as user in AD


author: - Clement Oudot <clem@ltb-project.org> - 1.0-1
changelog:
  - gh#1: Use bootstrap CSS framework
  - gh#2: Typos in german language
  - gh#3: Czech language
  - gh#4: Case in-sensitive lookup e-mail address (When used with ldap/Windows AD)
  - gh#5: CRLF Issue when sending mail
  - gh#6: Hungarian translation
  - gh#7: Create tr.inc.php
  - gh#8: Add Ukrainian language support
  - gh#9: Full Spanish and Catalan translations
  - gh#10: Allow to define a custom reset URL
  - gh#11: Possibility to set a background image
  - gh#12: Add a menu
  - gh#13: NL language file addition (typos and duplicates removed)
  - gh#14: Update it.inc.php
  - gh#17: fix german translation of message nophpmbstring
  - gh#19: add prerequisite to readme
  - gh#20: Call to undefined function utf8_decode()
  - gh#21: Bad call to change_password in resetbytoken.php
  - gh#22: Remove dependency on php5 in Debian package
  - gh#23: SMS token always valid
  - gh#24: Reset by SMS token can be used to change another account password
  - gh#25: Update reCAPTCHA code
  - gh#26: request: facilitate by-email when SMTP auth is required
  - gh#28: Updated make_ad_password
  - gh#29: Use .conf extension for Apache configuration
  - gh#31: request: disable password change?
  - gh#32: Password policy - same as login
  - gh#34: Handle LDAP bind extended error format incompatibility with Samba4
  - gh#35: All empty forms display a warning message


author: - Clement Oudot <clem@ltb-project.org> - 1.1-1
changelog:
  - gh#33: Posthook does not work with apostrophes
  - gh#38: Add Japanese translation
  - gh#40: Add missing variable $mail_wordwrap in config.inc.php
  - gh#41: Show all missing dependencies instead of one and fix color of message
  - gh#42: Fix $mail_sendmailpath in config was ignored because of a typo
  - gh#43: Fix bad link in hungarian translation
  - gh#47: Allow for longer salts
  - gh#48: Corrections proposed to index.php and pages/* files
  - gh#49: Fix the usage of rand instead of mt_rand
  - gh#50: Use fixed width icons
  - gh#51: Apache configuration in RPM package
  - gh#54: Reset password layout
  - gh#55: shadowExpire in LDAP
  - gh#58: Escape shell args with escapeshellarg for posthook command (fixes #33)
  - gh#59: Weak entropy for password generation
  - gh#60: Encryption without authentication
  - gh#61: Greek translation
  - gh#63: German translation
  - gh#64: Mail from ldap
  - gh#65: Mail signature
  - gh#66: Get Mail from LDAP
  - gh#67: Mail signature
  - gh#68: Swedish translation
  - gh#73: Dependency check for function ldap_modify_batch()
  - gh#74: session token with nginx
  - gh#75: SHA512 in password encryption
  - gh#76: Fixing Czech translation
  - gh#77: Improved IT translation
  - gh#78: Allow sending SMS through web-based API instead of Email2SMS Gateway
  - gh#79: Improved ES translation
  - gh#81: Allow self service of sshPublicKey attribute in LDAP
  - gh#82: PHPMailer security update
  - gh#85: mcrypt is outdated
  - gh#87: Get Travis tests working again on PHP 7
  - gh#89: Erreurs de Francais
  - gh#90: Update fr.inc.php
  - gh#91: Can email reset use AD user's FirstName, instead of login ID?
  - gh#92: Implements strong cryptography with defuse-crypto 2.0.3
  - gh#93: Add SHA512 password hashing
  - gh#94: Update phpmailer from v5.2.16 to v5.5.23
  - gh#95: Dependency check for function ldap_modify_batch()
  - gh#97: Add an easy way to override messages
  - gh#98: Bug in resetbytoken.php
  - gh#99: Force use of phpunit 5.7 if php >= 7.0 for travis testing
  - gh#100: Fixes for things pointed out after #81 was merged
  - gh#102: Fix for base64 encoded strings that contain '+'
  - gh#104: Fix invalid html in sendsms.php
  - gh#105: SSHKey update  Insufficient access
  - gh#106: Update zh-CN translation
  - gh#107: Sanitize Mobile Number retrieved from LDAP
  - gh#111: "Email" name in menu is confusing
  - gh#115: Force specific language?
  - gh#116: Add possibility to force use of a specific set of languages
  - gh#117: SSHA-256 support for ldap user password
  - gh#118: Fix hhvm on travis, update travis config
  - gh#120: Fix debian packages/repository for debian stretch
  - gh#121: Add popovers to explain menu links (cf. issue #111)
  - gh#126: proxy support for ReCaptcha
  - gh#128: Reset token validation issue
  - gh#130: recaptcha uses file_get_contents to retrive data
  - gh#131: Allow override of reCAPTCHA request method (cf. issue #130)
  - gh#132: Fix travis builds for php 7.0 and 7.1
  - gh#138: sendtoken.php send http instead of https
  - gh#142: Move $debug config to the top of the file
  - gh#143: Warn when key phrase is not set
  - gh#144: Invalid Token error
  - gh#148: Change key feature never notifies


author: - Clement Oudot <clem@ltb-project.org> - 1.2-1
changelog:
  - gh#149: Remove obsolete stripslashes_if_gpc_magic_quotes
  - gh#154: Translated the hungarian keys left in english.
  - gh#162: Resolve send token web page issue when E-Mail To: set from LDAP
  - gh#166: Opportunistic TLS problem
  - gh#174: Improved nl.lang.php
  - gh#175: reCAPTCHA not working on master
  - gh#176: Dutch translation update by AlbertPluton
  - gh#177: Fix "SSH Key required" message wrong color when ssh key is not submitted
  - gh#178: Fix pattern matching in reset by questions
  - gh#179: Revert Twig because of multiple regressions, work still needed, and lack of testing


author: - Clement Oudot <clem@ltb-project.org> - 1.3-1
changelog:
  - gh#182: Message incorrect when resetting using email but not supplying email (minor)
  - gh#187: Security assessment issues
  - gh#191: Minor changes to Spanish translation
  - gh#196: reduce info released in error messages
  - gh#197: Please wrap mail debug ouput in <pre> tags.
  - gh#198: Create ee.inc.php
  - gh#201: Added some translations
  - gh#202: include config.inc.local.php + warning
  - gh#204: Index includes .swp files and crashes sites with error 500
  - gh#206: Encrypt answers in directory
  - gh#209: Check ldap_bind return code instead of relying on ldap_errno
  - gh#210: SSH key change should not be permitted for expired or must change passwords
  - gh#211: Force string conversion of input values
  - gh#215: added support for pwned-passwords api v2
  - gh#217: take into account post-hook exit status


author: - Clement Oudot <clem@ltb-project.org> - 1.4-1
changelog:
  - gh#52: Docker image
  - gh#109: Use Smarty framework
  - gh#133: Get extended ldap error in case of  "passworderror" from LDAP directory
  - gh#155: Use password modify extended operation
  - gh#156: Use password policy control
  - gh#157: Using ldap_exop_passwd if available (PHP>=7.2)
  - gh#183: Reset questions and answers (Questions/suggestion?)
  - gh#220: Pre Hook script
  - gh#224: SMS OVH provider
  - gh#225: rate-limiting with json files
  - gh#226: Remove annoying warnings
  - gh#229: Add php-curl to prerequisite
  - gh#233: Translated some lines on file pt-BR.inc.php to Brazilian Portuguese
  - gh#238: Provide a way to know the installed version
  - gh#239: Fix in_array() error
  - gh#250: Web Autocomplete
  - gh#251: Add autocomplete settings on form fields (#250)
  - gh#263: phpunit test fail
  - gh#264: add support for password files (aka pathway to docker secrets)
  - gh#270: Added initial Norwegian (nb-NO) translation
  - gh#272: Allowing Email as URL-Parameter
  - gh#273: Non-english characters are being stipped in posthook call
  - gh#274: Add base64 encoding option to passwords in posthook commands
  - gh#275: Create unit test for posthook_command (ltb-project#273)
  - gh#276: Add a configuration option to force locale (ltb-project#273)
  - gh#279: Traditional Chinese Support
  - gh#281: Change password line in conf to single quotes
  - gh#296: add policy: disallow special character at beginning or end
  - gh#299: New policy: Forbidden words
  - gh#300: add specialatends and show policy criticity check, fix german translation
  - gh#301: New policy: Forbidden ldap fields
  - gh#303: add support for setting multiple question/answers.
  - gh#306: feature request: add another password quality check
  - gh#311: Another Captcha than Google Captcha
  - gh#315: Fixed few pronomous
  - gh#318: Improve multiple answers
  - gh#322: add config.inc.local.php in .gitignore
  - gh#327: Configure several LDAP servers and select one depending on context
  - gh#328: Configure several LDAP servers and select one depending on context
  - gh#329: Prefill user login fields with an HTTP header value
  - gh#330: Prefill user login fields with an HTTP header value
  - gh#331: SMS Twilio Integration
  - gh#332: Docker file
  - gh#333: SMS Twilio Integration
  - gh#334: Missing support for sambaKickofftime
  - gh#335: support for sambaKickofftime, issue 334
  - gh#336: Translate Pwned, specialatends and logic
  - gh#340: Update sl.inc.php
  - gh#342: Hide token URLs unless debug mode is on
  - gh#350: address CVE-2019-11043
  - gh#353: prevent variable interpretation when $ in password
  - gh#354: default_action set to sendtoken with use_change set to true, can not use change form
  - gh#355: ltb-project#354 : Can use change tab when default_action not set to c
  - gh#356: ltb-project#322 : Add .gitignore for config files
  - gh#359: Show extended LDAP error message after password change was denied
  - gh#360: Improved pt-BR.inc.php with more colloquial form
  - gh#364: obscure_failure_messages configuration parameter broken
  - gh#365: Revert "Fix in_array() error"
  - gh#367: Show LDAP extended error message (ltb-project#359)
  - gh#371: I added a new translation (basque, "eu") and translated 2 lines of span
  - gh#372: Use Smarty framework
  - gh#377: [DOC] php-filter as dependencie
  - gh#381: create centos 8 package
  - gh#382: Expose more PHPMail parameters
  - gh#383: Set SMTPOptions from local configuration
  - gh#389: ADD: Samba synchronization via call to smbpasswd
  - gh#395: Feature enhancements to security question functionality
  - gh#404: consider to move inline resources
  - gh#405: Update jquery to latest, 3.5.1 currently
  - gh#406: Move inline javascript to its own file fixes (#404)
  - gh#407: Upgrade jquery to 3.5.1
  - gh#408: documentation for docker
  - gh#409: LDAP exop password modify
  - gh#410: More work on smarty migration
  - gh#411: Allowing Email as URL-Parameter
  - gh#412: Move documentation in sources
  - gh#413: Update Polish localization
  - gh#415: Fixes units tests
  - gh#416: Prehook - ltb-project/self-service-password#220
  - gh#417: documentation
  - gh#419: Update config_ldap.rst
  - gh#424: Configure cache dir and template cache dir
  - gh#428: Added best practices of autocomplete for password managers
  - gh#429: I18n fr
  - gh#430: feat(diff-check): #306
  - gh#433: fix(branding): logo in menubar
  - gh#439: Invalid Mail Header, Double To: Field / Outdated PHPMailer Version
  - gh#441: typo in show policies dutch
  - gh#447: Provide WebServices / REST API
  - gh#449: sms_partially_hide_number not working after migration to smarty
  - gh#451: session and token lifetime
  - gh#453: Can't disable tokens?
  - gh#454: fix typo in nl translation
  - gh#456: Mtkraai master
  - gh#457: Link to github page added to README.md
  - gh#460: update from PHP-7.2
  - gh#466: Fix recaptcha on curent master
  - gh#468: updating php to 7.4
  - gh#469: docs(docker)
  - gh#470: Added Serbian language
  - gh#471: Added Serbian language
  - gh#474: Language selection issue
  - gh#475: Option for ppolicy control
  - gh#476: fix(lang): re-include allowed_lang check
  - gh#477: docs(keyphrase): update comments/docs, when should keyphrase be set
  - gh#478: fix(pebkac)
  - gh#479: Update Serbian translation
  - gh#481: New captcha to replace reCAPTCHA
  - gh#482: Upgrade to PHPMailer 6.3.0
  - gh#483: add hook in rest api and a script for multi ldap change password
  - gh#491: do not override config.inc.local.php vars
  - gh#499: Update multi ldap script


author: - Clement Oudot <clem@ltb-project.org> - 1.4.1-1
changelog:
  - gh#501: Remove extra semicolon from setquestions template
  - gh#502: Remove alt text so empty logo doesn't show 'msg_title' twice


author: - Clement Oudot <clem@ltb-project.org> - 1.4.2-1
changelog:
  - gh#504: Cannot use docker get gregwar/captcha----use docker
  - gh#505: fix(captcha): missing gd library
  - gh#506: I have a little problem - I can't use SMS for the next step
  - gh#507: fix(reset)
  - gh#508: fix(undefined)
  - gh#511: Bump phpmailer/phpmailer from 6.3.0 to 6.4.1 in /lib


author: - Clement Oudot <clem@ltb-project.org> - 1.4.3-1
changelog:
  - gh#516: Docker image does not have sendmail in it
  - gh#517: fix(mail): add sendmail to Docker image
  - gh#520: [Security:high] Reset by SMS can be used to change any account password
  - gh#521: If token was provided by SMS, check initial SMS code before changing password
  - gh#522: [Security:low] Dismiss captcha once it is used


author: - Clement Oudot <clem@ltb-project.org> - 1.4.4-1
changelog:
  - Update bootstrap to v3.4.1 by @bohze in #663
  - Separate Smarty debug and debug by @coudot in #666
  - Typo in resetbytoken resulting in mails not being sent by @faust64 in #529
  - Don't send notification if modification failed by @faust64 in #542
  - PHP Fatal error: Uncaught TypeError: ldap_get_dn() in #648
  - REST files are not shipped in packages in #660


author: - Clement Oudot <clem@ltb-project.org> - 1.5.0-1
changelog:
  - gh#494: allow more than one mail_attribute value
  - gh#509: ssh-pub-key verification while change
  - gh#510: feat(ssh): public key check ( #509 )
  - gh#512: docs(sshkey)
  - gh#513: fix(sshkeys): don't send mail notification when entry was not changed
  - gh#514: fix(sshkey): should add one sshPublicKey per key
  - gh#515: docs(multi-tenancy): adds samples setting multi-tenancy header
  - gh#524: "Bind user password needs to be changed" when users change AD expired password
  - gh#530: Change expired password as manager
  - gh#536: adding Kerberos authentication support
  - gh#538: Switch to a new Pwned Passwords module
  - gh#539: fix(version): mismatch between htdocs/index.php and rest/v1/include.php
  - gh#540: Refactor pwned passwords
  - gh#541: core(update): apache 2.4.46
  - gh#544: Rate limit not working on Ubuntu 20.04 apt install
  - gh#545: docs(ratelimit): typo
  - gh#546: feat(mails): using several mail attributes
  - gh#547: Update de.inc.php
  - gh#549: Added sms api for signal-cli
  - gh#551: fix(docs): invalid nginx root serving ssp
  - gh#556: Somthing missing in the OVH API doc
  - gh#558: fix(docs): ratelimit check interval should be 1h, not 1min
  - gh#559: chore(deps): bump phpmailer/phpmailer from 6.4.1 to 6.5.0 in /lib
  - gh#562: Document $allowed_lang var
  - gh#563: show_menu = false displays an empty UL
  - gh#564: Updated IT translation
  - gh#566: ansible role for ltb-project
  - gh#571: Fix Error 500 when user is not found in ldap for sms reset
  - gh#575: Updated catalan translation
  - gh#576: fix(api): phpmailer needs to be included (#573)
  - gh#579: Add a request example about the rest api interface
  - gh#587: Captcha misaligned in the mobile version
  - gh#588: fix: captcha misaligned in the mobile version
  - gh#592: Fix 563
  - gh#594: Update simplified Chinese translation
  - gh#598: fix(docs) - see ltb-project/self-service-password#590
  - gh#602: Errors when Using Captchas with Password Reset Emails
  - gh#605: Display value associative table with line break HTML element <br>
  - gh#606: Update fr translation
  - gh#608: objectClass: ldapPublicKey should be added when needed
  - gh#609: Fix some undefined warnings
  - gh#610: security: service discloses existence of user accounts
  - gh#611: docker: image build fails and/or ldap config missing
  - gh#612: fix apache / bullseye
  - gh#619: Issue 608
  - gh#628: Implement Argon2 hashing
  - gh#631: Add the ability to exclude IPs from rate limit settings.
  - gh#635: Missing Documentation
  - gh#642: Add some cosmetic css properties to sshkey textarea
  - gh#646: Fix translation
  - gh#647: chore(deps): bump guzzlehttp/psr7 from 2.1.0 to 2.2.1 in /lib
  - gh#650: Fixing issue with ldaps or ldap startls
  - gh#654: Rate limit for Password reset
  - gh#655: AD doesnt accept TLS
  - gh#658: Allow more than one mobile attribute
  - gh#659: chore(deps): bump guzzlehttp/guzzle from 7.4.0 to 7.4.4 in /lib
  - gh#661: Update bootstrap to v3.4.1
  - gh#662: Compatibility with PHP 8.1
  - gh#664: chore(deps): bump guzzlehttp/guzzle from 7.4.4 to 7.4.5 in /lib
  - gh#669: Update TR translation
  - gh#673: feat(sms): Allow more than one mobile attribute #658
  - gh#675: Feat mail factorize attributes
  - gh#676: Remove warning "Decoding error"
  - gh#677: Use correct message identifiers
  - gh#680: captcha use dedicated session cookie fix #602
  - gh#682: PHP Notice:  Trying to access array offset on value of type resource
  - gh#683: Rate limit optional support per ip (ratelimit_filter_by_ip)
  - gh#684: Add rate limit checking for any password change request include fix #654
  - gh#685: hide failure by default for mailnomatch issue #610
  - gh#686: fix check password toward ldap attribute for token based methods
  - gh#687: rest api checkpassword bugs
  - gh#688: Fix password check ldap
  - gh#695: Improve password check in REST API by reading user entry to honor pwd_forbidden_ldap_fields configuration parameter
  - gh#696: Improve documentation, parse php code
  - gh#697: blank page when reset with questions without answers set.
  - gh#698: ldap_get_dn() expects parameter 2
  - gh#699: Check parameters before calling hash_equals
  - gh#700: Issue with AD "reset password on next logon"
  - gh#701: Use require_once to avoid loop on local configuration file inclusion
  - gh#702: Use require_once for file inclusion
  - gh#703: Fix reset by questions display after password change
  - gh#704: Use recent version of PHP and Smarty in our Docker image
  - gh#705: Create upgrade doc for 1.5
  - gh#708: Get entry in checkpassword REST service


author: - Clement Oudot <clem@ltb-project.org> - 1.5.1-1
changelog:
  - gh#709: Error 404 with bootstrap.min.css.map
  - gh#711: Error 500 when user is not found in directory for password reset by mail
  - gh#714: Docker - missing libldap-common
  - gh#716: Debian package not in the Apt repo


author: - Clement Oudot <clem@ltb-project.org> - 1.5.2-1
changelog:
  - gh#717: Update config_nginx.rst
  - gh#718: Update config_apache.rst
  - gh#720: SMS code won't send when captcha is enabled
  - gh#721: captcha in sendsms check when needed only
  - gh#722: Use gpg instead of apt-key during for deb install


author: - Clement Oudot <clem@ltb-project.org> - 1.5.3-1
changelog:
  - gh#723: Update gpg install command
  - gh#735: Links not interpreted in $messages['sendtokenhelpnomail']
  - gh#736: User account disclosure risk (Token method)
  - gh#741: Add support for Arabic locale
  - gh#744: Update Dutch lang file
  - gh#749: Prevent account disclosure in password reset by mail token page
  - gh#754: Added comment/note over $custom_css
  - gh#760: Problem to install on EL9
  - gh#764: Polish translation error
  - gh#766: Help Menu vs PHP Version issues?
  - gh#767: Bump guzzlehttp/psr7 from 2.4.0 to 2.5.0 in /lib
  - gh#768: Restrict languages to php files
  - gh#771: Restrict languages to php files


author: - Clement Oudot <clem@ltb-project.org> - 1.5.4-1
changelog:
  - gh#773: Missing dependence in debian package breaks installation experience
  - gh#774: Announce that the smarty3 package needs to be installed manually
  - gh#777: Typo in config_tokens.rst
  - gh#793: Updated italian localization
  - gh#816: Hijack SMS codes to an arbitrary phone number
  - gh#818: Do not trust SMS number from crypted token, search it again in LDAP Directory


author: - Clement Oudot <clem@ltb-project.org> - 1.6.0-1
changelog:
  - gh#165: Multiple SMS tokens could be requested if an attacker finds one username, leading to big expenses
  - gh#193: Password Strength Meter
  - gh#288: Page to set mail for use by "reset by token" feature
  - gh#421: Why no logging for any actions taken by users?
  - gh#634: Spec file clean up
  - gh#674: Notify by mail code factorization
  - gh#707: Improve code factorization
  - gh#742: Update php version
  - gh#751: feature: ability to change custom password fields
  - gh#755: Host header poisoning
  - gh#772: Remove obscure_failure_messages option
  - gh#775: Update tr.inc.php
  - gh#778: Docker container image labels
  - gh#780: [question] Preset login username
  - gh#781: Audit log
  - gh#795: Use login_hint to prefill user login
  - gh#797: Use LTB LDAP common PHP lib
  - gh#799: Update phpunit
  - gh#803: German Translation of some parts of the code
  - gh#804: translated the line $messages['tokensent_ifexists'] into german
  - gh#808: First implementation of a page to set mail and phone attributes
  - gh#809: Cannot use signal as SMS method
  - gh#815: Complete and fix pt-BR translation
  - gh#817: RPM spec file cleanup
  - gh#821: LDAP Tool Box Self Service Password v1.5.2 - Account takeover
  - gh#824: add security remark about $reset_url parameter (#821)
  - gh#828: Configuration parameter $allowed_lang is ignored
  - gh#829: Filter allowed languages
  - gh#830: add an indicator of entropy during password change
  - gh#831: Docker: support volumes for configuration
  - gh#833: Error handling when using the signal-cli api for sms
  - gh#834: Update bootstrap library
  - gh#835: clean useless function show_policy
  - gh#837: Upgrade Bootstrap to 5.3
  - gh#839: Update it.inc.php
  - gh#841: Fix pt-BR translation for pwned password policy
  - gh#842: remove useless show_policy function, now rendered by smarty template
  - gh#843: 830 entropy
  - gh#844: Added JS to prevent multiple submits
  - gh#845: prevent multiple form submits (#844)
  - gh#846: RPM spec file cleanup
  - gh#847: Spec cleanup (#846)
  - gh#848: update defuse-crypto library
  - gh#849: Update bundled php/javascript libs versions
  - gh#850: Update to smarty4
  - gh#851: Securisation of reset by SMS token feature
  - gh#852: deb cleanup
  - gh#854: Password policy javascript checker
  - gh#855: Remove criteria depending on old password when unavailable
  - gh#856: Remove criteria depending on old password when unavailable (#855)
  - gh#857: Avoid host header poisoning
  - gh#858: deb cleanup (#852)
  - gh#859: update bundled dependencies + mv them as composer managed dep (#849)
  - gh#860: SMS sending option error when encryption is not activated
  - gh#861: Bug in max_attempts for token in `sendsms`
  - gh#864: feature: ability to change custom password fields
  - gh#865: ability to change custom password fields, developped by @markus-96 (#864)
  - gh#866: add docker image labels (#778) + update base image to php:8.2 + smarty to v4.4.1
  - gh#868: pwd_diff_last_min_chars is not evaluated the same way in backend and in frontend
  - gh#869: compute pwd_diff_last_min_chars the same way than at backend side (#868)
  - gh#870: reinject default configuration file into conf directory (#831)
  - gh#872: Ppolicy javascript applied to extra help div
  - gh#873: Use a dedicated CSS class for ppolicy div
  - gh#874: Test crypt_tokens parameter if SMS feature is enabled
  - gh#878: use new ltb-ldap v0.2
  - gh#879: use new ltb-ldap v0.2 and adapt method signatures (#878)
  - gh#881: checkentropy js: use known path, ie when behind a reverse proxy
  - gh#882: 878 use ltb ldap functions
  - gh#884: Use POST instead of GET in check entropy module
  - gh#885: Use POST instead of GET in check entropy module (#884)
  - gh#887: fix uninitialized variable warnings in logs
  - gh#888: fix warnings for uninitialized variables (#887)
  - gh#889: refactor smsapi functions
  - gh#891: remove global variables in sendsms.php (#889)
  - gh#892: Corrected error introduced when adding obscure notifications
  - gh#893: 674 notify by mail code factorization
  - gh#896: Cannot build RPM from sources
  - gh#897: With 1.6.0, composer requires PHP >= 8.1.0
  - gh#899: Remove obscure_failure_messages option


author: - Clement Oudot <clem@ltb-project.org> - 1.6.1-1
changelog:
  - gh#903: Missing documentation for entropy
  - gh#904: Unable to install on RockyLinux 8
  - gh#907: add documentation for entropy feature (#903, #830)
  - gh#909: PHP Warning:  Undefined array keys at 1.6.0
  - gh#919: remove smarty messages in error logs unless $smarty_debug is set to true (#909)
  - gh#920: warning: userdn variable uninitialized when using sendsms
  - gh#930: fix warning: userdn variable uninitialized when using sendsms (#920)
  - gh#931: fix utf8_decode deprecation
  - gh#933: remove utf8_decode function (#931)


author: - Clement Oudot <clem@ltb-project.org> - 1.7.0-1
changelog:
  - gh#943 Remove duplicate detectLanguage code
  - gh#948 Update ltb-common version to v0.3.0
  - gh#985 use new page_size parameter from ltb-common
  - gh#989 Arabic language support in documentation
  - gh#968 use password policy feature from ltb-common project
  - gh#982 improve cache modularity
  - gh#979 externalize cache functions into ltb-common
  - gh#763 [SMS API] "Rate Limit" and "max_attempts" is not working once captcha is submitted.
  - gh#954 use a lib for server side sessions
  - gh#914 Error 500 when clicking 'Send' on the password change screen
  - gh#973 Script multi_ldap_change.php is broken in 1.6
  - gh#970 Bad error catching in scripts/multi_ldap_change.php
  - gh#966 fix vulnerabilities in docker images
  - gh#957 UI Clarity improvement
  - gh#959 Create ko.inc.php
  - gh#401 Keep sending reset requests
  - gh#952 Bug: Making it possible to docker build both on M1/M2/M3 Mac and in an x86 VM
  - gh#951 Content-Security-Policy errors, crept back since 1.4
  - gh#934 lang: update cn and zh-CN
  - gh#925 Multible Findings with Trivy Scanner
  - gh#921 add a ldap_scope parameter
  - gh#944 update ltb-ldap library name to ltb-common
  - gh#789 Button for regenerate Captcha
  - gh#343 reCAPTCHA v3
  - gh#895 integrate friendly captcha
  - gh#894 refactor the captcha system for integrating external captcha
  - gh#913 fix: hide php notices from the end user in the web ui


author: - Clement Oudot <clem@ltb-project.org> - 1.7.2-1
changelog:
  - gh#1005: SMS Truncate option doesn't appear to be working
  - gh#1006: localize friendly captcha
  - gh#1007: localize friendly captcha (#1006)
  - gh#1008: PHP Fatal error:  Uncaught Error: Call to undefined function Ltb\\ldap_sasl_bind()
  - gh#1009: fix missing sasl dependency (#1008)
  - gh#1018: Invalid token after captcha fail
  - gh#1022: Container - config.inc.php.orig Permission Issues
  - gh#1026: Fixing sms number truncate bug.
  - gh#1028: fix invalid token after captcha fail (#1018)
  - gh#1029: fix permission issue on config.inc.php link when container run unprivileged (#1022)
  - gh#1030: Fix input-group on sendtoken (mail) page
  - gh#1032: Use ltb-common 0.5.0
  - gh#1034: update ltb-common to 0.5.0 (#1032)
  - gh#1036: Fix the border-radius of login input box on mail reset screen


author: - Clement Oudot <clem@ltb-project.org> - 1.7.3-1
changelog:
  - gh#1038: Missing token after form fail
  - gh#1039: fix missing token after form fail (#1038)
  - gh#1049: Conf bug/change for Version 1.7 +
  - gh#1055: Captcha Scripts not included in el9 rpm
  - gh#1056: Documenting fix for multi-tenant configuration
  - gh#1057: Adding smsovh and captcha lib folders
  - gh#1058: Background image jagged in CSS?
  - gh#1059: Fix CSS background
  - gh#1061: Updated norwegian language


author: - Clement Oudot <clem@ltb-project.org> - 1.8.0-1
changelog:
  - gh#984: Use ltb-common Directory module for password change
  - gh#1035: transfer the AD specific code into the ltb-common Directory interface
  - gh#1037: Ukrainian translation corrected
  - gh#1042: [Question] How to customize or add some banners on the main page?
  - gh#1044: TLS: peer cert untrusted or revoked (0x42) - Docker v1.7.2
  - gh#1051: Allow customized template
  - gh#1052: Document how use env to configure LDAP TLS/SSL options
  - gh#1062: Rename ee.inc.php to et.inc.php
  - gh#1064: chore: Improve login field naming
  - gh#1065: Add show password eye on each password input to show/hide passwords
  - gh#1068: Build user DN from login to make service account optional
  - gh#1069: [documentation] ownership of /var/cache/self-service-password causing silent 500 error
  - gh#1071: Invalid signature of repository
  - gh#1079: Inject configuration variables in templates
  - gh#1082: Add configuration for favicon
  - gh#1084: Update Japanese Translation
  - gh#1085: Update Japanese translation
  - gh#1086: Correct time zone
  - gh#1090: Fix validation of SSH public keys
  - gh#1091: Fix handling of multi-word comments in SSH keys
  - gh#1092: Update repository deb822 format
  - gh#1096: UI reports success after Password Modify EXOP failure (ppolicy err=19). Avoid post-modify on failure.
  - gh#1097: Deprecated: Constant FILTER_SANITIZE_STRING is deprecated
  - gh#1098: update doc with deb822 repository format (#1092)
  - gh#1099: Add an option to show/hide password in password fields
  - gh#1102: display error logs even when $debug=false
  - gh#1103: display error logs even when $debug=false (#1102)
  - gh#1104: Configure the log level
  - gh#1105: typo: udate instead of update
  - gh#1106: fix typo udate -> update
  - gh#1107: Update PHP version for docker image
  - gh#1109: $pwd_forbidden_chars containing regex delimiters poses an issue
  - gh#1110: Use ltb-common v0.6.3
  - gh#1112: The official docker latest is missing sendmail again.
  - gh#1113: add missing dependency sendmail to docker image (#1112)
  - gh#1116: Debug level is configurable
  - gh#1118: Security: Update mistune in docs/requirements.txt to >= 2.0.3 (PYSEC-2022-237)
  - gh#1121: Fix hook doc
  - gh#1122: move code depending of ad_mode into ltb-common (#1035)
  - gh#1124: Fix Czech lang
  - gh#1125: Show/Hide password review
  - gh#1126: Fix ssh key parsing
  - gh#1127: Configurable timezone in audit logs
  - gh#1128: Implementing configurable favicon
  - gh#1129: Service accounts are optional for password change
  - gh#1131: Change to German Localization
  - gh#1132: Published docker image contains vulnerable apache httpd <2.4.67
  - gh#1133: Updated to latest php and alpine base images
  - gh#1134: Updating mistune v3.2.1
  - gh#1135: Permission clarification for cache and templates_c directories
  - gh#1137: Directory "rest/" is not provided in Debian/RPM packages


author: - Clement Oudot <clem@ltb-project.org> - 1.8.1-1
changelog:
  - gh#1138: "developpers" typo in various docs
  - gh#1140: Argument #2 could not be passed by reference
  - gh#1142: multi_ldap_change.php: $directory should be $s_directory in change_password() call
  - gh#1143: Fix call of change_password function insed multi-ldap-change script


author: - Clement Oudot <clem@ltb-project.org> - 0.2-1
changelog:
  - Bug #5: Password is marked as expired if policy do not set pwdMaxAge
  - Bug #7: The pwdReset radio button is not checked by default
  - Feature #9: PostHook
  - Feature #10: Viewer for quota attributes


author: - Clement Oudot <clem@ltb-project.org> - 0.3-1
changelog:
  - Bug #15: Handle the case where pwdAccountLockedTime is set but pwdLockoutDuration is not set or is equal to 0
  - Feature #16: Possibility to lock an account
  - Feature #17: Allow the Smarty path to be set in conf.inc.local.php


author: - Clement Oudot <clem@ltb-project.org> - 0.4-1
changelog:
  - gh#19: Display expiration date
  - gh#20: fix(undefined)
  - gh#22: Configure cache dir and template cache dir
  - gh#26: Remove datepicker
  - gh#27: Display expiration date
  - gh#30: Move cache dirs in /var
  - gh#31: Docker Container
  - gh#36: feat(docker)
  - gh#37: Dashboard to list locked accounts
  - gh#38: Dashboard page for locked accounts
  - gh#39: Dashboard expired passwords
  - gh#40: Dashboard will expire passwords
  - gh#42: Dashboard idle accounts
  - gh#44: Multi tenancy


author: - Clement Oudot <clem@ltb-project.org> - 0.5-1
changelog:
  - gh#45: Do not enable lockout feature if no ppolicy associated to account or ppolicy has pwdLockout value to FALSE
  - gh#47: Don't lock account until a valid ppolicy with pwdLockout=TRUE is associated (#45)
  - gh#49: Timestamp value displayer
  - gh#51: Displaying Items Manager & Secretary
  - gh#54: Add prehook
  - gh#55: Function ldap_sort is deprecated in PHP8+
  - gh#56: Split debug and debug_smarty
  - gh#60: PHP Fatal error:  Uncaught TypeError: Cannot access offset of type string on string
  - gh#61: Check that values is an array before parsing it
  - gh#62: Provide CSS map files for minified version
  - gh#63: Smarty debug
  - gh#64: CSS map files and bootstrap 3.4.1
  - gh#65: Update Docker image with PHP 8.1 and Smarty 4
  - gh#69: Ltb ldap integration providing ldapSort support for php >= 8
  - gh#70: Factorize search
  - gh#71: Send a mail to user after password reset
  - gh#72: Log who has done the action (audit trail)
  - gh#73: Send a mail to administrator
  - gh#75: Append an option to enable/disable "Force user to reset its password at next login" button
  - gh#77: Run composer when building distribution archive
  - gh#79: Disable reset choice button
  - gh#81: Update general-parameters.rst
  - gh#82: Notify user and administrators by mail when password is changed
  - gh#84: Display DN links
  - gh#85: Displayer for address
  - gh#86: Force line return for long values
  - gh#88: Force line break
  - gh#89: Address displayer
  - gh#90: Prehook feature


author: - Clement Oudot <clem@ltb-project.org> - 0.5.1-1
changelog:
  - gh#92: Message override broken in 0.5
  - gh#94: Missing replacement for lang value (issue #92)
  - gh#95: Some documentation improvements
  - gh#96: Add source IP in audit
  - gh#98: Add IP in audit
  - gh#99: Provide result codes for lock/unlock account actions


author: Clement Oudot <clem@ltb-project.org> - 0.6-1
changelog:
  - gh#52: LTB Service Desk Active Directory Support
  - gh#53: Display pwdPolicySubentry
  - gh#57: Add new password policy items from Behera draft 10
  - gh#74: Avoid browsers prompting for storing new password
  - gh#83: Set autocomplete properties for password fields
  - gh#91: Add service-desk dependencies in documentation
  - gh#97: update authTimestamp to pwdLastSuccess
  - gh#103: Configure last auth attribute
  - gh#104: Enable phpunit in CI
  - gh#106: Constant FILTER_SANITIZE_STRING is deprecated
  - gh#107: Replace deprecated FILTER_SANITIZE_STRING constant
  - gh#109: fix Error while searching for multiple entries with smarty 4.3.4 (#108)
  - gh#110: Display localized time
  - gh#111: add an option for defining the timezone (#110)
  - gh#115: Update doc to be consistent with main LTB project doc
  - gh#116: Document required installation step for smarty3
  - gh#117: Displayed message if wrong a password is tested is not really explicit
  - gh#118: use new ltb-ldap v0.2
  - gh#119: Display password policy when changing password
  - gh#123: Configure which colums should not be sorted
  - gh#124: Add allowed_lang configuration parameter
  - gh#125: Possibility to block an account (different that locking)
  - gh#126: Check password in history of old passwords
  - gh#127: Add a comment on an action in audit log
  - gh#128: Display audit log
  - gh#129: Update bootstrap library
  - gh#130: Update bootstrap library
  - gh#132: Print buttons
  - gh#133: Add options to hide lock panel and expired panel
  - gh#134: Display pwdpolicysubentry
  - gh#135: Options to show/hide lock and expire panels
  - gh#136: Use LTB LDAP v0.2
  - gh#137: #124: Adding allowed_lang configuration.
  - gh#138: Remove duplicate detectLanguage code
  - gh#139:  Strategy for composer dependencies
  - gh#140: Added modal functionality to insert comment to audit logs when un/locking account.
  - gh#141: RPM spec file cleanup
  - gh#142: deb cleanup
  - gh#143: add .gitignore in conf directory
  - gh#144: make all search functions to use a scope
  - gh#145: use new method get_first_value from ltb-ldap project
  - gh#146: use new method get_first_value from ltb-ldap project (#145)
  - gh#147: update ltb-ldap library name to ltb-common
  - gh#148: update ltb-ldap library name to ltb-common (#147)
  - gh#149: make all search functions to use a scope (#144)
  - gh#150: Update ltb-common version to v0.4.0
  - gh#151: #112: Fixing deprecated error messages by upgrading to smarty4.
  - gh#153: add .gitignore in conf directory (#143)
  - gh#154: Manage composer.lock and composer update (#139)
  - gh#155: 141 rpm spec file cleanup
  - gh#156: Active Directory support
  - gh#157: Added functionality to display audit logs
  - gh#158: Update to smarty4
  - gh#159: remove verbose smarty messages
  - gh#160: remove verbose smarty logs, unless smarty_debug == true (#159)
  - gh#161: deb cleanup (#142)
  - gh#162: Password reset checks pwdHistory
  - gh#163: Update doc for Nginx
  - gh#164: use local password policy feature from ltb-common (#119)
  - gh#165: use new page_size parameter from ltb-common
  - gh#166: Use page size parameter from ltb-common (#165)
  - gh#167: Check target entry DN against LDAP configured filter
  - gh#168: Add hooks for other actions than password modification
  - gh#169: Block account
  - gh#170: Remove obsolete code
  - gh#171: Append option to sort login history in descending order
  - gh#172: Possibility to edit account/password validity dates
  - gh#173: Add new password policy items from behera draft 10
  - gh#174: Check DN is matching configured search parameters before allowing any action on it
  - gh#175: Hooks for other actions than password modification
  - gh#176: Use ltb-common for detect language functionnality
  - gh#177: add comments in all menus (#127)
  - gh#179: remove numerous warnings
  - gh#180: remove multiple warnings (#179)
  - gh#181: add "sort" param for sorting LDAP multivalued attributes (#171)
  - gh#183: Restore print buttons
  - gh#184: Fatal error when wrong base DN configured
  - gh#185: Missing message for pwdlastsuccess attribute
  - gh#186: Use correct last auth attribute
  - gh#187: Error when enabling/disabling/locking/unlocking account is not shown
  - gh#189: 187 show error when disabling account
  - gh#190: Possibility to edit account validity dates


author: Clement Oudot <clem@ltb-project.org> - 0.6.1-1
changelog:
  - gh#193: Docker image not available for 0.6
  - gh#194: Wrong display when no expiration date on an AD account
  - gh#195: Disable button displayed even if use_disableaccount is false
  - gh#197: Manage Active Directory special values for accountExpires
  - gh#198: AD reset at next connection is not displayed in account status
  - gh#199: Packages requires PHP 8.1
  - gh#200: Fix bad condition for posthookenableresult
  - gh#201: Use ltb-common 0.4.1
  - gh#202: Upgrade Docker image
  - gh#203: Unable to empty validity dates
  - gh#204: Manage empty values for start date and end date


author: Clement Oudot <clem@ltb-project.org> - 0.6.2-1
changelog:
  - gh#209: Use ltb-common 0.5.0
  - gh#210: Search not working with PHP 7.4
  - gh#217: Admin notification does not replace {dn}
  - gh#218: Admin notification does not replace dn


author: Clement Oudot <clem@ltb-project.org> - 0.7-1
changelog:
  - gh#28: Add a page to edit user attributes
  - gh#35: Ability to add new users
  - gh#122: Problem sorting bytes columns in dashboards
  - gh#196: Button to refresh the display page
  - gh#205: Use date_specifiers to display date in audit page
  - gh#206: Add a specific error when password check fails because password is wrong
  - gh#207: Add a spinner to wait for datatables loading
  - gh#211: HTML response may be too large/long to generate - implement server-side pagination
  - gh#212: Update entry
  - gh#213: Factorize function to sort attribute values
  - gh#215: Adding password check error message
  - gh#216: Customized templates
  - gh#220: Norwegian translation
  - gh#221: Reorder lang files
  - gh#222: Spinner to wait for dataTable loading
  - gh#223: Design: do not use tables when not needed
  - gh#224: Use sortEntry method
  - gh#225: Account creation
  - gh#226: Manage pagination
  - gh#227: Customized templates
  - gh#228: In audit page, do not allow to view entry if it does not exist
  - gh#230: Inject configuration variables in templates
  - gh#231: Add configuration for favicon
  - gh#232: error when computing ad_date type in value_editor.tpl
  - gh#233: fix empty values for ad_date (#232)
  - gh#234: Using date_specifiers for date column in audit dashboard
  - gh#235: Inject configuration variables in templates
  - gh#236: Favicon configuration
  - gh#237: Add action button to refresh entry display
  - gh#238: Use bootstrap grid/flex to replace table in update page
  - gh#239: Improve the dn_list editor
  - gh#240: Fix index management for status attributes
  - gh#241: In audit page, do not link to entry if it does not exist
  - gh#242: Search API results don't match with attribute list in display template
  - gh#243: Configuration for dn list editor
  - gh#244: sorting does not work any more in Datatables
  - gh#245: fix datatables sorting + enable sorting for mailquota by default (#244)


author: Clement Oudot <clem@ltb-project.org> - 0.7.1-1
changelog:
  - gh#248: Documentation for admin notify by mail feature
  - gh#250: For attributes of type "list" or "static_list", key is displayed instead value
  - gh#252: In create mode, a list with empty value still tries to add attribute
  - gh#254: Waiting on search without results
  - gh#255: Update, rename and delete buttons are visible even if features are disabled
  - gh#256: Display ppolicy "onerror" does not work
  - gh#257: Variable $pwd_no_special_at_ends is not initialized in config file
  - gh#258: Audit logs menu disappears when all Dashboards options are disabled
  - gh#259: 250 fix list value display
  - gh#260: refactor get_config_js function
  - gh#261: refactor get_config_js function (#260)
  - gh#262: Update to ltb-common 0.6.1
  - gh#263: attributes_static_list and attributes_list are not documented
  - gh#264: add documentation for attributes_list and attributes_static_list (#263)


author: - Clement Oudot <clem@ltb-project.org> - 0.2-1
changelog:
  - gh#4: Italian language file
  - gh#5: Feature request : add export to CSV
  - gh#7: Export entry as VCard
  - gh#8: Doc : fix typo in "Installation from tarball"
  - gh#10: Directory thumbnail frame are unformatted
  - gh#11: Add a menu to display groups (based on groupofmember)
  - gh#16: Print results as rows or boxes
  - gh#17: Quick search return with pattern like "foo*"
  - gh#18: Replace exact matching by substring matching in advanced search
  - gh#21: [Security] LDAP Injection in quick search
  - gh#22: Possibility to configure photo attribute
  - gh#23: Create tel: links for telephone numbers
  - gh#24: PHP >= 5.6 prerequisite
  - gh#25: New view "directory" which display all entries in a list with datatables
  - gh#26: checkboxes in advanced search form for substring matching
  - gh#30: Config.inc.php : include local file and document variables
  - gh#31: Configure a print button with Datatables
  - gh#32: List view directory search
  - gh#33: Add config option for autoPrint feature in Datatables
  - gh#34: Improve browsing on pages with Datatables
  - gh#35: Sort icons should be more close than their column name
  - gh#36: Change icon for Directory or Gallery view
  - gh#37: Logo not visible on other pages than homepage
  - gh#38: Text and look for print buttons
  - gh#39: Add display for member/memberOf attributes
  - gh#40: Displaying binary data attributes
  - gh#41: Move label to title leads to misunderstanding


author: - Clement Oudot <clem@ltb-project.org> - 0.3-1
changelog:
  - gh#42: add dropdown list to advanced search criteria
  - gh#47: Do not display not found groups/users
  - gh#48: Check ldap_bind return code instead of ldap_errorno
  - gh#49: Add url link to web ldap editor tool for each users entrie
  - gh#50: Provide a way to know the installed version
  - gh#51: No information is displayed when opening user details in a multi-organizational DIT
  - gh#52: fix(display): introducing optional `$ldap_user_regex`
  - gh#54: Hide photo box if there is no picture
  - gh#55: Can we get a list of all groups
  - gh#58: XSS protection added
  - gh#60: Sort group members
  - gh#61: Adapt other templates to changes in value_displayer.tpl (ltb-project#47)
  - gh#62: Set version in code and display it in footer (ltb-project#50)
  - gh#63: Add buttons in directory page to switch between users and groups (ltb-project#55)
  - gh#64: Set LDAP debug if $debug is set
  - gh#65: Enable debug in php-ldap (ltb-project#64)
  - gh#66: Sort values when displaying entry (ltb-project#60)
  - gh#68: Possibility to set a specific filter for gallery (ltb-project#54)
  - gh#69: Configure default page
  - gh#70: Bad quote escaping in advanced search page
  - gh#71: Option to add an edit link in entry display page (ltb-project#49)
  - gh#72: Sorting and paging regression
  - gh#73: Option to display a logout link in the menu
  - gh#74: Provide a new type (list)


author: - Clement Oudot <clem@ltb-project.org> - 0.4-1
changelog:
  - gh#75: Display account : empty result
  - gh#76: add a option to change timeout of ldap connexion
  - gh#77: Gallery by group
  - gh#79: Add gallery by group
  - gh#80: Add possibility to use gravatar as photo
  - gh#81: Disable PHP errors (error_reporting) if debug is not set
  - gh#82: Disable error reporting if debug is false
  - gh#84: Manage "bytes" attributes
  - gh#85: New type "bytes"
  - gh#87: Possibility to negates value in search
  - gh#88: Move documentation in sources
  - gh#89: Add ldap_network_timeout option
  - gh#92: Allow the Smarty path to be set in conf.inc.local.php
  - gh#93: Configure cache dir and template cache dir
  - gh#95: feat(docker): sample docker image & kubernetes deployment
  - gh#97: Groups Vcard
  - gh#98: Patch datepicker lang
  - gh#104: Fix undefined warnings
  - gh#106: Issue 88 & Small Fixes
  - gh#107: Fixes on online doc
  - gh#108: Bad value displayed when attribute type is a list
  - gh#109: Backup files are loaded as config in lang/
  - gh#110: Restrict languages to php files
  - gh#112: Display list value
  - gh#113: Manage cache dirs
  - gh#115: WP incompatible with PHP 8+ (ldap_sort)
  - gh#116: Split debug and debug_smarty
  - gh#117: Provide CSS map files for minified version
  - gh#118: New feature: Map
  - gh#119: Use LTB LDAP common lib
  - gh#120: Factorize search
  - gh#121: Displayer for address
  - gh#122: Address displayer (issue #121)
  - gh#123: Smarty debug (issue #116)
  - gh#124: Bug in group display in user and group base are the same
  - gh#125: Group rendering


