The hardware setup list says when a setup's image is missing or was never set, so the web app can warn every user and not just those who can list VM images
A login challenge can be answered only once, and each login attempt asks for a new one. Before, a captured answer could be replayed to open new sessions until the challenge expired
Super-admin accounts are no longer locked after a long time without logging in, so a deployment can no longer lose its only Super-admin to the inactivity lock
Users locked because their account expired, or locked with an API token, show the deactivation type "Admin" instead of "Timeout"
Users below Sub-admin, who lack the permission to modify users, no longer see other users' deactivation reasons and registration comments in user lists and email search results
Sub-admins who have the permission to list all users now see every user under Management, Users. Before, they saw only the users of the teams and projects they manage. They can still change only the users they manage
Creating a user with an expiration date through the API is refused; before, the user was created without it. Set the expiration date after creating the user
Admins can no longer remove a group's owner from the group; transfer the ownership first
User quota names containing ".", "$", "<", ">" or a null character are refused, as they already were for team quotas
Listing messages returns at most 500 messages per request
Moving a file or directory into a sub-project needs access to the project it is currently in
Renaming a vault entry to a name already used in the same directory is refused; before, it replaced the other entry
Changing a VM's project needs ownership or management of the VM; Admins are not affected
Admins can no longer give a user a reserved VM account name, such as root, nobody, system, con, prn, aux, nul, com1 to com9 or lpt1 to lpt9; users who already have one keep it
VM account names are no longer generated as con, prn or system; these users need an Admin to set their VM account name, as users named root or nobody already did
Creating a data VM through the API returns a clear "Data VMs are not supported" error instead of an internal error
A VM keeps only its 50 most recent VM controller info reports; before, they piled up without limit
Random MAC addresses given to new Libvirt VMs are locally administered (their first octet is, for example, 02, 06, 0a or fe), so they cannot clash with a physical network card
Random MAC addresses given to new Nutanix VMs without a set MAC address are locally administered too, so they cannot clash with a physical network card
Saving a hardware setup or hardware profile refuses raw libvirt XML that is not well-formed on its own
Deleting a hardware profile that is not stored in the database, such as one defined only in the realm configuration, reports that the profile does not exist instead of reporting success
Testing the connection to a Nutanix realm needs a Super-admin session
Restarting a service as someone who is not a Super-admin answers 403 Forbidden instead of 404 Not Found
Error replies no longer include database or libvirt error text from the underlying cause; turn on errors.include-stack-trace in ticrypt-rest to see it
The database export writes only under ticrypt.auth.mongo-export.base-directory (default /var/lib/ticrypt/mongo-export): a relative directory is created there, and a directory outside it is refused
Backend services log at INFO instead of DEBUG, so the journal no longer fills with library debug output. The log level is set in the new /etc/ticrypt/logback.xml
The VM service no longer writes the parameters given to a VM into its log
Services log a warning the first time a message type is sent to another service with Java serialization
The ticrypt-allowedlist-ipset service writes its ipset file to /run/ticrypt instead of /tmp
A single-use session, such as the one used to add a user from a signed message, ends after its first use; before, it stayed valid until it expired
Re-activating a user keeps their account expiration date if it is still in the future, and an expiration date sent with the re-activation is saved
Changing a user's email to one already in use says the email is taken instead of reporting a server error
Changing a user's permissions to an unknown or malformed set is refused with a clear error instead of a server error
Every permission group, such as "@slurm" or "@vm-config", can be used in default-permissions and banned-permissions
Signature algorithms with parameters, such as "RSA-PSS-SHA256#saltLen=32", are accepted instead of failing with a server error
A new or deleted profile picture shows right away instead of after up to 20 minutes
Error messages and logs no longer contain session tokens, profile pictures, setting values or escrow request bodies
Deleting an API token or a message reports an error when the delete fails, instead of reporting success
Failed device-manager logins and failed file ownership changes are recorded as failures in the audit log
The audit log records a hash of a new profile picture, the error codes of device manager changes, and a "security level retrieved" entry when one security level is read
A file upload whose hash does not match, a failed hardware setup or VM configuration lookup, and running out of proxy ports report their own error codes
A new project is returned only once its creator has been added as its manager, so actions on it right after creation no longer fail
A project manager who is the project's last member can delete the project; their own membership is removed with it
The admin project statistics show file, directory and VM usage for projects that have no members
New teams no longer get an end date equal to their creation time
A group whose owner was removed from it can be given a new owner again, and transferring the ownership to the current owner no longer takes away the owner's group permissions
Setting a quota for a user whose quotas were never listed no longer fails, and the user's quota "last updated" time is kept current
Renaming a vault entry that no longer exists reports an error instead of leaving a hidden entry that blocks the new name
A failure while creating a user's or group's root directory can no longer leave a vault that never loads
Users are no longer told about drive key changes that failed, and a failed key escrow is no longer also logged as a success
Starting a VM with a MAC address that a running VM already uses is refused on every realm type, and VM configurations use their MAC address options
A VM's managers can detach drives from it, as they can already attach them
Taking a VM configuration out of a time-limited access rule closes its open access, even when someone opens it at that moment; before, adding the configuration back reopened access until the old opening expired
Setting a VM account name that another user already has reports "Account name already in use" instead of a database error
VM controller info reports that arrive at the same time no longer overwrite each other
External (Slurm) VMs report the protocol version they registered with instead of 0
Creating a drive with a pool name finds the pool in the drive's realm instead of the default realm
"Create and attach drive" creates the drive in the VM's realm, and no longer leaves an unused drive behind when the attach fails
Finishing a large drive upload no longer reports success when the drive key could not be saved
A drive import that cannot link the drive file no longer leaves a "Ready" drive without a volume, and a failed import no longer leaves a drive record behind
Drive move requests sent while the server is still connecting to the TICP copier are sent again once it connects, instead of being lost when that connection attempt is refused
The attached filter of the drive list API returns only the attached, or only the unattached, drives; before, it returned none or all of them
A drive snapshot commit that gives up after too many failed attempts is recorded as failed with a reason, instead of staying in progress
A drive created in a Libvirt realm no longer stays "Initializing" when one of the realm's hosts cannot refresh the drive's storage pool
Images and pool contents listed right after a volume was created include that volume
Forcing a shutdown of all VMs on a Libvirt host no longer reports an error after the VMs have been destroyed
VMs whose hardware setup uses VNC video get the debug registration timeout again (2 hours by default), instead of being destroyed after 4 minutes when they have not registered
Deleting a hardware profile in a Libvirt realm whose name differs from its ID removes the profile
The hardware profile list of a Libvirt realm no longer randomly leaves out profiles defined in the realm configuration
A disabled Libvirt host that registers itself again as enabled stays enabled and gets connected, instead of being disabled again
Launching a VM on a Libvirt host with a MAC address list checks the addresses in one database query, instead of reading every active VM once per address
Rare races in Libvirt realms no longer leave a deep-cloned image locked or a host's resource usage out of date
vGPU slots are tracked correctly for VMs with five or more PCI devices
Host reservations with a fractional or too large number of hosts are refused, instead of being created with zero or a negative number of hosts
Testing the connection of a Nutanix v2 realm returns a "not supported" error at once; before, the request went unanswered until it timed out and the realm manager restarted
Nutanix VM creation errors show the message Nutanix returned instead of an empty one
Starting, stopping and deleting Nutanix VMs no longer ties up connections to Prism until a timeout
Nutanix v2 realms remove deleted VMs and detached backed-up drives from the protection domain, and log an error when Nutanix refuses
A Nutanix task that cannot be polled fails the waiting operation right away instead of after the request timeout
The VM service applies the cache settings under ticrypt.vm.caching.vms (size and expiry), and a deleted external VM is no longer served from the cache
A licensing-server-driver value written in mixed case, such as "FirewallD", no longer keeps the VM service from starting
Expired port reservations keep being removed after a database error, instead of piling up until the VM service restarts
Batch jobs no longer fail after a VM configuration's Slurm account is removed and set up again; the batch service no longer needs a restart
A batch job submitted while the periodic job cleanup runs is no longer cancelled right after it starts
The periodic cleanup of finished batch jobs no longer stops working because of an old job record without a Slurm job ID
A batch job's VM controller connection no longer stalls or closes after a fragmented or malformed message
Requeueing several batch jobs at once through the API works
Updating a Slurm account's fair-share works when the web app is served from another address than the server
The CPU and memory usage statistics each service reports are correct
The logging library is updated to a version that fixes CVE-2023-6378, CVE-2023-6481, CVE-2024-12798 and CVE-2024-12801
Removing the ticrypt-maintenance, ticrypt-allowedlist or ticrypt-allowedlist-ipset package stops and disables its service, once this release is installed
ticrypt-services.sh reloads the systemd units only when starting services, not for every command
The ticrypt-allowedlist and ticrypt-allowedlist-ipset services no longer stop on a blank or malformed line in the allowed list or on a failed firewall command, and a failed DNS lookup no longer drops a host from the list
The ticrypt-allowedlist and ticrypt-allowedlist-ipset packages install on hosts without internet access. Before, the install failed because it downloaded a Python module with pip
The drive recovery scripts, delete_virt_account.sh and the file recovery guide use the right output stream and database names
The log analyzer's load.sh no longer deletes the live ticrypt-secure-log.log
To get debug logs, set the root level to DEBUG in /etc/ticrypt/logback.xml and restart the service. An existing /etc/ticrypt/logback.xml is kept on upgrade
Scripts that export the database to a directory outside /var/lib/ticrypt/mongo-export must send a relative directory, or set ticrypt.auth.mongo-export.base-directory in /etc/ticrypt/ticrypt-auth.conf