The FreeIPA team is proud to announce FreeIPA v4.0.0!

It can be downloaded from http://www.freeipa.org/page/Downloads. As this is a major release, we did not add it to any stable Fedora release (yet), but we want to first give you a chance to test that yourself with a COPR repository.

Highlights in 4.0.0#

Enhancements#

  • Support Kerberos-based OTP authentication both natively with tokens managed by FreeIPA server and via Radius proxy (3rd party 2FA authentication server). (ticket, design)

  • Access control in FreeIPA server was reworked and a concept of permissions/ACIs managed by FreeIPA plugin was introduced. The plugins have now a way to control which objects and attributes should be visible and to whom. The administrators can now change the default settings and whitelist or blacklist additional attributes or change the entire visibility of a specific FreeIPA function (users, groups, SUDO, …) to anonymous, authenticated users or just a group of privileged users. (ticket, design)

  • Web UI adopted Patternflyopen interface project to promote design commonality and improved user experience. Web UI is now responsive and adapts to different screen sizes like mobile or tablets. Additionally, many usability or minor Web UI issues were fixed. (ticket, design)

  • Experimental DNSSEC inline-signing support (ticket, design)

  • DNS management plugin now allows internationalized domain names. Administrators can now enter the DNS records in unicode and have the management plugin do the conversion to IDN encoding (punycode). The DNS plugin supports the IDNA 2003 standard. (ticket)

  • FreeIPA DNS plugin did not distinguish between master and forward zones and both were merged in one type of object. To remove the inconsistency, DNS plugin now distinguishes between these 2 types and separate commands were added for managing forward zones. (ticket, design)

  • Support the SubjectAltNames certificate extension in FreeIPA service certificates. Certificates with SAN names are useful for load balancing when a node needs to present itself both with its FQDN and the balanced address. (ticket)

  • ipa-client-install now automatically configures SUDO support on client machines, thus making FreeIPA SUDO integration very easy to use. (ticket)

  • ipa-getkeytab can now fetch an existent Kerberos keytab for a chosen service. This allows fetching the same keytab on multiple hosts which is useful in cluster deployments. The operation is authorized via the allowedToPerform;read_keys attribute, stored on the target entry, which contains a DN of a user or a group allowed to get the keys without resetting them. (ticket, design)

  • ipa-client-install now uploads the FreeIPA CA certificate in a system-wide certificate store, thus making it trusted by all other services on the OS. (ticket)

  • Add automember-rebuild command allowing to apply all automember rules to existing objects (users, hosts).(ticket, design)

  • … and many other minor enhancements

Bug fixes#

  • User and group operations no longer raise internal error when working with large user bases

  • ipa-client-install no longer distributes non-working Firefox configuration for the Web UI. Admin can use the new –configure-firefox option to install a fixed configuration file to chosen directory.

  • XMLRPC system commands were not implemented. FreeIPA now supports system.listMethods, system.methodSignature and system.methodHelp

  • ipa-kdb loaded global configuration only on startup and never changed it until restart. Now, it checks the new configuration every 60 seconds.

  • sudo plugin runAsUser option now accepts external group

  • sudo plugin runAsGroup option was not generated in the sudoers compat tree correctly

  • sudo plugin did not allow host IP address masks

  • DNS plugin had a too restrictive zone/record name validator, it is much more relaxed now.

  • ipa-backup recursively backed up old backups fron /var/lib/ipa/backup

  • /etc/ssh/sshd_config is no longer garbled in case it did not contain a trailing new line

  • Server/replica installer now does not crash on systems with low entropy. Warnings are issued when entropy is too low and long installation times are expected

  • … and many other minor bug fixes or bug fixes related to major enhancements in this release

2FA Kerberos Authenication#

FreeIPA now provides support for two-factor authentication (2FA) via Kerberos. FreeIPA can integrate into exising OTP systems by proxying requests over RADIUS. FreeIPA also provides integrated support for the open-standard TOTP (RFC 6238) and HOTP (RFC 4226) tokens, including YubiKey and FreeOTP (iOS or Android).

Administrators can configure individual users for RADIUS proxy or HOTP/TOTP. In the latter case, once enabled for HOTP/TOTP, users can provision, manage and synchronize their own tokens via the CLI or UI. Administrators can also create tokens on behalf of users, with the option to grant management permissions to the user. If the user does not have management permissions, the token is read only (except synchronization).

When dealing with hardware tokens, administrators can bulk-import the token metadata using the industry standard Portable Symmetric Key Container XML (RFC 6030) files.

Limitations#

As this is our first release, it comes with some limitations.

HOTP has concerns about scalability in large replication environments due to the frequent need to replicate the token counter across the cluster. For this reason, FreeIPA defaults to TOTP tokens.

TOTP has a known issue where tokens can be re-used within a short window. This is due to lacking high-watermark support. Implementing this restriction without careful consideration for the impact on replication could result in similar problems to HOTP (above).

The workflow for changing passwords causes problems with HOTP tokens. This is most noticable when passwords expire. In the case of the Web UI, logins will simply fail. As a workaround for this, the password can simply be changed using the CLI. In the case of SSSD logins, the login will succeed but the password change will appear to fail while actually succeeding.

Currently there is no workflow for lost tokens.

Reworked Control Access#

Permissions can be set to apply to anonymous or all authenticated users, or use the existing privilege/role system of assigning rights to specific users. (design)

Previously, all of the directory, except a few security-sensitive attributes, was readable by anyone that could connect to the directory server, even anonymous users. Instead, FreeIPA 4.0 uses fine-grained permissions to grant read access. (design) This change may render some information unreadable to unprivileged users. To grant read rights, create or find a permission that governs read access to the offending attribute(s), and either add it to an appropriate role, or set its bind rule to ‘all’ or ‘anonymous’.

FreeIPA’s existing default add/modify/delete permissions were also reworked. The default permissions have the “System:” name prefix, and do not allow structural modifications. Administrators of deployments where default permissions were customized beyond attribute lists and privilege/role membership should carefully read the Documentation draft and Upgrade considerations sections of the design page, and to test before deploying FreeIPA 4.0 to production.

Permissions in FreeIPA 4.0 are more flexible, allowing arbitrary combinations of type, subtree and filters. (design)

Note that permissions that were created or modified on a FreeIPA 4.0 server, including FreeIPA’s default permissions, can not be modified on older servers. Adding them to privileges is still possible on any server.

DNS Master and Forward Zones#

New command ipa dnsforwardzone was introduced and semantics of ``–forwarder`` option for ``ipa dnszone`` command was changed to match BIND semantics.

Functionality previously provided by command ipa dnszone-* --forwarder is from FreeIPA 4.0 provided by command ipa dnsforwardzone-* --forwarder.

Sematics of the old command ``ipa dnszone`` now matches BIND semantics for master zone type. I.e. local BIND replies authoritatively to queries for data in given zone (including authoritative NXDOMAIN answers for non-existent names) and forwarding affects only queries made by BIND to answer recursive queries which cannot be answered locally. I.e. forwarding affects only queries for names below zone cuts (NS records) of locally served zones. For further explanation please see:

The new command ``ipa dnsforwardzone`` offers semantics equivalent to BIND forward zone type. Forward zone does not contain any authoritative data and forward queries which cannot be answered from local cache to configured servers.

Forwarding policy is documented in section “Forwarding” in BIND 9 Configuration Reference.

Experimental DNSSEC Support#

DNS zones served by FreeIPA can be secured with DNSSEC. The signing process is fully automatic but signing keys have to be provided by user manually and all keys need to be copied to all FreeIPA DNS servers.

On the first FreeIPA server you can generate signing keys with following commands (please replace “$ZONE” with zone name without trailing period, e.g. “example.com”):

cd "/var/named/dyndb-ldap/ipa/$ZONE/keys"
dnssec-keygen -3 -b 2048 -f KSK "$ZONE"
dnssec-keygen -3 -b 2048 "$ZONE"

At this point you need to securely copy all files in directory /var/named/dyndb-ldap/ipa/$ZONE/keys from the first server to all other FreeIPA DNS servers. On all servers you have to fix filesystem permissions and inform named that keys are in place:

cd "/var/named/dyndb-ldap/ipa/$ZONE/keys"
chown named: *
chmod u=rw,go= *
rndc sign "$ZONE"

Now is your zone signed with given keys. As a last step, it is necessary to add DS records to your parent zone. See man dnssec-dsfromkey and man dnssec-checkds or ask parent zone operator for guidance.

To enable NSEC3 for given zone you have to specify NSEC3PARAM record. For example:

ipa dnszone-mod "$ZONE" --nsec3param-rec="1 0 8 1B3140F28A1C"

