Version 1.52.1

Released: 2017-10-20

User Level Restores moved to background new

Like other backup/restore processes, the User Level -> Site Backup "Restore" option is now moved to run in the background, like all other backup/restore processes.


Triggering the restore through the GUI will push the request to the task.queue, with the following options, based on the checkboxes selected.

password=base64encodeduserpassword      #for DB permissions

for each option# (where # can be any number, usually 0, going up), you'd enter the selected checkbox values, which can be chosen from the following:















Ability to hide "Script Output /path/to/" for custom scripts new

If you have custom scripts in:


on non-zero result, they'll usually display:

Script Output: /usr/local/directadmin/scripts/custom/

before echoing your echo'ed data.

This is typically done to avoid confusion as to what's throwing the error.

But if you're fully aware of it, and are sure you're echoing data on non-zero output, then you should be able to use this.

The internal default is:


so to hide the "Script Output" line, you'd add this to your directadmin.conf, and restart directadmin:


More JSON new

add json=yes to the GET or POST for the regular requests.

Global change:

All "Select Box" type json output used to have:

"selected ": "yes"

if a given value was selected, where a trailing space was added after "selected".

This has been changed to no longer have the trailing space, so a selected selectbox item will now be:

"selected" : "yes"

creator - selectbox

selectcreator - selectbox

data_list - array of creators, with values being list of users below that creator.


admin_settings - array

email_settings - array

security_settings - array

server_settings - array


tokens should match the skin value, so ensure they're all accounted for, even if blank.

Be sure to test for both httpd and nginx, as token names can change.

Applies to both:



other save actions return the standard dynamic output.

The plain list:


returns the json table structure, but a sample row looks like:

            "domain": "",
                "php-fpm1": "5.6",
                "user": "newconfig"

where php-fpm1 (and possibly php-fpm2) will show up, if they're present on the system.

Else, the info array column would only have the user entry (eg: for mod_php)

CLUSTER_ON=ON|OFF - if the feature is enabled or not
port=2222 current DA port, just used for auto-fill for new server form.
servers - array of remote server IPs or hostnames.  If a hostname, it should also include the "ip" it resolves to in the sub-array.

domains - table, searchable/filterable

Then the 4 top level variables:

"have_openbasedir": "1",   - if the system supports openbasedir
"have_safemode": "0", - if the system supports safemode (newer dropped at 5.3)
"open_basedir": "ON", - default setting for newly added domains
"safemode": "OFF" - default value for newly added domain.
crons - table, similar to CMD_CRON_JOBS?json=yes

currently no actions on this page, just viewing.


Various ways a file can be viewed, be sure to test them all.

All cases:

files - array, filename as index, sub-array with size in bytes, text, and optionally "selected ": "yes"

lines = 50 - changes if specific number of lines are set.

  • only json=yes, just the above.

  • raw file - not json output, literally raw, with given settings affecting the output.

  • not raw, other options should be listed:

LOGDATA - contents of the log

GREPVAL - if grep is used, th value entered

ignore_case=0|1 case sensitivity for grep

invert_grep=0|1 negation of grep output.


Note, all of the options from the /usr/local/sysbk/conf.sysbk are shown, but not all are really relevant.

Also, there are if-then-else statements in the conf.sysbk, but DA reads over them, so ignore the case-depenent variables.

See skin for what DA actually uses.


Straight forward display of info, else post for auth or killing processes.

With json, we'll leave the refresh to the skin, so timers, etc are not part of the json out.

Just reload the json as needed when it refreshes.


Be sure to test with all possible combinations of:

  • the presence/absence of,

  • user_brutecount=0 being disabled shows text instead of json table:

"USERLOGINFAILURES": "user_brutecount disabled",

  • fresh install, no logs yet, sets text to table tokens.

The "Clear Message System" table loads in the same tokens as were set in the Message System for the same action.

By default, only the LOGINFAILURES is search/sortable.

However, if you specify the take token in the "show" varilable, eg:


only this table (of the 5) is included, but can then be searched/sorted using standard table variables.

You will still get some other tokens, but they're not resource intensive to build.


returns array of plugins, index being the plugin name,

and value being the array of entries from the plugin.conf.

DA also adds the "available_version" via the URL for you, and uses a cache so it's not doing an external request each query.

conversion scripts to support mail_sni fixed




To check for:


and swap the /usr/local/directadmin/data/users/OLDUSER path to /usr/local/directadmin/data/users/NEWUSER in that conf file.

The will also update the IP files:



to remove the old reseller, swap it with the new reseller, and ensure the new reseller has the IP in the ip.list file.

nginx: fixed

When using nginx or nginx_proxy, when saving a ca root certificate, instead of combining the 2 files:

it was combining:

thus giving:

Prevent Upper-Case first character in login username for iPhone/iPad fixed



to the username text input, so apple products don't set an upper-case first character, which is never needed.

Buffer overrun in User comments fixed

Casting issue where a unsigned negative number is larger than a positive unsigned number caused the "should it grow" check on the buffer to return false.

This caused DA to access memory out of it's allowed bounds, but did not trigger a segfault, but rather an invalid pointer error:

*** Error in `./directadmin': munmap_chunk(): invalid pointer: 0x00007f9fcab48d20 ***

Last Updated: