Skip to main content
Version: 2.1.0

2.1.1

A repair release for servers on the native stack, plus per-account permission groups. Almost everything here is something that was quietly wrong in 2.1.0 rather than a new capability — and most of it failed in silence, which is why it took a customer to find it.

Fixed​

  • Adding a domain failed with "Error adding domain name". root's MySQL client had credentials but no default schema, so every plain mysql -e in the CLI came back with No database selected. The same cause showed up as "Docroot not found for domain" and, on the Change Docroot page, as a raw SQL statement printed into the page.
  • Template changes never reached the servers. The deploy shipped them beside the live set and nothing copied one to the other, so no fix to a vhost template had ever taken effect.
  • Links jumped to port 8188. nginx built its directory redirects out of its own loopback port, sending visitors to http://<domain>:8188/.
  • Changing a plan took up to a day to reach the customer. Three places tried to invalidate the cached feature list and none could: they dropped keys named after functions that stopped existing when the panel was rewritten in Go. hitechcloudcli cache-forget_features is now the one place that knows the key shapes, and everything that changes a plan calls it.
  • CPU and Memory sat at "Calculating.." forever. They were fed by a sampler that read what Docker reported. They are measured from the account's own cgroup and processes now, against the plan's allowance — never the machine's totals.
  • The Site Manager was empty for a site that was serving. Only CMS installations were recorded; a document root serving plain files is a website too.
  • ImunifyAV, Git deployment and MSSQL answered 404. Saving Settings → Modules deleted any module missing from the admin's catalogue, because the form posts only the boxes it rendered. It keeps what it could not show now.
  • SSL status read "Unknown" for a domain holding a valid certificate; domain access logs were read from the old Caddy path in the old Caddy format; site previews could not decode what the screenshot API returned, and gave up after five seconds on a job that takes thirty.

Added​

  • Permission groups. A named set of module permissions that an administrator can assign to an account, and an account can hold several. The effective set is the plan's features plus every group held — a plan is the floor, a group grants something extra without needing a new plan.
  • Wildcard certificates. Where this server runs the domain's DNS, a *.<domain> certificate is issued over DNS-01 against a dedicated challenge zone, with no configuration and no third party. Where the DNS is elsewhere, pick a provider and give it credentials.
  • Deploy a website from Git, with the build running as the account, in a staging directory that is only swapped in once it succeeds.
  • Microsoft SQL Server, alongside MySQL and PostgreSQL.
  • ImunifyAV for hosting accounts, scoped to the account's own files.

Security​

  • A hosting account can no longer stop or restart the machine's MariaDB, Postfix or PHP-FPM masters. That is the administrator's, and it is off unless native_service_control=yes says otherwise — right for a single-tenant box, wrong for shared hosting.
  • Two application installers unpacked into the account's own directory as root, which a symlink planted between the check and the write turns into a root write anywhere on the disk. They run as the account now.
  • The per-account usage file was written by root into a directory the account owns and controls; the same class of problem, found by review before it shipped.
  • Saving php.ini reloads PHP at most once every ten seconds per version: a reload applies to every site on that version, so one account could otherwise keep everybody else's PHP restarting.
  • The report listing every account's disk and inode usage is no longer world-readable.