For security reasons it is recommended not to use NSEC3 opt-out feature.

Upgrading#

An IPA server can be upgraded simply by installing updated rpms. The server does not need to be shut down in advance.

Please note that if you are doing the upgrade in special environment (e.g. FedUp) which does not allow running the LDAP server during upgrade process, upgrade scripts need to be run manually after the first boot:

# ipa-ldap-updater --upgrade
# ipa-upgradeconfig

Also note that the performance improvements require an extended set of indexes to be configured. RPM update for an IPA server with a excessive number of users may require several minutes to finish.

If you have multiple servers you may upgrade them one at a time. It is expected that all servers will be upgraded in a relatively short period (days or weeks, not months). They should be able to co-exist peacefully but new features will not be available on old servers and enrolling a new client against an old server will result in the SSH keys not being uploaded.

Downgrading a server once upgraded is not supported.

Upgrading from 3.3.0 and later versions is supported. Upgrading from previous versions is not supported and has not been tested.

An enrolled client does not need the new packages installed unless you want to re-enroll it. SSH keys for already installed clients are not uploaded, you will have to re-enroll the client or manually upload the keys.

Transformation Master to Forward zones#

Zones with specified forwarders, with policy different than none, are transformed to forward zones. All master zones data are backed up in /var/lib/ipa/backup/dns-forward-zones-backup-%Y-%m-%d-%H-%M-%S.ldif.

Transformation to forward zones, is executed only once, by one replica only, and only if ipa version is lower than 4.0.

Since this upgrade, you should use forward zones to forwarding queries.

Feedback#

Please provide comments, bugs and other feedback via the freeipa-users mailing list (http://www.redhat.com/mailman/listinfo/freeipa-users) or #freeipa channel on Freenode.

Detailed Changelog since 3.3.0#

Adam Misnyovszki (17):
``     ipactl can not restart ipa services if current status is stopped``
``     Add –force option to ipactl``
``     Certificate search max_serial_number problem fixed``
``     Extending user plugin with inetOrgPerson fields``
``     CA-less tests generate failure``
``     automember rebuild nowait feature added``
``     plugin registration refactoring for automembership``
``     CI - test_forced_client_reenrollment stability fix``
``     webui doc: typo fixes in guides``
``     webui: select all checkbox remains selected after operation``
``     plugin registration refactoring for pwpolicy``
``     Trust add datetime fix``
``     webui OTP token test data added``
``     webui static site delete command fixed``
``     webui tests: callback, assert_disabled feature added``
``     webui tests: range test extended``
``     Call generate-rndc-key.sh during ipa-server-install``
Alexander Bokovoy (39):
``     Remove systemd upgrader as it is not used anymore``
``     ipa-sam: do not modify objectclass when trust object already created``
``     ipa-sam: do not leak LDAPMessage on ipa-sam initialization``
``     ipa-sam: report supported enctypes based on Kerberos realm configuration``
``     ipaserver/dcerpc.py: populate forest trust information using realmdomains``
``     trusts: support subdomains in a forest``
``     frontend: report arguments errors with better detail``
``     ipaserver/dcerpc: remove use of trust account authentication``
``     trust: integrate subdomains support into trust-add``
``     ipasam: for subdomains pick up defaults for missing values``
``     KDC: implement transition check for trusted domains``
``     ipa-kdb: Handle parent-child relationship for subdomains``
``     Guard import of adtrustinstance for case without trusts``
``     Map NT_STATUS_INVALID_PARAMETER to most likely error cause: clock skew``
``     subdomains: Use AD admin credentials when trust is being established``
``     trust: fix get_dn() to distinguish creating and re-adding trusts``
``     trust-fetch-domains: create ranges for new child domains``
``     trustdomain-find: report status of the (sub)domain``
``     ipaserver/install/installutils: clean up properly after yield``
``     group-show: resolve external members of the groups``
``     ipa-adtrust-install: configure host netbios name by default``
``     ipasam: delete trusted child domains before removing the trust``
``     libotp: do not call internal search for NULL dn``
``     bindinstance: make sure zone manager is initialized in add_master_dns_records``
``     ipa-kdb: in case of delegation use original client’s database entry, not the proxy``
``     ipa-kdb: make sure we don’t produce MS-PAC in case of authdata flag cleared by admin``
``     trustdomain_find: make sure we skip short entries when –pkey-only is specified``
``     trust: make sure we always discover topology of the      forest trust``
``     ipaserver/dcerpc: catch the case of insuffient permissions when establishing trust``
``     adtrustinstance: make sure to stop and disable winbind in uninstall()``
``     fix filtering of subdomain-based trust users``
``     ipa-kdb: do not fetch client principal if it is the same as existing entry``
``     ipaserver/dcerpc: make sure to always return unicode SID of the trust domain``
``     trust: do not fetch subdomains in case shared secret was used to set up the trust``
``     schema-compat: set precedence to 49 to allow OTP binds over compat tree``
``     freeipa.spec.in: update dependencies to 389-ds and selinux-policy``
``     Fix packaging issue with doubly specified directories``
``     Add missing ipa-otptoken-import.1.gz to spec file``
``     ipa-ldap-updater: make possible to use LDAPI with autobind in case of hardened LDAP configuration``
Ana Krivokapić (33):
``     Handle –subject option in ipa-server-install``
``     Fix handling of CSS files in sync.sh script``
``     Fix broken replica installation``
``     Add integration tests for Kerberos Flags``
``     Fix tests which fail after ipa-adtrust-install``
``     Add integration tests for forced client re-enrollment``
``     Create DS user and group during ipa-restore``
``     Add warning when uninstalling active replica``
``     Add option to ipa-client-install to configure automount``
``     Replace ntpdate calls with ntpd``
``     Fix invocations of FileError in ipa-client-install``
``     Do not crash if DS is down during server uninstall``
``     Do not show unexpected error in ipa-ldap-updater``
``     Follow tmpfiles.d packaging guidelines``
``     Add ipa-advise plugins for nss-pam-ldapd legacy clients``
``     Do not roll back failed client installation on server``
``     Make sure nsds5ReplicaStripAttrs is set on agreements``
``     Add test for external CA installation``
``     Fix regression which prevents creating a winsync agreement``
``     Use EXTERNAL auth mechanism in ldapmodify``
``     Add automember rebuild command``
``     Add a privilege and a permission needed for automember rebuild command``
``     Add unit tests for automember rebuild command``
``     Fix error message when adding duplicate automember rule``
``     Add automember rebuild command to the web UI``
``     Web UI integration test driver enhancement``
``     Add web UI integration tests for automember rebuild``
``     Add userClass attribute for users``
``     WebUI: Add userClass attribute to user and host pages``
``     Make Expression field required when adding automember condition``
``     Make sure state of services is preserved after client uninstall``
``     Enable Retro Changelog and Content Synchronization DS plugins``
``     Improve error message on failed Kerberos authentication``
Gabe (8):
``     ipa-join usage instructions are incorrect``
``     Typo in warning message where IPA realm and domain name differ``
``     Fix order of synchronizing time when running ipa-client-install``
``     fix typo in ipa -v migrate-ds``
``     ipa-client-automount should not configure nsswitch.conf manually``
``     ipa recursively adds old backups``
``     ipautil.run args log message is confusing``
``     Add version and API version``
Jakub Hrozek (2):
``     EXTDOM: Do not overwrite domain_name for INP_SID``
``     trusts: combine filters with AND to make sure only the intended domain matches``
Jan Cholasta (105):
``     Make PKCS#12 handling in ipa-server-certinstall closer to what other tools do.``
``     Port ipa-server-certinstall to the admintool framework.``
``     Remove unused NSSDatabase and CertDB method find_root_cert_from_pkcs12.``
``     Ignore empty mod error when updating DS SSL config in ipa-server-certinstall.``
``     Replace only the cert instead of the whole NSS DB in ipa-server-certinstall.``
``     Untrack old and track new cert with certmonger in ipa-server-certinstall.``
``     Add –pin option to ipa-server-certinstall.``
``     Ask for PKCS#12 password interactively in ipa-server-certinstall.``
``     Fix nsSaslMapping object class before configuring SASL mappings.``
``     Add –dirman-password option to ipa-server-certinstall.``
``     Fix ipa-server-certinstall usage string.``
``     Fix service-disable in CA-less install.``
``     Fix nsslapdPlugin object class after initial replication.``
``     Read passwords from stdin when importing PKCS#12 files with pk12util.``
``     Allow PKCS#12 files with empty password in install tools.``
``     Track DS certificate with certmonger on replicas.``
``     Make LDAPEntry a wrapper around dict rather than a dict subclass.``
``     Introduce IPASimpleLDAPObject.decode method for decoding LDAP values.``
``     Always use lists for values in LDAPEntry internally.``
``     Decode and encode attribute values in LDAPEntry on demand.``
``     Make sure attributeTypes updates are done before objectClasses updates.``
``     Remove legacy toDict and origDataDict methods of LDAPEntry.``
``     Store encoded attribute values from search results directly in entry objects.``
``     Use encoded values from entry objects directly when generating modlists.``
``     Use encoded values from entry objects directly when adding new entries.``
``     Turn LDAPEntry.single_value into a dictionary-like property.``
``     Remove mod_ssl port workaround.``
``     Move IPA specific code from LDAPClient to the ldap2 plugin.``
``     Add wrapper for result3 to IPASimpleLDAPObject.``
``     Support searches with paged results control in LDAPClient.``
``     Refactor indirect membership processing.``
``     Remove unused method get_api of the ldap2 plugin.``
``     Use hardening flags for ipa-optd.``
``     Own /usr/share/ipa/ui/js/ in the spec file.``
``     Prefer user CFLAGS/CPPFLAGS over those provided by rpmbuild in the spec file.``
``     Include LDFLAGS provided by rpmbuild in global LDFLAGS in the spec file.``
``     Add stricter default CFLAGS to Makefile.``
``     Fix compilation error in ipa-cldap.``
``     Remove CFLAGS duplication.``
``     Fix internal error in the user-status command.``
``     Convert remaining backend code to LDAPEntry API.``
``     Prevent garbage from readline on standard output of dogtag-ipa-retrieve-agent.``
``     PKI service restart after CA renewal failed``
``     Rename LDAPEntry method commit to reset_modlist.``
``     Use old entry state in LDAPClient.update_entry.``
``     Move LDAPClient method get_single_value to IPASimpleLDAPObject.``
``     Make IPASimpleLDAPObject.get_single_value result overridable.``
``     Use LDAPClient.update_entry for LDAP mods in ldapupdate.``
``     Reduce amount of LDAPEntry.reset_modlist calls in ldapupdate.``
``     Add LDAPEntry method generate_modlist.``
``     Remove unused LDAPClient methods get_syntax and get_single_value.``
``     Remove legacy LDAPEntry properties data and orig_data.``
``     Store old entry state in dict rather than LDAPEntry.``
``     Do not crash on bad LDAP data when formatting decode error message.``
``     Use raw LDAP data in ldapupdate.``
``     Fix ipa-client-automount uninstall when fstore is empty.``
``     Do not start the service in stopped_service if it was not running before.``
``     Increase service startup timeout default.``
``     Fix ntpd config on clients.``
``     Get original entry state from LDAP in LDAPUpdate.``
``     Convert remaining installer code to LDAPEntry API.``
``     Convert remaining update code to LDAPEntry API.``
``     Convert remaining test code to LDAPEntry API.``
``     Raise an exception when legacy LDAP API is used.``
``     Convert remaining frontend code to LDAPEntry API.``
``     Remove sourcehostcategory from the default HBAC rule.``
``     Always use real entry DNs for memberOf in ldap2.``
``     Fix modlist generation code not to generate empty replace mods.``
``     Log unhandled exceptions in certificate renewal scripts.``
``     Fix certificate renewal scripts to work with separate CA DS instance.``
``     Move CACERT definition to a single place.``
``     Do not create CA certificate files in CA-less server install.``
``     Use LDAP API to upload CA certificate instead of ldapmodify command.``
``     Upload CA certificate from DS NSS database in CA-less server install.``
``     Remove unused method export_ca_cert of dsinstance.``
``     Show progress when enabling SSL in DS in ipa-server-install output.``
``     Use certmonger D-Bus API to configure certmonger in CA install.``
``     Add new certmonger CA helper dogtag-ipa-ca-renew-agent.``
``     Update pkcs10 module functions to always load CSRs and allow selecting format.``
``     Remove unused function get_subjectaltname from the cert plugin.``
``     Add function for parsing friendly name from certificate requests.``
``     Support retrieving renewed certificates from LDAP in dogtag-ipa-ca-renew-agent.``
``     Use dogtag-ipa-ca-renew-agent to retrieve renewed certificates from LDAP.``
``     Remove dogtag-ipa-retrieve-agent-submit.``
``     Support storing renewed certificates to LDAP in dogtag-ipa-ca-renew-agent.``
``     Use dogtag-ipa-ca-renew-agent to track certificates on master CA.``
``     Store information about which CA server is master for renewals in LDAP.``
``     Make the default dogtag-ipa-ca-renew-agent behavior depend on CA setup.``
``     Merge restart_pkicad functionality to renew_ca_cert and remove restart_pkicad.``
``     Merge restart_httpd functionality to renew_ra_cert.``
``     Use the same certmonger configuration for both CA masters and clones.``
``     Update certmonger configuration in ipa-upgradeconfig.``
``     Support exporting CSRs in dogtag-ipa-ca-renew-agent.``
``     Remove unused method is_master of CAInstance.``
``     Fix upload of CA certificate to LDAP in CA-less install.``
``     Fix update_ca_renewal_master plugin on CA-less installs.``
``     Allow primary keys to use different type than unicode.``
``     Support API version-specific RPC marshalling.``
``     Replace get_syntax method of IPASimpleObject with new get_type method.``
``     Use raw attribute values in command result when –raw is specified.``
``     Keep original name when setting attribute in LDAPEntry.``
``     Allow SAN in IPA certificate profile.``
``     Support requests with SAN in cert-request.``
``     Remove GetEffectiveRights control when ldap2.get_effective_rights fails.``
``     Do not corrupt sshd_config in client install when trailing newline is missing.``
Jan Pazdziora (1):
``     Adding verb to error message to make it less confusing.``
Jason Woods (1):
``     ipa-sam: cache gid to sid and uid to sid requests in idmap cache``
Krzysztof Klimonda (1):
``     Fix -Wformat-security warnings``
Lukáš Slebodník (1):
``     BUILD: Fix portability of NSS in file ipa_pwd.c``
Martin Bašti (72):
``     Added warning if cert ‘/etc/ipa/ca.crt’ exists``
``     ipa-client-install: Added options to configure firefox``
``     Removed old firefox configuration scripts``
``     Changed CLI to allow to use FILE as optional param``
``     migrate-ds added –ca-cert-file=FILE option``
``     PTR records can be added without specify FQDN zone name``
``     DNS classless support for reverse domains``
``     DNS tests for classless reverse domains``
``     Fix test_host_plugin for DNS Classless Reverse zones``
``     Allows to sort non text entries``
``     DNSName type``
``     DNSNameParam parameter``
``     dns_name_values capability added``
``     get_ancestors_primary_keys clone``
``     CLI conversion of DNSName type``
``     DNSName conversion in ipaldap``
``     Modified has_output attributes``
``     Modified dns related global functions``
``     Modified records and zone parameters to use DNSNameParam``
``     Modified record and zone class to support IDN``
``     _domain_name_validatord moved from DNS to realmdomains``
``     move hostname validation from DNS to hosts``
``     DNS modified tests``
``     DNS new tests``
``     PTR record target can be relative``
``     Test DNS: wildcard in RR owner``
``     Fix indentation``
``     Test DNS: dnsrecord-* zone.test. zone.test. should work``
``     Make zonenames absolute in host plugin``
``     Python-kerberos update in freeipa.spec.in``
``     Separate master and forward DNS zones``
``     Prevent commands to modify different type of a zone``
``     Create BASE zone class``
``     Tests DNS: forward zones``
``     Fix handle python-dns UnicodeError``
``     DNSSEC: remove unsuported records``
``     DNSSEC: added NSEC3PARAM record type``
``     DNSSEC: webui update DNSSEC attributes``
``     Tests: remove unused records from tests``
``     Tests: tests for NSEC3PARAM records``
``     DNSSEC: DLVRecord type added``
``     DNSSEC: Test: DLV record``
``     Digest part in DLV/DS records allows only heaxadecimal characters``
``     DNSSEC: WebUI add DLV record type``
``     Fix ipa.service restart``
``     Fix incompatible DNS permission``
``     Added upgrade step executed before schmema is upgraded``
``     Upgrade special master zones to forward zones``
``     Check normalization only for IDNA domains``
``     DNSSEC: add TLSA record type``
``     DNSSEC: WebUI: add TLSA record``
``     Fix ACI in DNS``
``     Remove NSEC3PARAM record``
``     Add NSEC3PARAM to zone settings``
``     NSEC3PARAM tests``
``     Allow to add non string values to named conf``
``     DNSSEC: Add experimental support for DNSSEC``
``     Add warning about semantic change for zones``
``     Add DNSSEC experimental support warning message``
``     Use documentation addresses in dns help``
``     Help for forward zones``
``     Split dns docstring``
``     Fix upgrade to forward zones``
``     Fix incompatible permission name *zone-del``
``     Non IDNA zonename should be normalized to lowercase``
``     Fix tests dns_realmdomains_integration``
``     Fix: Missing ACI for records in 40-dns.update``
``     Restore privileges after forward zones update``
``     Allow to add managed permission for reverse zones``
``     Test DNS: test zone normalization``
``     Test DNS: TLSA record``
``     Test DNS: add zone with consecutive dash characters``
Martin Košek (58):
``     Bump 3.4 development version to 3.3.90``
``     Prevent *.pyo and *.pyc multilib problems``
``     Remove rpmlint warnings in spec file``
``     Fix selected minor issues in the spec file and license``
``     Use FQDN when creating MSDCS SRV records``
``     Do not set DNS discovery domain in server mode``
``     Require new SSSD to pull required AD subdomain fixes``
``     Remove faulty DNS memberOf Task``
``     Do not allow ‘%’ in DM password``
``     Remove –no-serial-autoincrement``
``     PKI installation on replica failing due to missing proxy conf``
``     Use consistent realm name in cainstance and dsinstance``
``     Winsync re-initialize should not run memberOf fixup task``
``     Installer should always wait until CA starts up``
``     Administrative password change does not respect password policy``
``     Do not add kadmin/changepw ACIs on new installs``
``     Make set_directive and get_directive more strict``
``     Remove mod_ssl conflict``
``     Add nsswitch.conf to FILES section of ipa-client-install man page``
``     Remove ipa-pwd-extop and ipa-enrollment duplicate error strings``
``     Remove deprecated AllowLMhash config``
``     Server does not detect different server and IPA domain``
``     Allow kernel keyring CCACHE when supported``
``     Consolidate .gitignore entries``
``     Increase Java stack size on PPC platforms``
``     Increase Java stack size on s390 platforms``
``     Revert restart scripts file permissions change``
``     hbactest does not work for external users``
``     sudoOrder missing in sudoers``
``     Add missing example to sudorule``
``     Remove missing VERSION warning in dnsrecord-mod``
``     Hide trust-resolve command``
``     Add runas option to run function``
``     Switch httpd to use default CCACHE``
``     httpd should destroy all CCACHEs``
``     ntpconf: remove redundant comment``
``     Fallback to global policy in ipa-lockout plugin``
``     ipa-lockout: do not fail when default realm cannot be read``
``     Migration does not add users to default group``
``     .mailmap: use correct name format for Adam``
``     Avoid passing non-terminated string to is_master_host``
``     ipa-replica-install never checks for 7389 port``
``     Fix idrange unit test failure``
``     Update Dogtag 9 database during replica installation``
``     Proxy PKI clone /ca/ee/ca/profileSubmit URI``
``     Add missing dependencies to freeipa-python package``
``     Add requires for pki-core-10.1.1-1.fc20``
``     Make ipa-client-automount backwards compatible``
``     Make trust objects available to regular users``
``     Revert “Check for password expiration in pre-bind”``
``     Add python-yubico to BuildRequires``
``     Fix objectClass casing in LDIF to prevent schema update error``
``     Let Host Administrators use host-disable command``
``     Remove python-cherrypy BuildRequires``
``     Update X-ORIGIN for 4.0``
``     Clear NSS session cache when socket is closed``
``     Add Modify Realm Domains permission``
``     Prepare spec for 4.0 release``
Nalin Dahyabhai (3):
``     Add missing dependency``
``     Accept any alias, not just the last value``
``     Restore krbCanonicalName handling``
Nathaniel McCallum (41):
``     Bypass ipa-replica-conncheck ssh tests when ssh is not installed``
``     Ensure credentials structure is initialized``
``     Document no_search in Param flags``
``     Don’t special case the Password class in Param.__init__()``
``     Add optional_create flag``
``     Allow multiple types in Param type validation``
``     Add IntEnum parameter to ipalib``
``     Add support for managing user auth types``
``     Add RADIUS proxy support to ipalib CLI``
``     Add OTP support to ipalib CLI``
``     Add rpmbuild/ to .gitignore``
``     Move ipa-otpd socket directory``
``     Fix OTP token names/labels``
``     Fix generation of invalid OTP URIs``
``     Update ACIs to permit users to add/delete their own tokens``
``     ipa-kdb: validate that an OTP user has tokens``
``     Enable building in C99 mode``
``     Add libotp internal library for slapi plugins``
``     Add support to ipa-kdb for keyless principals``
``     Add HOTP support``
``     Add OTP last token plugin``
``     Add OTP sync support to ipa-pwd-extop``
``     Teach ipa-pwd-extop to respect global ipaUserAuthType settings``
``     Use super() properly to avoid an exception``
``     Make all ipatokenTOTP attributes mandatory``
``     Remove NULLS from constants.py``
``     Rework how otptoken defaults are handled``
``     Fix token secret length RFC compliance``
``     Fix a typo in the otptoken doc string``
``     kdb: Don’t provide password expiration when using only RADIUS``
``     Only specify the ipatokenuniqueid default in the add operation``
``     Default the token owner to the person adding the token``
``     Update all remaining plugins to the new Registry API``
``     Add support for managedBy to tokens``
``     Periodically refresh global ipa-kdb configuration``
``     Make otptoken use os.urandom() for random data``
``     Implement OTP token importing``
``     Change OTPSyncRequest structure to use OctetString``
``     Add /session/token_sync POST support``
``     Add the otptoken-add-yubikey command``
``     Add otptoken-sync command``
Nick Hatch (1):
``     Don’t exclude symlinks when loading plugins``
Petr Viktorin (258):
``     Allow freeipa-tests to work with older paramiko versions``
``     Allow API plugin registration via a decorator``
``     Add missing license header to ipa-test-config``
``     Add CA-less install tests``
``     Add man pages for testing tools``
``     Remove __all__ specifications in ipaclient and ipaserver.install``
``     Make make-lint compatible with Pylint 1.0``
``     Move tests to test directories``
``     Convert test_ipautil from unittest to nose``
``     Add missing dict methods to CIDict``
``     Raise an error when updating CIDict with duplicate keys``
``     Use correct super-calls in get_args() methods``
``     test_integration.host: Move transport-related functionality to a new module``
``     test_integration: Add OpenSSHTransport, used if paramiko is not available``
``     ipatests.test_integration.test_caless: Fix mkdir_recursive call``
``     ipatests.beakerlib_plugin: Warn instead of failing when some logs are missing``
``     ipatests.order_plugin: Exclude test generators from the order``
``     ipatests.beakerlib_plugin: Add argument of generated tests to test captions``
``     ipatests.test_cmdline.test_help: Re-raise unexpected exceptions on failure``
``     Add tests for installing with empty PKCS#12 password``
``     Update translations from Transifex``
``     ipa-client-install: Use direct RPC instead of api.Command``
``     ipa-client-install: Verify RPC connection with a ping``
``     Do not fail upgrade if the global anonymous read ACI is not found``
``     ipapython.nsslib: Name arguments to NSPRError``
``     test_ipalib.test_crud: Don’t use a string in takes_options``
``     Add tests for the IntEnum class``
``     test_caless.TestCertInstall: Fix ‘test_no_ds_password’ test case``
``     Use new CLI options in certinstall tests``
``     Use a user result template in tests``
``     test_simple_replication: Fix waiting for replication``
``     Fix date in last changelog entry``
``     Update Permission and ACI plugins to decorator registration API``
``     Fix indentation in permission plugin tests``
``     Fix invalid assumption NSS initialization check in SSLTransport``
``     Help plugin: don’t fail if a topic’s module is not found``
``     Use new ipaldap entry API in aci and permission plugin``
``     Improve permission plugin test cleanup``
``     Tests: mkdir_recursive: Don’t fail when top-level directory doesn’t exist``
``     beakerlib plugin: Don’t try to submit logs if they are missing``
``     Fix debug output in integration test``
``     Add tests for user auth type management``
``     Remove unused utf8_encode_value functions``
``     ldapupdate: Factor out connection code``
``     dsinstance: Move the list of schema filenames to a constant``
``     Add schema updater based on IPA schema files``
``     Update the man page for ipa-ldap-updater``
``     Remove schema modifications from update files``
``     Remove schema special-casing from the LDAP updater``
``     Make schema files conform to new updater``
``     Add formerly update-only schema``
``     Unify capitalization of attribute names in schema files``
``     Update translations from Transifex``
``     Add ConcatenatedLazyText object``
``     Break long doc string in the Host plugin``
``     Improve LDAPEntry.__repr__ for freshly created entries``
``     Remove changelog from the spec``
``     Switch client to JSON-RPC``
``     Make jsonserver_kerb start a cookie-based session``
``     Add server/protocol type to rpcserver logs``
``     Add tests for the radiusproxy plugin``
``     test_integration: Support external names for hosts``
``     test_integration: Log external hostname in Host.ldap_connect``
``     Regression test for user_status crash``
``     test_webui: Allow False values in configuration for no_ca, no_dns, has_trusts``
``     Allow sets for initialization of frozenset-typed Param keywords``
``     Allow Declarative test classes to specify the API version``
``     Add tests for permission plugin with older clients``
``     Add new permission schema``
``     Rewrite the Permission plugin``
``     Verify ACIs are added correctly in tests``
``     Roll back ACI changes on failed permission updates``
``     permission plugin: Ensure ipapermlocation (subtree) always exists``
``     Make sure SYSTEM permissions can be retreived with –all –raw``
``     Test adding noaci/system permissions to privileges``
``     Remove default from the ipapermlocation option``
``     permission_find: Do not fail for ipasearchrecordslimit=-1``
``     cli.print_attribute: Convert values to strings``
``     Use new registration API in the privilege plugin``
``     Allow anonymous and all permissions``
``     rpcserver: Consolidate __call__ in xmlclient and jsonclient_kerb``
``     Implement XML introspection``
``     ipa-replica-install: Move check for existing host before DNS resolution check``
``     integration tests OpenSSHTransport: Expand tilde to home in root_ssh_key_filename``
``     ipa tool: Print the name of the server we are connecting to with -v``
``     Add a .mailmap file``
``     Correct Jenny Severance’s last name``
``     Update README and BUILD``
``     Remove the TODO file``
``     Permission plugin fixes``
``     permission plugin: Convert options in execute, not args_options_2_params``
``     permission plugin: Generate ACIs in the plugin``
``     Make it possible to call custom functions in Declarative tests``
``     Add support for managed permissions``
``     .mailmap: Remove spurious Kyle Baker line``
``     permission-mod: Do not copy member attributes to new entry``
``     permissions: Use multivalued targetfilter``
``     Add permission_filter_objectclasses for explicit type filters``
``     Add tests for multivalued filters``
``     Remove the unused ipalib.frontend.Property class``
``     permission plugin: Do not assume attribute-level rights for new attributes are present``
``     Update API.txt``
``     ipalib.plugins: Expose LDAPObjects’ eligibility for permission –type in JSON metadata``
``     Test fixed modlist generation code``
``     test_integration.config: Fix crash in to_env when no replica is defined``
``     test_integration.config: Do not save the input environment``
``     test_integration.config: Use a more declarative approach to test-wide settings``
``     test_integration.config: Do not store the index in Domain and Host objects``
``     test_integration.config: Load/store from/to dicts``
``     test_integration.config: Add environment variables for JSON/YAML``
``     ipa-test-config: Add –json and –yaml output options``
``     test_integration.config: Convert some text values to str``
``     Add tests for integration test configuration``
``     ipalib.plugable: Always set the parser in bootstrap()``
``     tests: Create the testing service certificate on demand``
``     permission-mod: Remove attributelevelrights before reverting entry``
``     permission plugin: Allow multiple values for memberof``
``     permissions plugin: Don’t crash with empty targetfilter``
``     permission-find: Cache the root entry for legacy permissions``
``     permission_add: Remove permission entry if adding the ACI fails``
``     Do not hardcode path to ipa-getkeytab in tests``
``     ipaserver.install.service: Fix estimated time display``
``     permission plugin: Output the extratargetfilter virtual attribute``
``     permission plugin: Write support for extratargetfilter``
``     permission CLI: Rename filter to rawfilter, extratargetfilter to filter``
``     permission plugin: Add tests for extratargetfilter``
``     permission plugin: Support searching by extratargetfilter``
``     permission plugin: Do not fail on non-DN memberof filters``
``     permission plugin: Do not change extra target filters by “views”``
``     Add Nathaniel McCallum to .mailmap``
``     test_integration.tasks: Do not fail cleanup if backup directory does not exist``
``     cli: Clean up imports``
``     cli: Show list of values in –help for all Enums``
``     cli: Add mechanism for deprecated option name aliases``
``     permission CLI: rename –permissions to –right``
``     permission plugin: Do not add the ipapermissionv2 for output``
``     Allow indexing API object types by class``
``     permission-find: Fix handling of the search term for legacy permissions``
``     test_permission_plugin: Fix tests that make too broad assumptions``
``     Allow modifying permissions with “:” in the name``
``     Add Object metadata and update plugin for managed permissions``
``     permission plugin: Add ‘top’ to the list of object classes``
``     Allow anonymous read access to containers``
``     Add managed read permissions to HBAC objects``
``     Document the managed permission updater operation``
``     Allow overriding all attributes of default permissions``
``     ipalib.errors: Fix TaskTimeout doctest``
``     Add managed read permissions to Sudo objects``
``     Add managed read permissions to group``
``     Add managed read permission to hostgroup``
``     CA-less tests: Use sequential certificate serial numbers``
``     Add mechanism for adding default permissions to privileges``
``     Add managed read permissions to RBAC objects``
``     Add managed read permissions to realmdomains``
``     Add managed read permission for SELinux user map``
``     test_realmdomains_plugin: Add default ACI to expected output``
``     Add managed read permissions to host``
``     Add managed read permissions to pwpolicy and cosentry``
``     Fix expected output in permission tests``
``     Add managed read permission to config``
``     Add managed read permissions to krbtpolicy``
``     Allow anonymous read access to Kerberos containers``
``     Add managed read permission to idrange``
``     Add managed read permission to automount``
``     Do not ask for memberindirect when updating managed permissions``
``     Add managed read permissions to automember``
``     test_integration.host: Export the hostname to dict as string``
``     Add a new ipaVirtualOperation objectClass to virtual operations``
``     Extend anonymous read ACI for containers``
``     Add managed read permission to service``
``     Add support for non-plugin default permissions``
``     Add several managed read permissions under cn=etc``
``     test_ldap: Read a publicly accessible attribute when testing anonymous bind``
``     aci-update: Trim the admin write blacklist``
``     aci-update: Add ACI for read-only admin attributes``
``     trust plugin: Remove ipatrustauth{incoming,outgoing} from default attrs``
``     Add managed read permissions to trust``
``     ipalib.aci: Add support for == and != operators to ACI``
``     Move ACI tests to the testsuite``
``     ipalib.aci: Allow alternate “aci” keyword in ACIs``
``     ipa-client-automount: Use rpcclient, not xmlclient, for automountlocation_show``
``     Replace “replica admins read access” ACI with a permission``
``     ipalib.cli: Add filename argument to ipa console``
``     Add managed read permissions to user``
``     update_managed_permissions: Pass around anonymous ACI rather than its blacklist``
``     Set user addressbook/IPA attribute read ACI to anonymous on upgrades from 3.x``
``     Remove the global anonymous read ACI``
``     ldap2.find_entries: Do not modify attrs_list in-place``
``     ipalib.version: Add VENDOR_VERSION``
``     admin tools: Log IPA version``
``     dns: Add idnsSecInlineSigning attribute, add –dnssec option to zone``
``     pwpolicy-mod: Fix crash when priority is changed``
``     aci plugin: Fix internal error when ACIs are not readable``
``     Add managed read permission for the UPG Definition``
``     ldap2.has_upg: Raise an error if the UPG definition is not found``
``     krbtpolicy plugin: Code cleanup``
``     krbtpolicy plugin: Fix internal error when global policy is not readable``
``     Add read permissions for automember tasks``
``     ipalib.aci: Fix bugs in comparison``
``     test_permission_plugin: limit results in targetfilter find test``
``     Add mechanism for updating permissions to managed``
``     Convert Sudo rule default permissions to managed``
``     Add missing attributes to ‘Modify Sudo rule’ permission``
``     Split long docstrings that were recently modified``
``     managed perm updater: Handle case where we changed default ACIs in the past``
``     Convert User default permissions to managed``
``     Add missing attributes to User managed permissions``
``     permission plugin: Sort rights when writing the ACI``
``     Add method to enumerate managed permission templates``
``     Add ACI.txt``
``     Make ‘permission’ the default bind type for managed permissions``
``     Make sure member* attrs are always granted together in read permissions``
``     ipalib.frontend: Do API version check before converting arguments``
``     ipalib.config: Only convert basedn to DN``
``     ipalib.config: Don’t autoconvert values to float``
``     Fix self argument in tasks``
``     managed permission updater: Add mechanism to replace SYSTEM permissions``
``     Convert DNS default permissions to managed``
``     Remove the update_dns_permissions plugin``
``     Add $REALM to variables supported by the managed permission updater``
``     Convert COSTemplate default permissions to managed``
``     Convert Password Policy default permissions to managed``
``     Allow read access to masters, but not their services, to auth’d users``
``     Fix: Allow read access to masters, but not their services, to auth’d users``
``     Allow anonymous read access to virtual operation entries``
``     Test and docstring fixes``
``     permission plugin: Join –type objectclass filters with OR``
``     Add posixgroup to groups’ permission object filter``
``     Convert Host default permissions to managed``
``     host permissions: Allow writing attributes needed for automatic enrollment``
``     netgroup: Add objectclass attribute to read permissions``
``     Convert Automount default permissions to managed``
``     Convert Group default permissions to managed``
``     Convert HBAC Rule default permissions to managed``
``     Convert HBAC Service default permissions to managed``
``     Convert HBAC Service Group default permissions to managed``
``     Convert Hostgroup default permissions to managed``
``     Convert Netgroup default permissions to managed``
``     Convert the Modify privilege membership permission to managed``
``     Convert Role default permissions to managed``
``     Convert SELinux User Map default permissions to managed``
``     Convert Service default permissions to managed``
``     Convert Sudo Command default permissions to managed``
``     Convert Sudo Command Group default permissions to managed``
``     Add several CRUD default permissions``
``     test_permission_plugin: Fix permission_find test for legacy permissions``
``     Update translations``
``     install/ui/build: Build core.js``
``     permission plugin: Ignore unparseable ACIs``
``     Allow admins to write krbLoginFailedCount``
``     Do not fail if there are multiple nsDS5ReplicaId values in cn=replication,cn=etc``
``     test_ipagetkeytab: Fix expected error message``
``     test_ipaserver: Add OTP token test data to ipatests package``
``     ldapupdate: Restore ‘replace’ functionality``
``     Allow read access to services in cn=masters to auth’d users``
``     makeaci: Use the DN where the ACI is stored, not the permission’s DN``
``     Update translations``
``     Become IPA 4.0.0``
Petr Voborník (264):
``     Make ssh_widget not-editable if attr is readonly``
``     Hide delete button in multivalued widget if attr is not writable``
``     Removal of deprecated selenium tests``
``     Add base-id, range-size and range-type options to trust-add dialog``
``     Hide ‘New Certificate’ action on CA-less install``
``     Web UI integration tests: CA-less``
``     Web UI Integration tests: Kerberos Flags``
``     Web UI integration tests: ID range types``
``     Show human-readable error name in error dialog title``
``     Update idrange search facet after trust creation``
``     Fix RUV search scope in ipa-replica-manage``
``     Fix redirection on deletion of last dns record entry``
``     Allow edit of ipakrbokasdelegate in Web UI when attrlevelrights are unknown``
``     Fix enablement of automount map type selector``
``     ipatests.test_integration.host: Add logging to ldap_connect()``
``     Load updated Web UI files after server upgrade``
``     Removal of unused code``
``     Web UI source code annotation``
``     Configuration for JSDuck documentation generator``
``     Phases Guide``
``     Debugging Web UI guide``
``     Plugin Infrastructure Guide``
``     Navigation Guide``
``     Registries and Build Guide``
``     Fix password expiration notification``
``     Fix license in some Web UI files``
``     Increase stack size for Web UI builder``
``     Remove SID resolve call from Web UI``
``     Fix disabled logic of menu item``
``     RCUE initial commit``
``     Move RCUE styles to its own directory``
``     Delete Overpass fonts in UI root``
``     Use RCUE fonts``
``     Updated sync.sh``
``     Change menu rendering to match RCUE structure``
``     Allow RCUE``
``     Prefer Open Sans Regular font``
``     Remove background``
``     Remove width limit``
``     Remove jquery UI``
``     RCUE Navigation``
``     RCUE Header``
``     New header logo``
``     Adapt password expiration notification to new navigation``
``     Fix breadcrumb``
``     Fix search facet table styling - bug in chrome``
``     Fix action panel list styles``
``     Remove jquery button usage and unify button code``
``     Change undo to regular button``
``     Change undo-all to regular button``
``     New checkboxes and radio styles``
``     Always create radio and checkbox with label``
``     New Fluid form layout``
``     Use Fluid layout be default``
``     Do not display tooltip everywhere``
``     RCUE dialog implementation``
``     RCUE dialog close icon``
``     Dialog keyboard behavior``
``     Fluid layout in DNS Zone adder dialog``
``     Fix Association adder dialog styling``
``     CSS: make hostname in host adder dialog wider``
``     Do not open dialog in a container``
``     Remove left-margin from details-section``
``     Fix h1 style in dialog``
``     Fix radios behavior in automount map adder dialog``
``     CSS: fix network activity indicator position in control panel``
``     Fix padding of link buttons and labels in forms``
``     CSS: fix footer padding``
``     Fix hbac test styling``
``     Fix search input styling``
``     Combobox styles``
``     Action list styling``
``     Dojo event support in widgets``
``     Display required, enabled and error widget states in fluid layout``
``     Focus input on label click in fluid layout``
``     Do not show section header in unauthorized dialog``
``     username_r in password reset part of unauthorized dialog should be enabled as well``
``     Fix notification area``
``     Add style to dialog message area``
``     Update Dojo to 1.9.1``
``     Remove last usage of jQuery UI``
``     Update jQuery to version 2.0.3``
``     Add Font Awesome``
``     Change font-awesome to be compilable by lesscpy``
``     Font Awesome icons in header``
``     Replace icons with the ones from Font Awesome``
``     Status widgets icons``
``     Facet title status icons``
``     Use font awesome glyph for dialog close button``
``     Font awesome glyphs as checkboxes and radios``
``     Increase margin between facet control buttons``
``     Fix association adder dialog table-body position``
``     New header spinner``
``     Increase distance between control buttons and facet-tabs``
``     About dialog``
``     Use fluid layout in host adder dialog fqdn widget``
``     Web UI integration tests: maximize browser window by default``
``     Use only system fonts``
``     Trust domains Web UI``
``     webui: Focus expand/collapse link in batch_error dialog``
``     webui: Don’t act on keyboard events which originated in different dialog``
``     Added empty value meaning to boolean formatter``
``     Declarative replacement of array item in specification object``
``     Fixed doc examples in Spec_mod``
``     Password Dialog``
``     Use general password dialog for host OTP``
``     Fix handling of action visibility change in action panel``
``     UI for OTP tokens``
``     UI for radius proxy``
``     UI for managing user-auth types``
``     Added QRcode generation to Web UI``
``     Support OTP in form based auth``
``     webui: use unique ids for checkboxes``
``     webui: Datetime parsing and formatting``
``     webui: remove hover effect from disabled action button``
``     webui-css: improve radio,checkbox keyboard support and color``
``     webui: do not use dom for getting selected automount keys``
``     webui-static: update metadata files``
``     webui: fix unit tests``
``     webui: better check for existing options in attributes_widgets``
``     webui: do not create ⟨hr⟩ delimiter between sections``
``     webui: reflect enabled state in child widgets of a multivalued widget``
``     webui: change permissions UI to v2``
``     webui: update license information of used third party code``
``     webui-ci: fix test_rebuild_membership_hosts on server without DNS``
``     webui: rename domNode to dom_node``
``     webui: make navigation module independent on app module``
``     webui: move RPC code from IPA module to its own module``
``     webui: replace IPA.command usage with rpc.command``
``     webui: field and widget binding refactoring``
``     webui: replace widget’s hidden property with visible``
``     webui: change widget updated event into value change event``
``     webui-tests: binding test suite``
``     webui: facet container``
``     webui: FormMixin``
``     webui: ContainerMixin``
``     webui: standalone facet``
``     webui: activity widget``
``     webui: publish network activity topics``
``     webui: load page``
``     webui: validation summary widget``
``     webui: login screen widget``
``     webui: login page``
``     webui: authentication module``
``     webui: use asynchronous call for authentication``
``     webui: fix combobox styles to work with selenium testing``
``     webui-ci: adapt to new login screen``
``     webui: remove IPA.unauthorized_dialog``
``     webui: fix OTP Token add regression``
``     webui: regression - enable fields on idrange type change (add)``
``     webui-ci: adjust id range tests to new validator``
``     webui: fix switching between multiple_choice_section choices``
``     webui: otptoken-adder dialog - remove obsolete comment``
``     migration: fix import of wsgiref.util``
``     webui-ci: save screenshot on test failure``
``     webui-ci: decorate all webui tests with screenshot decorator``
``     rpcserver: login_password datetime fix in expiration check``
``     Increase Java stack size for Web UI build on aarch64``
``     webui: remove logout.html``
``     webui: remove login.html``
``     webui: add PaternFly css``
``     webui: apply PatternFly login theme on reset_password.html``
``     webui: apply PatternFly theme on config pages``
``     webui: styles for alert icons``
``     webui: apply PatternFly theme on migration pages``
``     webui: remove remnants of jquery-ui``
``     webui: remove unused icons``
``     webui: remove unused collapsible feature from section``
``     webui: remove unused images``
``     webui: change absolutely positioned layout to fluid``
``     webui: remove column sizing in tables, use PF styles``
``     webui: change navigation from RCUE to PatternFly``
``     webui: adjust styles to PatternFly``
``     webui: display undo and multivalued delete buttons in input-group``
``     webui: allow multiple base section layouts``
``     webui: change breadcrumb to PatternFly``
``     webui: use h1 in facet title instead of h3``
``     webui: remove action list widget``
``     webui: add action dropdown``
``     webui: add space between action buttons’s icon and text``
``     webui: remove select action``
``     webui: add confirmation to action dropdown actions``
``     webui: move certificate actions to action dropdown``
``     webui: move user reset password action to action dropdown``
``     webui: patternFly dialog``
``     webui: adjust association adder dialog to PatternFly``
``     webui: activity indicators``
``     webui: improve pagination``
``     webui: do not show empty table footer``
``     webui: restyle automember default group``
``     webui: preload automember default group select list``
``     webui: adjust login page to PatternFly``
``     webui: use BS alerts in validation_summary_widget``
``     webui-ci: select search table item - chrome issue``
``     webui: remove old css for standalone pages``
``     webui: adjust header controls alignment``
``     webui: add search box placeholder text``
``     webui: change control buttons to normal buttons``
``     webui: certificate search - select search attribute only when defined``
``     webui: association adder dialog - change find label to filter``
``     webui: use dark color for facet titles without pkey``
``     webui-ci: assert_action_list_action``
``     webui: move host action panel actions to action dropdown``
``     webui: move service action panel actions to action dropdown``
``     webui: use normal buttons instead of link buttons in multivalued widget``
``     webui: move radius proxy action panel commands to header actions``
``     webui: proper alerts in dialogs``
``     webui: use propert alerts in header notification area``
``     webui: fix search box overlap in mobile mode``
``     webui: fix layout of QR code on wide screens``
``     webui: break long text in a code element in a modal``
``     webui: fix regression: enabled gid field on group add``
``     webui: add idnsSecInlineSigning option to DNS zone details facet``
``     webui: simplify self-service menu``
``     webui: display only dialogs which belong to current facet``
``     webui: handle back button when unauthenticated``
``     webui: fix SSH Key widget update``
``     webui: handle “unknown” result of automember-default-group-show``
``     webui: control sudo rule deny command tables by category switch``
``     webui: add sudoorder field to sudo rule page``
``     webui: move RPC result extraction logic to Adapter``
``     webui: expose krbprincipalexpiration``
``     webui: fix excessive registration of state change event listeners``
``     webui: support standalone facets in navigation module``
``     webui: generic routing``
``     webui: add parent link to widgets in ContainerMixin``
``     webui: plugin API``
``     webui-ci: adjust tests to dns changes``
``     webui: fix field’s default value``
``     webui: don’t limit permission search in privileges``
``     ldap2: add otp support to modify_password``
``     rpcserver: add otp support to change_password handler``
``     ipa-passwd: add OTP support``
``     webui: support password change with OTP in login screen``
``     webui: placeholder attribute support in textbox and textarea``
``     webui: add placeholders to login screen``
``     webui: rebase user password dialog on password dialog and add otp support``
``     webui: support otp in reset_password.html``
``     rpcserver: fix local vs utc time comparison``
``     webui: add confirmation for dns zone permission actions``
``     webui: dns forward zones``
``     webui-ci: dns forward zone tests``
``     webui-test: static metadata update``
``     webui-test: dns forward zone json data``
``     webui: fix detection of RPC command``
``     webui: send API version in RPC requests``
``     webui: extract rpc value from object envelope``
``     webui: base class for LoginScreen-like facets``
``     webui: add OTP token synchronization``
``     webui: add link pointing to OTP sync page to login``
``     webui: support global notifications in all containers``
``     webui: bind Login facet and OTP sync facet``
``     webui: fix confirmation mixin origin check``
``     webui: layer for standalone pages which use WebUI framework``
``     webui: add sync_otp.html``
``     webui-ci: fix action list action visibility and enablement assertion``
``     webui: support unlock user command``
``     webui: show notification instead of modal dialog on validation error``
``     webui: fix required error notification in multivalued widget``
``     webui: focus invalid widget on validation error``
``     webui-build: use /usr/share/java/js.jar instead of rhino.jar``
``     webui: change ipatokennotbefore and ipatokennotafter types to datetime``
``     webui: new navigation structure``
``     webui: display messages contained in API responses``
Petr Špaček (15):
``     Add timestamps to named debug logs in /var/named/data/named.run``
``     Clarify error message about IPv6 socket creation in ipa-cldap plugin``
``     Treat error during write to /etc/resolv.conf as non-fatal.``
``     Limit memberOf and refInt DS plugins to main IPA suffix.``
``     Remove working directory for bind-dyndb-ldap plugin.``
``     Use private IPv4 addresses for tests``
``     Rename variables in test xmlrpc/dns_plugin``
``     Use reserved domain names for tests``
``     tests: Move zone enable/disable tests to end of test_dns_plugin.py``
``     Fix regular expression for LOC records in DNS.``
``     Modify DNS tests with LOC records to workaround bug in python-dns.``
``     Clarify error message about missing DNS component in ipa-replica-prepare.``
``     Add wait_for_dns option to default.conf.``
``     Fix –ttl description for DNS zones``
``     Clarify LDAPClient docstrings about get_entry, get_entries and find_entries``
Rob Crittenden (5):
``     Re-order NULL check in ipa_lockout.``
``     Change the way we determine if the host has a password set.``
``     Implement an IPA Foreman smartproxy server``
``     Clean up Smartproxy support, drop unused code``
``     Remove IPA Foreman Smart Proxy``
Simo Sorce (16):
``     pwd-plugin: Fix ignored return error``
``     kdb-mspac: Fix out of bounds memset``
``     kdb-princ: Fix memory leak``
``     Add Delegation Info to MS-PAC``
``     Add krbticketPolicyAux objectclass if needed``
``     Fix license tag in python setup files``
``     Harmonize policy discovery to kdb driver``
``     Stop adding a default password policy reference``
``     Check for password expiration in pre-bind``
``     keytabs: Modularize setkeytab operation``
``     keytabs: Expose and modify key encoding function``
``     keytab: Add new extended operation to get a keytab.``
``     ipa-getkeytab: Modularize ldap_set_keytab function``
``     ipa-getkeytab: Add support for get_keytab extop``
``     man: Add -r option to ipa-getkeytab.1``
``     Fix getkeytab code to always use implicit tagging.``
Sumit Bose (9):
``     CLDAP: make sure an empty reply is returned on any error``
``     CLDAP: do not read IPA domain from hostname``
``     Use the right attribute with ipapwd_entry_checks for MagicRegen``
``     Remove AllowLMhash from the allowed IPA config strings``
``     Remove generation and handling of LM hashes``
``     CLDAP: do not prepend \``
``     CLDAP: generate NetBIOS name like ipa-adtrust-install does``
``     CLDAP: add unit tests for make_netbios_name``
``     extdom: do not return results from the wrong domain``
Thorsten Scherf (4):
``     Fixed typo how to create an example gpg key``
``     Fixed typo in ipa-test-task man page``
``     Fixed various typos in ipa-client-install man page``
``     Fixed typo in ipa-replica-manage man page``
Timo Aaltonen (2):
``     Use /usr/bin/python as fallback python path``
``     Don’t search platform path``
Tomáš Babej (139):
``     Remove support for IPA deployments with no persistent search``
``     Remove redundant shebangs``
``     Perform dirsrv tuning at platform level``
``     Make CS.cfg edits with CA instance stopped``
``     Fix incorrect error message occurence when re-adding the trust``
``     Log proper error message when defaultNamingContext not found``
``     Use getent admin@domain for nss check in ipa-client-install``
``     Do not add trust to AD in case of IPA realm-domain mismatch``
``     Warn user about realm-domain mismatch in install scripts``
``     trusts: Do not create ranges for subdomains in case of POSIX trust``
``     ipa-upgradeconfig: Remove backed up smb.conf``
``     ipa-adtrust-install: Add warning that we will break existing samba configuration``
``     adtrustinstance: Properly handle uninstall of AD trust instance``
``     adtrustinstance: Move attribute definitions from setup to init method``
``     ipatests: Extend the order plugin to properly handle inheritance``
``     Get the created range type in case of re-establishing trust``
``     ipatests: Add Active Directory support to configuration``
``     ipatests: Extend domain object with ‘ad’ role support and WinHosts``
``     ipatests: Extend IntegrationTest with multiple AD domain support``
``     ipatests: Create util module for ipatests``
``     ipatests: Add WinHost class``
``     ipatests: Add AD-integration related tasks``
``     ipatests: Add AD integration test case``
``     trusts: Fix typo in error message for realm-domain mismatch``
``     advice: Add legacy client configuration script using nss-ldap``
``     ipatests: Extend clear_sssd_cache to support non-systemd platforms``
``     ipatests: Restore SELinux context after restoring files from backup``
``     ipatests: Do not use /usr/bin hardcoded paths``
``     ipatests: Add support for extra roles referenced by a keyword``
``     ipatests: Use command -v instead of which in legacy client advice``
``     ipatests: Add integration tests for legacy clients``
``     ipatests: test_trust: use domain name instead of realm for user lookups``
``     platform: Add Fedora 19 platform file``
``     ipa-client-install: Publish CA certificate to systemwide store``
``     trusts: Do not pass base-id to the subdomain ranges``
``     trusts: Always stop and disable smb service on uninstall``
``     ipa-client-install: Always pass hostname to the ipa-join``
``     ipa-cldap: Cut NetBIOS name after 15 characters``
``     Fix incorrect path in error message on sysrestore failure``
``     acl: Remove krbPrincipalExpiration from list of admin’s excluded attrs``
``     ipatests: Remove sudo calls from tasks``
``     ipatests: Check for legacy_client attribute presence if unapplying fixes``
``     ipatests: test_legacy_clients: Change “test group” to “testgroup”``
``     ipatests: Add records for all hosts in master’s domain``
``     ipatests: Run restoring backup files and restoring their context in one session``
``     ipatests: legacy_clients: Test legacy clients with non-posix trust``
``     ipatests: Perform a connection test before preparing the client``
``     ipatests: Make sure we re-kinit as admin before adding the disabledipauser``
``     ipatests: Stop sssd service before deleting the cache``
``     ipatests: Add test cases for subdomain users on legacy clients``
``     ipatests: Change expected home directories returned by getent``
``     ipatests: Do not require group name resolution for the non-posix tests``
``     ipatests: Fix incorrect order of operations when restoring backup``
``     trusts: Remove usage of deprecated LDAP API``
``     man: sshd should be run at least once before client enrollment``
``     Prohibit deletion of active subdomain range``
``     ipatests: test_trust: Change expected home directories for posix users``
``     ipatests: Do not depend on the case of the attributes when testing ID ranges``
``     ipatests: Make sure that remnants of PKI are removed``
``     ipatests: legacy_clients: Use hostname instead of external hostname for AD subdomain``
``     ipatests: legacy_clients: Relax regex checks``
``     ipatests: tasks: Wait 2 seconds after restart of SSSD when clearing the cache``
``     ipa-pwd-extop: Fix memory leak in ipapwd_pre_bind``
``     ipa-range-check: Fix memory leaks when freeing range object``
``     Extend ipa-range-check DS plugin to handle range types``
``     ipatests: Fix apache semaphores prior to installing IPA server``
``     ipatests: tasks: Accept extra arguments when installing client``
``     ipatests: Allow using FQDN with trailing dot as final hostname``
``     ipatests: Fix incorrect UID/GID reference for subdomain users and groups``
``     ipa_range_check: Use special attributes to determine presence of RID bases``
``     ipa_range_check: Connect the new node of the linked list``
``     ipa_range_check: Make a new copy of forest_root_id attribute for range_info struct``
``     ipa_range_check: Do not fail when no trusted domain is available``
``     ipa_range_check: Fix typo when comparing strings using strcasecmp``
``     ipa_range_check: Change range_check return values from int to range_check_result_t enum``
``     ipatests: Extend test suite for ID ranges``
``     ipa-pwd-extop: Deny LDAP binds for accounts with expired principals``
``     ipalib: Add DateTime parameter``
``     ipatests: Cover DateTime in test_parameters.py``
``     ipalib: Expose krbPrincipalExpiration in CLI``
``     ipatests: Fix formatting errors in test_user_plugin.py``
``     ipatests: Add coverage for setting krbPrincipalExpiration``
``     ipatests: Add test for denying expired principals``
``     ipa-client: Set NIS domain name in the installer``
``     ipa-client-install: Configure sudo to use SSSD as data source``
``     ipatests: Add Sudo integration test``
``     ipatests: legacy clients: Do not use external hostnames for testing login to legacy clients from master``
``     ipatests: Setup SSSD debugging mode by default``
``     ipatests: Enable SSSD debugging on legacy clients with SSSD``
``     ipaplatform: Create separate module for platform files``
``     ipaplatform: Move service base platfrom related functionality to ipaplatform/base/service.py``
``     ipaplatform: Move default implementations of tasks from service.py.in``
``     ipaplatform: Create default implementations for tasks that were missing them``
``     ipaplatform: Add base fedora platform module``
``     ipaplatform: Moved Fedora 16 service implementations and refactored them as base Fedora module service implementations``
``     ipaplatform: Move restore_context and check_selinux_status implementations to base fedora platform tasks``
``     ipaplatform: Do not require custom Authconfig implementations from platform modules``
``     ipaplatform: Remove legacy redhat platform module``
``     ipaplatform: Move Fedora-specific implementations of tasks to fedora base platform file``
``     ipaplatform: Change platform dependant code in freeipa to use ipaplatform tasks``
``     ipaplatform: Change service code in freeipa to use ipaplatform services``
``     ipaplatform: Change paths dependant on ipaservices to use ipaplatform.paths``
``     ipaplatform: Remove redundant imports of ipaservices``
``     ipaplatform: Move all filesystem paths to ipaplatform.paths module``
``     ipaplatform: Remove remnants of the ipapython/platform``
``     ipaplatform: Change makefiles to accomodate for new platform package``
``     ipaplatform: Let fedora path module use PathNamespace class``
``     ipaplatform: Link to platform module during build time``
``     ipaplatform: Pylint fixes``
``     ipaplatform: Contain all the tasks in the TaskNamespace``
``     ipaplatform: Move hardcoded paths from Fedora platform files to path namespace``
``     sudorule: Allow unsetting sudoorder``
``     trusts: Allow reading ipaNTSecurityIdentifier in user and group objects``
``     trusts: Add more read attributes``
``     trusts: Allow reading system trust accounts by adtrust agents``
``     sudorule: PEP8 fixes in sudorule.py``
``     sudorule: Allow using hostmasks for setting allowed hosts``
``     sudorule: Allow using external groups as groups of runAsUsers``
``     sudorule: Make sure sudoRunAsGroup is dereferencing the correct attribute``
``     sudorule: Include externalhost and ipasudorunasextgroup in the list of default attributes``
``     sudorule: Allow adding deny commands when command category set to ALL``
``     sudorule: Make sure all the relevant attributes are checked when setting category to ALL``
``     sudorule: Fix the order of the parameters to have less chaotic output``
``     sudorule: Enforce category ALL checks on dirsrv level``
``     ipatests: test_sudo: Add tests for allowing hosts via hostmasks``
``     ipatests: test_sudo: Add coverage for external entries``
``     ipatests: test_sudo: Add coverage for category ALL validation``
``     ipatests: test_sudo: Fix assertions not assuming runasgroupcat set to ALL``
``     ipatests: test_sudo: Do not expect enumeration of runasuser groups``
``     ipatests: test_sudo: Expect root listed out if no RunAsUser available``
``     sudorule: Refactor add and remove external_post_callback``
``     ipaplatform: Document the platform tasks API``
``     ipaplatform: Drop the base authconfig class``
``     ipaplatform: Fix build warnings``
``     ipaplatform: Fix misspelled path constant``
``     ipaplatform: Move paths from installers to paths module``
``     ipa-client-install: Restart nisdomain service instead of starting``
``     ipaldap: Override conversion of nsds5replicalast{update,init}{start,end}``
``     ipalib: Use DateTime parameter class for OTP token timestamp attributes``
Xiao-Long Chen (1):
``     Use /usr/bin/python2``