diff --git a/da_cli.sh b/da_cli.sh old mode 100644 new mode 100755 index d9a8912..3377d9c --- a/da_cli.sh +++ b/da_cli.sh @@ -1,5 +1,5 @@ #!/bin/bash -#version 0.4 +#version 0.7.0 #gedas@mc2.dev ### VARS ### @@ -15,867 +15,1415 @@ TRUSTED_IPS="127.0.0.1,185.242.134.92,185.242.134.93,185.242.134.94,193.177.165. createUser() { - #mandatory options: - USERNAME="$1" - PASSWORD="$2" - DOMAIN="$3" + #mandatory options: + USERNAME="$1" + PASSWORD="$2" + DOMAIN="$3" - if [[ -z "${USERNAME}" ]] || [[ -z "${PASSWORD}" ]] || [[ -z "${DOMAIN}" ]]; then - echo "+---------------------------------------+" - echo "Create a user:" - echo "$0 createuser USERNAME PASSWORD DOMAIN " - echo " are optional" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]] || [[ -z "${PASSWORD}" ]] || [[ -z "${DOMAIN}" ]]; then + echo "+---------------------------------------+" + echo "Create a user:" + echo "$0 createuser USERNAME PASSWORD DOMAIN " + echo " are optional" + echo "+---------------------------------------+" + exit 1 + fi - #optional - PACKAGE="$4" - EMAIL="$5" - #default values if not set - [[ -z "${PACKAGE}" ]] && PACKAGE="${DEFAULTPACKAGE}" - [[ -z "${EMAIL}" ]] && EMAIL="admin@`hostname -f`" + #optional + PACKAGE="$4" + EMAIL="$5" + #default values if not set + [[ -z "${PACKAGE}" ]] && PACKAGE="${DEFAULTPACKAGE}" + [[ -z "${EMAIL}" ]] && EMAIL="admin@$(hostname -f)" - #json template: - CREATE_USER_JSON=$(cat << EOF -{ - "username": "${USERNAME}", - "email": "${EMAIL}", - "passwd": "${PASSWORD}", - "passwd2": "${PASSWORD}", - "domain": "${DOMAIN}", - "package": "${PACKAGE}", - "ip": "server", - "notify": "no", - "json": "yes", - "add": "yes", - "action": "create" + #json template: + CREATE_USER_JSON=$(cat <<- EOF + { + "username": "${USERNAME}", + "email": "${EMAIL}", + "passwd": "${PASSWORD}", + "passwd2": "${PASSWORD}", + "domain": "${DOMAIN}", + "package": "${PACKAGE}", + "ip": "server", + "notify": "no", + "json": "yes", + "add": "yes", + "action": "create" + } + EOF + ) + #create user + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${ADMINUSER}")/CMD_ACCOUNT_USER?json=yes" --request "POST" --data "${CREATE_USER_JSON}" } -EOF -) - #create user - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${ADMINUSER})/CMD_ACCOUNT_USER?json=yes" --request "POST" --data "${CREATE_USER_JSON}" -} deleteUser() { - USERNAME="$1" + USERNAME="$1" - if [[ -z "${USERNAME}" ]]; then - echo "+---------------------------------------+" - echo "Delete a user:" - echo "$0 deleteuser USERNAME" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]]; then + echo "+---------------------------------------+" + echo "Delete a user:" + echo "$0 deleteuser USERNAME" + echo "+---------------------------------------+" + exit 1 + fi - DELETE_USER_JSON=$(cat << EOF -{ - "leave_dns": "no", - "json": "yes", - "location": "CMD_ALL_USER_SHOW", - "delete": "yes", - "confirmed": "yes", - "select0": "${USERNAME}" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${ADMINUSER})/CMD_SELECT_USERS?json=yes" --request "POST" --data "${DELETE_USER_JSON}" + DELETE_USER_JSON=$(cat <<- EOF + { + "leave_dns": "no", + "json": "yes", + "location": "CMD_ALL_USER_SHOW", + "delete": "yes", + "confirmed": "yes", + "select0": "${USERNAME}" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${ADMINUSER}")/CMD_SELECT_USERS?json=yes" --request "POST" --data "${DELETE_USER_JSON}" } createDB() { - DBNAME="$1" - DBUSERNAME="$2" - DBPASSWORD="$3" + DBNAME="$1" + DBUSERNAME="$2" + DBPASSWORD="$3" - if [[ -z "${DBNAME}" ]] || [[ -z "${DBUSERNAME}" ]] || [[ -z "${DBPASSWORD}" ]]; then - echo "+---------------------------------------+" - echo "Create a database:" - echo "$0 createdb DBNAME DBUSERNAME DBPASSWORD" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DBNAME}" ]] || [[ -z "${DBUSERNAME}" ]] || [[ -z "${DBPASSWORD}" ]]; then + echo "+---------------------------------------+" + echo "Create a database:" + echo "$0 createdb DBNAME DBUSERNAME DBPASSWORD" + echo "+---------------------------------------+" + exit 1 + fi - USERNAME=$(echo ${DBNAME} | cut -f1 -d_) - DBNAME=$(echo ${DBNAME} | cut -f2 -d_) - DBUSERNAME=$(echo ${DBUSERNAME} | cut -f2 -d_) + USERNAME=$(echo "${DBNAME}" | cut -f1 -d_) + DBNAME=$(echo "${DBNAME}" | cut -f2 -d_) + DBUSERNAME=$(echo "${DBUSERNAME}" | cut -f2 -d_) - CREATE_DB_JSON=$(cat << EOF -{ - "name": "${DBNAME}", - "user": "${DBUSERNAME}", - "passwd": "${DBPASSWORD}", - "passwd2": "${DBPASSWORD}", - "userlist": "...", - "json": "yes", - "action": "create" -} -EOF -) + CREATE_DB_JSON=$(cat <<- EOF + { + "name": "${DBNAME}", + "user": "${DBUSERNAME}", + "passwd": "${DBPASSWORD}", + "passwd2": "${DBPASSWORD}", + "userlist": "...", + "json": "yes", + "action": "create" + } + EOF + ) - #create db - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DB?json=yes" --request "POST" --data "${CREATE_DB_JSON}" + #create db + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DB?json=yes" --request "POST" --data "${CREATE_DB_JSON}" } deleteDB() { - DBNAME="$1" + DBNAME="$1" - if [[ -z "${DBNAME}" ]]; then - echo "+---------------------------------------+" - echo "Delete a database:" - echo "$0 deletedb DBNAME" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DBNAME}" ]]; then + echo "+---------------------------------------+" + echo "Delete a database:" + echo "$0 deletedb DBNAME" + echo "+---------------------------------------+" + exit 1 + fi - USERNAME=$(echo ${DBNAME} | cut -f1 -d_) + USERNAME=$(echo "${DBNAME}" | cut -f1 -d_) - DELETE_DB_JSON=$(cat << EOF -{ - "json": "yes", - "action": "select", - "delete_db": "yes", - "select0": "${DBNAME}" -} -EOF -) + DELETE_DB_JSON=$(cat <<- EOF + { + "json": "yes", + "action": "select", + "delete_db": "yes", + "select0": "${DBNAME}" + } + EOF + ) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DB?json=yes" --request "POST" --data "${DELETE_DB_JSON}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DB?json=yes" --request "POST" --data "${DELETE_DB_JSON}" } createForwarder() { - FORWARDER="$1" - DESTINATION="$2" + FORWARDER="$1" + DESTINATION="$2" - if [[ -z "${FORWARDER}" ]] || [[ -z "${DESTINATION}" ]]; then - echo "+---------------------------------------+" - echo "Create a forwarder:" - echo "$0 createforwarder FORWARDER DESTINATION" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${FORWARDER}" ]] || [[ -z "${DESTINATION}" ]]; then + echo "+---------------------------------------+" + echo "Create a forwarder:" + echo "$0 createforwarder FORWARDER DESTINATION" + echo "+---------------------------------------+" + exit 1 + fi - DOMAIN=$(echo ${FORWARDER} | cut -f2 -d@) - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + DOMAIN=$(echo "${FORWARDER}" | cut -f2 -d@) + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - CREATE_FORWARDER_JSON=$(cat << EOF -{ - "json": "yes", - "action": "create", - "raw_forwarders": "${FORWARDER} --> ${DESTINATION}" -} -EOF -) - - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_FORWARDER?json=yes" --request "POST" --data "${CREATE_FORWARDER_JSON}" + CREATE_FORWARDER_JSON=$(cat <<- EOF + { + "json": "yes", + "action": "create", + "raw_forwarders": "${FORWARDER} --> ${DESTINATION}" + } + EOF + ) + + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_FORWARDER?json=yes" --request "POST" --data "${CREATE_FORWARDER_JSON}" } deleteForwarder() { - FORWARDER="$1" + FORWARDER="$1" - if [[ -z "${FORWARDER}" ]]; then - echo "+---------------------------------------+" - echo "Delete a forwarder:" - echo "$0 deleteforwarder FORWARDER" - echo "+---------------------------------------+" - exit 1 - fi - - DOMAIN=$(echo ${FORWARDER} | cut -f2 -d@) - BOX=$(echo ${FORWARDER} | cut -f1 -d@) - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + if [[ -z "${FORWARDER}" ]]; then + echo "+---------------------------------------+" + echo "Delete a forwarder:" + echo "$0 deleteforwarder FORWARDER" + echo "+---------------------------------------+" + exit 1 + fi - DELETE_FORWARDER_JSON=$(cat << EOF -{ - "domain": "${DOMAIN}", - "json": "yes", - "action": "delete", - "delete": "yes", - "select0": "${BOX}" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_FORWARDER?json=yes" --request "POST" --data "${DELETE_FORWARDER_JSON}" + DOMAIN=$(echo "${FORWARDER}" | cut -f2 -d@) + BOX=$(echo "${FORWARDER}" | cut -f1 -d@) + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + + DELETE_FORWARDER_JSON=$(cat <<- EOF + { + "domain": "${DOMAIN}", + "json": "yes", + "action": "delete", + "delete": "yes", + "select0": "${BOX}" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_FORWARDER?json=yes" --request "POST" --data "${DELETE_FORWARDER_JSON}" } createDomain() { - USERNAME="$1" - DOMAIN="$2" + USERNAME="$1" + DOMAIN="$2" - if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]]; then - echo "+---------------------------------------+" - echo "Create a domain for a user:" - echo "$0 createdomain USERNAME DOMAIN" - echo "or" - echo "$0 createdomain USERNAME list=file" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]]; then + echo "+---------------------------------------+" + echo "Create a domain for a user:" + echo "$0 createdomain USERNAME DOMAIN" + echo "or" + echo "$0 createdomain USERNAME list=file" + echo "+---------------------------------------+" + exit 1 + fi - if [[ $(echo ${DOMAIN} | grep -c -E "^list=") -gt 0 ]]; then - DOMFILE=$(echo ${DOMAIN} | cut -f2 -d=) - for DOMAIN in `cat ${DOMFILE}`; do - CREATE_DOMAIN_JSON=$(cat << EOF -{ - "domain": "${DOMAIN}", - "uquota": "unlimited", - "ssl": "ON", - "php": "ON", - "json": "yes", - "action": "create", - "ubandwidth": "unlimited" + if [[ $(echo "${DOMAIN}" | grep -c -E "^list=") -gt 0 ]]; then + DOMFILE=$(echo "${DOMAIN}" | cut -f2 -d=) + for DOMAIN in $(cat "${DOMFILE}"); do + CREATE_DOMAIN_JSON=$(cat <<- EOF + { + "domain": "${DOMAIN}", + "uquota": "unlimited", + "ssl": "ON", + "php": "ON", + "json": "yes", + "action": "create", + "ubandwidth": "unlimited" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DOMAIN?json=yes" --request "POST" --data "${CREATE_DOMAIN_JSON}" + done + else + CREATE_DOMAIN_JSON=$(cat <<- EOF + { + "domain": "${DOMAIN}", + "uquota": "unlimited", + "ssl": "ON", + "php": "ON", + "json": "yes", + "action": "create", + "ubandwidth": "unlimited" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DOMAIN?json=yes" --request "POST" --data "${CREATE_DOMAIN_JSON}" + fi } -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DOMAIN?json=yes" --request "POST" --data "${CREATE_DOMAIN_JSON}" - done - else - CREATE_DOMAIN_JSON=$(cat << EOF -{ - "domain": "${DOMAIN}", - "uquota": "unlimited", - "ssl": "ON", - "php": "ON", - "json": "yes", - "action": "create", - "ubandwidth": "unlimited" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DOMAIN?json=yes" --request "POST" --data "${CREATE_DOMAIN_JSON}" - fi -} - + deleteDomain() { - USERNAME="$1" - DOMAIN="$2" + USERNAME="$1" + DOMAIN="$2" - if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]]; then - echo "+---------------------------------------+" - echo "Delete a domain from a user:" - echo "$0 deletedomain USERNAME DOMAIN" - echo "or" - echo "$0 deletedomain USERNAME list=file" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]]; then + echo "+---------------------------------------+" + echo "Delete a domain from a user:" + echo "$0 deletedomain USERNAME DOMAIN" + echo "or" + echo "$0 deletedomain USERNAME list=file" + echo "+---------------------------------------+" + exit 1 + fi + + if [[ $(echo "${DOMAIN}" | grep -c -E "^list=") -gt 0 ]]; then + DOMFILE=$(echo "${DOMAIN}" | cut -f2 -d=) + for DOMAIN in `cat "${DOMFILE}"`; do + DELETE_DOMAIN_JSON=$(cat <<- EOF + { + "delete_data": "yes", + "json": "yes", + "action": "select", + "delete": "yes", + "confirmed": "yes", + "delete_data_aware": "yes", + "select0": "${DOMAIN}" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DOMAIN?json=yes" --request "POST" --data "${DELETE_DOMAIN_JSON}" + done + else + DELETE_DOMAIN_JSON=$(cat <<- EOF + { + "delete_data": "yes", + "json": "yes", + "action": "select", + "delete": "yes", + "confirmed": "yes", + "delete_data_aware": "yes", + "select0": "${DOMAIN}" + } + EOF + ) + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DOMAIN?json=yes" --request "POST" --data "${DELETE_DOMAIN_JSON}" + fi - if [[ $(echo ${DOMAIN} | grep -c -E "^list=") -gt 0 ]]; then - DOMFILE=$(echo ${DOMAIN} | cut -f2 -d=) - for DOMAIN in `cat ${DOMFILE}`; do - DELETE_DOMAIN_JSON=$(cat << EOF -{ - "delete_data": "yes", - "json": "yes", - "action": "select", - "delete": "yes", - "confirmed": "yes", - "delete_data_aware": "yes", - "select0": "${DOMAIN}" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DOMAIN?json=yes" --request "POST" --data "${DELETE_DOMAIN_JSON}" - done - else - DELETE_DOMAIN_JSON=$(cat << EOF -{ - "delete_data": "yes", - "json": "yes", - "action": "select", - "delete": "yes", - "confirmed": "yes", - "delete_data_aware": "yes", - "select0": "${DOMAIN}" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_DOMAIN?json=yes" --request "POST" --data "${DELETE_DOMAIN_JSON}" - fi - } - + enableSSH() { - USERNAME="$1" + USERNAME="$1" - if [[ -z "${USERNAME}" ]]; then - echo "+---------------------------------------+" - echo "Enable SSH for a user:" - echo "$0 enablessh USERNAME" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]]; then + echo "+---------------------------------------+" + echo "Enable SSH for a user:" + echo "$0 enablessh USERNAME" + echo "+---------------------------------------+" + exit 1 + fi - chsh -s /bin/bash ${USERNAME} - sed -i -e 's/ssh=OFF/ssh=ON/g' /usr/local/directadmin/data/users/${USERNAME}/user.conf + chsh -s /bin/bash "${USERNAME}" + sed -i -e 's/ssh=OFF/ssh=ON/g' /usr/local/directadmin/data/users/"${USERNAME}"/user.conf } - + disableSSH() { - USERNAME="$1" + USERNAME="$1" - if [[ -z "${USERNAME}" ]]; then - echo "+---------------------------------------+" - echo "Disable SSH for a user:" - echo "$0 disablessh USERNAME" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]]; then + echo "+---------------------------------------+" + echo "Disable SSH for a user:" + echo "$0 disablessh USERNAME" + echo "+---------------------------------------+" + exit 1 + fi - chsh -s /bin/false ${USERNAME} - sed -i -e 's/ssh=ON/ssh=OFF/g' /usr/local/directadmin/data/users/${USERNAME}/user.conf + chsh -s /bin/false "${USERNAME}" + sed -i -e 's/ssh=ON/ssh=OFF/g' /usr/local/directadmin/data/users/"${USERNAME}"/user.conf } - + docroot() { - USERNAME="$1" - DOMAIN="$2" - DOCROOT="$3" + USERNAME="$1" + DOMAIN="$2" + DOCROOT="$3" - if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]] || [[ -z "${DOCROOT}" ]]; then - echo "+---------------------------------------+" - echo "Change DOCROOT for a domain:" - echo "$0 docroot USERNAME DOMAIN DOCROOT" - echo "Example $0 docroot john domain.tld domains/domain.tld/public_html" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USERNAME}" ]] || [[ -z "${DOMAIN}" ]] || [[ -z "${DOCROOT}" ]]; then + echo "+---------------------------------------+" + echo "Change DOCROOT for a domain:" + echo "$0 docroot USERNAME DOMAIN DOCROOT" + echo "Example $0 docroot john domain.tld domains/domain.tld/public_html" + echo "+---------------------------------------+" + exit 1 + fi - if [[ $(grep DOCROOT /usr/local/directadmin/data/users/${USERNAME}/domains/${DOMAIN}.cust_httpd -q -c) -gt 0 ]]; then - echo "Custom docroot already exist. Please remove the customisation." - else - echo "|?DOCROOT=/home/${USERNAME}/${DOCROOT}|" >> /usr/local/directadmin/data/users/${USERNAME}/domains/${DOMAIN}.cust_httpd - echo "action=rewrite&value=httpd&domain=${DOMAIN}" >> /usr/local/directadmin/data/task.queue.cb - /usr/local/directadmin/dataskq d --custombuild - fi + if [[ $(grep DOCROOT "/usr/local/directadmin/data/users/${USERNAME}/domains/${DOMAIN}.cust_httpd" -q -c) -gt 0 ]]; then + echo "Custom docroot already exist. Please remove the customisation." + else + echo "|?DOCROOT=/home/${USERNAME}/${DOCROOT}|" >> "/usr/local/directadmin/data/users/${USERNAME}/domains/${DOMAIN}.cust_httpd" + echo "action=rewrite&value=httpd&domain=${DOMAIN}" >> /usr/local/directadmin/data/task.queue.cb + /usr/local/directadmin/dataskq d --custombuild + fi } +createmailbox() { + + DOMAIN="$1" + MBOX="$2" + PASSWORD="$3" + SIZE="$4" + [[ -z "${SIZE}" ]] && SIZE="0" + + local JSON_DATA + JSON_DATA=$(cat <<- EOF + { + "user": "${MBOX}", + "passwd2": "${PASSWORD}", + "passwd": "${PASSWORD}", + "quota": "${SIZE}", + "limit": "200", + "domain": "${DOMAIN}", + "json": "yes", + "action": "create" + } + EOF + ) + + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_POP?json=yes" --request "POST" --data "${JSON_DATA}" +} + createmail() { - DOMAIN="$1" - MBOX="$2" - PASSWORD="$3" - SIZE="$4" - [[ -z "${SIZE}" ]] && SIZE="0" + if [[ -n "$1" ]] && [[ -n "$2" ]] && [[ -n "$3" ]]; then + createmailbox "$1" "$2" "$3" "$4" + elif [[ -n "$1" ]] && [[ -z "$2" ]]; then + echo "Importing mailboxes from file: $1" + if [ ! -f "$1" ]; then + echo "File $1 doesn't exist" + exit 1 + fi + while IFS= read -r line; do + [[ -z "${line}" ]] && continue + echo; echo + mbox=$(echo "${line}" | awk '{print $1}' | cut -f1 -d@) + domain=$(echo "${line}" | awk '{print $1}' | cut -f2 -d@) + echo "Mailbox: ${mbox}@${domain}" + password=$(echo "${line}" | awk '{print $2}') + if [ -z "${password}" ]; then + echo "Missing password for ${mbox}@${domain} - skipping" + continue; + fi + size=$(echo "${line}" | awk '{print $3}') + createmailbox "${domain}" "${mbox}" "${password}" "${size}" + done < "$1" + + else + echo "+---------------------------------------+" + echo "Create a mailbox:" + echo "$0 createmail DOMAIN MBOX PASSWORD " + echo "$0 createmail FILENAME" + echo "+---------------------------------------+" + exit 1 + fi - if [[ -z "${DOMAIN}" ]] || [[ -z "${MBOX}" ]] || [[ -z "${PASSWORD}" ]]; then - echo "+---------------------------------------+" - echo "Create a mailbox:" - echo "$0 createmail DOMAIN MBOX PASSWORD " - echo "+---------------------------------------+" - exit 1 - fi - - CREATE_EMAIL_JSON=$(cat << EOF -{ - "user": "${MBOX}", - "passwd2": "${PASSWORD}", - "passwd": "${PASSWORD}", - "quota": "${SIZE}", - "limit": "200", - "domain": "${DOMAIN}", - "json": "yes", - "action": "create" -} -EOF -) - - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_POP?json=yes" --request "POST" --data "${CREATE_EMAIL_JSON}" } deletemail() { - DOMAIN="$1" - MBOX="$2" + DOMAIN="$1" + MBOX="$2" - if [[ -z "${DOMAIN}" ]] || [[ -z "${MBOX}" ]]; then - echo "+---------------------------------------+" - echo "Delete a mailbox:" - echo "$0 deletemail DOMAIN MBOX" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DOMAIN}" ]] || [[ -z "${MBOX}" ]]; then + echo "+---------------------------------------+" + echo "Delete a mailbox:" + echo "$0 deletemail DOMAIN MBOX" + echo "+---------------------------------------+" + exit 1 + fi - DELETE_EMAIL_JSON=$(cat << EOF -{ - "clean_forwarders": "yes", - "domain": "${DOMAIN}", - "json": "yes", - "action": "delete", - "delete": "yes", - "select0": "${MBOX}" + DELETE_EMAIL_JSON=$(cat <<- EOF + { + "clean_forwarders": "yes", + "domain": "${DOMAIN}", + "json": "yes", + "action": "delete", + "delete": "yes", + "select0": "${MBOX}" + } + EOF + ) + + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_POP?json=yes" --request "POST" --data "${DELETE_EMAIL_JSON}" } -EOF -) - - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_POP?json=yes" --request "POST" --data "${DELETE_EMAIL_JSON}" -} - enabledkim() { - DOMAIN="$1" + DOMAIN="$1" - if [[ -z "${DOMAIN}" ]]; then - echo "+---------------------------------------+" - echo "Enable DKIM for a domain:" - echo "$0 enabledkim DOMAIN" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DOMAIN}" ]]; then + echo "+---------------------------------------+" + echo "Enable DKIM for a domain:" + echo "$0 enabledkim DOMAIN" + echo "+---------------------------------------+" + exit 1 + fi - ENABLE_DKIM_JSON=$(cat << EOF -{ - "action": "set_dkim", - "domain": "${DOMAIN}", - "json": "yes", - "enable": "yes" -} -EOF -) + ENABLE_DKIM_JSON=$(cat <<- EOF + { + "action": "set_dkim", + "domain": "${DOMAIN}", + "json": "yes", + "enable": "yes" + } + EOF + ) - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_POP?json=yes" --request "POST" --data "${ENABLE_DKIM_JSON}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_POP?json=yes" --request "POST" --data "${ENABLE_DKIM_JSON}" } disabledkim() { - DOMAIN="$1" + DOMAIN="$1" - if [[ -z "${DOMAIN}" ]]; then - echo "+---------------------------------------+" - echo "Enable DKIM for a domain:" - echo "$0 enabledkim DOMAIN" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DOMAIN}" ]]; then + echo "+---------------------------------------+" + echo "Enable DKIM for a domain:" + echo "$0 enabledkim DOMAIN" + echo "+---------------------------------------+" + exit 1 + fi - DISABLE_DKIM_JSON=$(cat << EOF -{ - "action": "set_dkim", - "domain": "${DOMAIN}", - "json": "yes", - "disable": "yes" + DISABLE_DKIM_JSON=$(cat <<- EOF + { + "action": "set_dkim", + "domain": "${DOMAIN}", + "json": "yes", + "disable": "yes" + } + EOF + ) + + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_POP?json=yes" --request "POST" --data "${DISABLE_DKIM_JSON}" } -EOF -) - - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_POP?json=yes" --request "POST" --data "${DISABLE_DKIM_JSON}" -} - - - changemailpass() { - DOMAIN="$1" - MBOX="$2" - PASSWORD="$3" + DOMAIN="$1" + MBOX="$2" + PASSWORD="$3" - if [[ -z "${DOMAIN}" ]] || [[ -z "${MBOX}" ]] || [[ -z "${PASSWORD}" ]]; then - echo "+---------------------------------------+" - echo "Change mailbox password:" - echo "$0 changemailpass DOMAIN MBOX PASSWORD" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${DOMAIN}" ]] || [[ -z "${MBOX}" ]] || [[ -z "${PASSWORD}" ]]; then + echo "+---------------------------------------+" + echo "Change mailbox password:" + echo "$0 changemailpass DOMAIN MBOX PASSWORD" + echo "+---------------------------------------+" + exit 1 + fi - CHANGE_EMAIL_PASS_JSON=$(cat << EOF -{ - "user": "${MBOX}", - "newuser": "${MBOX}", - "passwd2": "${PASSWORD}", - "passwd": "${PASSWORD}", - "quota": "50", - "limit": "200", - "domain": "${DOMAIN}", - "json": "yes", - "action": "modify" -} -EOF -) + CHANGE_EMAIL_PASS_JSON=$(cat <<- EOF + { + "user": "${MBOX}", + "newuser": "${MBOX}", + "passwd2": "${PASSWORD}", + "passwd": "${PASSWORD}", + "quota": "50", + "limit": "200", + "domain": "${DOMAIN}", + "json": "yes", + "action": "modify" + } + EOF + ) - USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + USERNAME=$(grep -E "^${DOMAIN}:" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${USERNAME})/CMD_EMAIL_POP?json=yes" --request "POST" --data "${CHANGE_EMAIL_PASS_JSON}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_EMAIL_POP?json=yes" --request "POST" --data "${CHANGE_EMAIL_PASS_JSON}" } changeuserpass() { - USER="$1" - PASSWORD="$2" + USER="$1" + PASSWORD="$2" - if [[ -z "${USER}" ]] || [[ -z "${PASSWORD}" ]]; then - echo "+---------------------------------------+" - echo "Change mailbox password:" - echo "$0 changeuserpass LOGIN PASSWORD" - echo "+---------------------------------------+" - exit 1 - fi + if [[ -z "${USER}" ]] || [[ -z "${PASSWORD}" ]]; then + echo "+---------------------------------------+" + echo "Change mailbox password:" + echo "$0 changeuserpass LOGIN PASSWORD" + echo "+---------------------------------------+" + exit 1 + fi - CHANGE_USER_PASS_JSON=$(cat << EOF -{ - "username": "${USER}", - "passwd": "${PASSWORD}", - "json": "yes", - "action": "create", - "referer": "CMD_API_USER_PASSWD", - "passwd2": "${PASSWORD}" -} -EOF -) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${ADMINUSER})/CMD_USER_PASSWD?json=yes" --request "POST" --data "${CHANGE_USER_PASS_JSON}" + CHANGE_USER_PASS_JSON=$(cat <<- EOF + { + "username": "${USER}", + "passwd": "${PASSWORD}", + "json": "yes", + "action": "create", + "referer": "CMD_API_USER_PASSWD", + "passwd2": "${PASSWORD}" + } + EOF + ) + + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${ADMINUSER}")/CMD_USER_PASSWD?json=yes" --request "POST" --data "${CHANGE_USER_PASS_JSON}" } disablenamed() { - sed -i -e 's/named=ON/named=OFF/g' /usr/local/directadmin/data/admin/services.status - systemctl stop named - systemctl disable named + sed -i -e 's/named=ON/named=OFF/g' /usr/local/directadmin/data/admin/services.status + systemctl stop named + systemctl disable named - NAMED_PLACEBO=$(cat << EOF -[Unit] -Description=Named Placebo -After=syslog.target network.target -Requires=network.target -Documentation=http://help.directadmin.com/item.php?id=25 + NAMED_PLACEBO=$(cat <<- EOF + [Unit] + Description=Named Placebo + After=syslog.target network.target + Requires=network.target + Documentation=http://help.directadmin.com/item.php?id=25 -[Service] -Type=oneshot -ExecStart=/usr/bin/echo -n '' -EOF -) + [Service] + Type=oneshot + ExecStart=/usr/bin/echo -n '' + EOF + ) - [[ -f '/etc/systemd/system/named.service' ]] && echo "${NAMED_PLACEBO}" > /etc/systemd/system/named.service - [[ -f '/usr/lib/systemd/system/named.service' ]] && echo "${NAMED_PLACEBO}" > /usr/lib/systemd/system/named.service + [[ -f '/etc/systemd/system/named.service' ]] && echo "${NAMED_PLACEBO}" > /etc/systemd/system/named.service + [[ -f '/usr/lib/systemd/system/named.service' ]] && echo "${NAMED_PLACEBO}" > /usr/lib/systemd/system/named.service - systemctl daemon-reload + systemctl daemon-reload } enablenamed() { - [[ `grep 'Placebo' -q /etc/systemd/system/named.service` ]] && rm -fv /etc/systemd/system/named.service - [[ `grep 'Placebo' -q /usr/lib/systemd/system/named.service` ]] && rm -fv /usr/lib/systemd/system/named.service + [[ $(grep -q 'Placebo' /etc/systemd/system/named.service) ]] && rm -fv /etc/systemd/system/named.service + [[ $(grep -q 'Placebo' /usr/lib/systemd/system/named.service) ]] && rm -fv /usr/lib/systemd/system/named.service - cd /usr/local/directadmin/custombuild - ./build update - ./build bind + cd /usr/local/directadmin/custombuild || exit 1 + ./build update + ./build bind } sethostname() { - /usr/local/directadmin/scripts/hostname.sh "$1" + /usr/local/directadmin/scripts/hostname.sh "$1" } multiserver() { - #Is used to create admin account locally + create the same account on the DNSSLAVE server using SSH. - #Then client to the CLIENTHOSTNAME and use that for multiserver setup. + #Is used to create admin account locally + create the same account on the DNSSLAVE server using SSH. + #Then client to the CLIENTHOSTNAME and use that for multiserver setup. - CLIENTHOSTNAME="$1" - CLIENTNAME="$2" + CLIENTNAME="$2" - if [[ -z "${CLIENTHOSTNAME}" ]] || [[ -z "${CLIENTNAME}" ]]; then - echo "+---------------------------------------+" - echo "Push multiserver settings to CLIENTHOSTNAME:" - echo "$0 multiserver CLIENTHOSTNAME CLIENTNAME" - echo "+---------------------------------------+" - exit 1 - fi + if [[ $(echo "$1" | grep ':' -c) -eq 1 ]]; then + CLIENTHOSTPORT=$(echo "$1" | cut -f2 -d:) + CLIENTHOSTNAME=$(echo "$1" | cut -f1 -d:) + else + CLIENTHOSTNAME="$1" + CLIENTHOSTPORT="22" + fi + + if [[ -z "${CLIENTHOSTNAME}" ]] || [[ -z "${CLIENTNAME}" ]]; then + echo "+---------------------------------------+" + echo "Push multiserver settings to CLIENTHOSTNAME:" + echo "$0 multiserver CLIENTHOSTNAME CLIENTNAME" + echo "+---------------------------------------+" + exit 1 + fi - GLOBALKEYDIR="/usr/local/directadmin/data/users/admin/login_keys" - KEYDIR="${GLOBALKEYDIR}/dns${CLIENTNAME}" - PASSWD=`openssl rand -base64 20` - HASH=`echo -n "${PASSWD}" | openssl passwd -6 -stdin` + GLOBALKEYDIR="/usr/local/directadmin/data/users/admin/login_keys" + KEYDIR="${GLOBALKEYDIR}/dns${CLIENTNAME}" + PASSWD=`openssl rand -base64 20` + HASH=`printf "%s\n%s\n" "$PASSWD" "$PASSWD" | doveadm pw -s SHA512-CRYPT | grep -o '$6$.*'` ## precheck connectivity - if [[ `whoami` == root ]]; then - if [[ `ssh -lroot ${CLIENTHOSTNAME} 'whoami'` == "root" ]]; then - if [[ `ssh -lroot ${DNSSLAVE} 'whoami'` == "root" ]]; then - echo "Access looks good" - else - echo "Error: We need root access to the ${DNSSLAVE}" - exit 1 - fi - else - echo "Error: We need root access to the ${CLIENTHOSTNAME}" - exit 1 - fi - else - echo "Error: Script must be executed as root" - exit 1 - fi + if [[ `whoami` == root ]]; then + if [[ `ssh -lroot ${CLIENTHOSTNAME} -p ${CLIENTHOSTPORT} 'whoami'` == "root" ]]; then + if [[ `ssh -lroot ${DNSSLAVE} -p ${DNSSLAVEPORT} 'whoami'` == "root" ]]; then + echo "Access looks good" + else + echo "Error: We need root access to the ${DNSSLAVE}" + exit 1 + fi + else + echo "Error: We need root access to the ${CLIENTHOSTNAME}" + exit 1 + fi + else + echo "Error: Script must be executed as root" + exit 1 + fi ## local DNS key creation - echo "Creating local keys 'dns${CLIENTNAME}'" - mkdir -p ${KEYDIR} + echo "Creating local keys 'dns${CLIENTNAME}'" + mkdir -p "${KEYDIR}" - cat << EOF > ${KEYDIR}/key.conf -allow_htm=no -clear_key=no -created_by=127.0.0.1 -date_created=$(date +%s) -expiry=0 -key=${HASH} -max_uses=0 -uses=0 -EOF + cat <<- EOF > "${KEYDIR}/key.conf" + allow_htm=no + clear_key=no + created_by=127.0.0.1 + date_created=$(date +%s) + expiry=0 + key=${HASH} + max_uses=0 + uses=0 + EOF - cat << EOF > ${KEYDIR}/commands.allow -CMD_API_DNS_ADMIN -CMD_API_LOGIN_TEST -EOF + cat <<- EOF > "${KEYDIR}/commands.allow" + CMD_API_DNS_ADMIN + CMD_API_LOGIN_TEST + EOF - chown -R diradmin:diradmin ${KEYDIR} - chmod 700 ${KEYDIR} - chmod 600 ${KEYDIR}/key.conf ${KEYDIR}/commands.allow + chown -R diradmin:diradmin "${KEYDIR}" + chmod 700 "${KEYDIR}" + chmod 600 "${KEYDIR}/key.conf" "${KEYDIR}/commands.allow" - ## Remote DNS rsync keys to DNSSLAVE. - echo "Syncing keys to ${DNSSLAVE}" - rsync ${KEYDIR}/ root@${DNSSLAVE}:${KEYDIR}/ -e "ssh -p ${DNSSLAVEPORT}" -a --delete + ## Remote DNS rsync keys to DNSSLAVE. + echo "Syncing keys to ${DNSSLAVE}" + rsync ${KEYDIR}/ root@${DNSSLAVE}:${KEYDIR}/ -e "ssh -p ${DNSSLAVEPORT}" -a --delete - ### Push settings to the client server. - echo "Enabling multiserver on the ${CLIENTHOSTNAME}" - BASE64PW=`echo -n ${PASSWD} | base64` - SSHREMOTE="ssh -lroot ${CLIENTHOSTNAME} --" - CLUSTERCONF="/usr/local/directadmin/data/admin/cluster.conf" + ### Push settings to the client server. + echo "Enabling multiserver on the ${CLIENTHOSTNAME}:${CLIENTHOSTPORT}" + BASE64PW=$(echo -n "${PASSWD}" | base64) + SSHREMOTE="ssh -lroot ${CLIENTHOSTNAME} -p${CLIENTHOSTPORT} --" + CLUSTERCONF="/usr/local/directadmin/data/admin/cluster.conf" - ${SSHREMOTE} "/usr/local/directadmin/directadmin set cluster 1" - ${SSHREMOTE} "systemctl restart directadmin" - ${SSHREMOTE} "sed -i -e '/^${DNSMASTER}=/d' ${CLUSTERCONF}" - ${SSHREMOTE} "sed -i -e '/^${DNSSLAVE}=/d' ${CLUSTERCONF}" - ${SSHREMOTE} "echo '${DNSMASTER}=dns=yes&domain_check=yes&email=no&passwd=${BASE64PW}&port=2222&show_all_users=no&ssl=yes&user=admin&user_check=no&user_sync=no' >> ${CLUSTERCONF}" - ${SSHREMOTE} "echo '${DNSSLAVE}=dns=yes&domain_check=yes&email=no&passwd=${BASE64PW}&port=2222&show_all_users=no&ssl=yes&user=admin&user_check=no&user_sync=no' >> ${CLUSTERCONF}" - ${SSHREMOTE} "echo 'action=rewrite&value=named' >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq d" + ${SSHREMOTE} "/usr/local/directadmin/directadmin set cluster 1" + ${SSHREMOTE} "systemctl restart directadmin" + ${SSHREMOTE} "touch ${CLUSTERCONF}" + ${SSHREMOTE} "chown diradmin:diradmin ${CLUSTERCONF}" + ${SSHREMOTE} "chmod 600 ${CLUSTERCONF}" + ${SSHREMOTE} "sed -i -e '/^${DNSMASTER}=/d' ${CLUSTERCONF}" + ${SSHREMOTE} "sed -i -e '/^${DNSSLAVE}=/d' ${CLUSTERCONF}" + ${SSHREMOTE} "echo '${DNSMASTER}=dns=yes&domain_check=yes&email=no&passwd=${BASE64PW}&port=2222&show_all_users=no&ssl=${CLUSTERSSL}&user=admin&user_check=no&user_sync=no' >> ${CLUSTERCONF}" + ${SSHREMOTE} "echo '${DNSSLAVE}=dns=yes&domain_check=yes&email=no&passwd=${BASE64PW}&port=2222&show_all_users=no&ssl=${CLUSTERSSL}&user=admin&user_check=no&user_sync=no' >> ${CLUSTERCONF}" + ${SSHREMOTE} "echo 'action=rewrite&value=named' >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq d" } enablemultiserver() { - ENABLE_MULTISERVER_JSON=$(cat << EOF -{ - "json": "yes", - "action": "onoff", - "on": "yes" -} -EOF -) + ENABLE_MULTISERVER_JSON=$(cat <<- EOF + { + "json": "yes", + "action": "onoff", + "on": "yes" + } + EOF + ) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${ADMINUSER})/CMD_MULTI_SERVER?json=yes" --request "POST" --data "${ENABLE_MULTISERVER_JSON}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${ADMINUSER}")/CMD_MULTI_SERVER?json=yes" --request "POST" --data "${ENABLE_MULTISERVER_JSON}" } disablemultiserver() { - DISABLE_MULTISERVER_JSON=$(cat << EOF -{ - "json": "yes", - "action": "onoff", - "off": "yes" -} -EOF -) + DISABLE_MULTISERVER_JSON=$(cat <<- EOF + { + "json": "yes", + "action": "onoff", + "off": "yes" + } + EOF + ) - curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for=${ADMINUSER})/CMD_MULTI_SERVER?json=yes" --request "POST" --data "${DISABLE_MULTISERVER_JSON}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${ADMINUSER}")/CMD_MULTI_SERVER?json=yes" --request "POST" --data "${DISABLE_MULTISERVER_JSON}" } enablemultiserverpage() { - ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" - - if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEMULTISERVER#########' "${ALL_PRE}"` ]]; then - perl -i -0pe 's/###########DISABLEMULTISERVER.*DISABLEMULTISERVEREND#########//gs' "${ALL_PRE}" - echo "Multiserver page has been enabled" - else - echo "Multiserver page is not disabled. Not doing anything" - fi + ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" + + if [[ -f "${ALL_PRE}" ]] && [[ $(grep -m1 '###########DISABLEMULTISERVER#########' "${ALL_PRE}") ]]; then + perl -i -0pe 's/###########DISABLEMULTISERVER.*DISABLEMULTISERVEREND#########//gs' "${ALL_PRE}" + echo "Multiserver page has been enabled" + else + echo "Multiserver page is not disabled. Not doing anything" + fi } disablemultiserverpage() { - ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" - ALLOW_LIST="/usr/local/directadmin/scripts/custom/admin_allow.list" + ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" + ALLOW_LIST="/usr/local/directadmin/scripts/custom/admin_allow.list" - if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEMULTISERVER#########' "${ALL_PRE}"` ]]; then - echo "Seems like multiserver page is already disabled" - exit 0 - fi - echo "Creating admin whitelist IP file." - echo "${TRUSTED_IPS}" | sed -e "s/,/\n/g" > "${ALLOW_LIST}" + if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEMULTISERVER#########' "${ALL_PRE}"` ]]; then + echo "Seems like multiserver page is already disabled" + exit 0 + fi + echo "Creating admin whitelist IP file." + echo "${TRUSTED_IPS}" | sed -e "s/,/\n/g" > "${ALLOW_LIST}" - DISABLE_ADMIN=$(cat << EOF -#!/bin/sh -###########DISABLEMULTISERVER######### -if [ "\$command" = "/CMD_API_MULTI_SERVER" ]; then - if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then - exit 0; - fi - echo "You cannot use multiserver"; - exit 1; -fi -if [ "\$command" = "/CMD_MULTI_SERVER" ]; then - if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then - exit 0; - fi - echo "You cannot use multiserver"; - exit 1; -fi -###########DISABLEMULTISERVEREND######### -EOF -) - echo "Adding disable script" - echo "${DISABLE_ADMIN}" > "${ALL_PRE}.tmp" - chown diradmin:diradmin "${ALL_PRE}.tmp" "${ALLOW_LIST}" - chmod 700 "${ALL_PRE}.tmp" "${ALLOW_LIST}" - if [[ -f "${ALL_PRE}" ]]; then - tail -n+2 "${ALL_PRE}" >> "${ALL_PRE}.tmp" - fi - mv -f "${ALL_PRE}.tmp" "${ALL_PRE}" - echo "Done" + DISABLE_ADMIN=$(cat <<- EOF + #!/bin/sh + ###########DISABLEMULTISERVER######### + if [ "\$command" = "/CMD_API_MULTI_SERVER" ]; then + if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then + exit 0; + fi + echo "You cannot use multiserver"; + exit 1; + fi + if [ "\$command" = "/CMD_MULTI_SERVER" ]; then + if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then + exit 0; + fi + echo "You cannot use multiserver"; + exit 1; + fi + ###########DISABLEMULTISERVEREND######### + EOF + ) + echo "Adding disable script" + echo "${DISABLE_ADMIN}" > "${ALL_PRE}.tmp" + chown diradmin:diradmin "${ALL_PRE}.tmp" "${ALLOW_LIST}" + chmod 700 "${ALL_PRE}.tmp" "${ALLOW_LIST}" + if [[ -f "${ALL_PRE}" ]]; then + tail -n+2 "${ALL_PRE}" >> "${ALL_PRE}.tmp" + fi + mv -f "${ALL_PRE}.tmp" "${ALL_PRE}" + echo "Done" } enablecreateadmin() { - ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" - - if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEADMIN#########' "${ALL_PRE}"` ]]; then - perl -i -0pe 's/###########DISABLEADMIN.*DISABLEADMINEND#########//gs' "${ALL_PRE}" - echo "Admin creation has been enabled" - else - echo "Admin creation is not disabled. Not doing anything" - fi + ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" + + if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEADMIN#########' "${ALL_PRE}"` ]]; then + perl -i -0pe 's/###########DISABLEADMIN.*DISABLEADMINEND#########//gs' "${ALL_PRE}" + echo "Admin creation has been enabled" + else + echo "Admin creation is not disabled. Not doing anything" + fi } disablecreateadmin() { - ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" - ALLOW_LIST="/usr/local/directadmin/scripts/custom/admin_allow.list" + ALL_PRE="/usr/local/directadmin/scripts/custom/all_pre.sh" + ALLOW_LIST="/usr/local/directadmin/scripts/custom/admin_allow.list" - if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEADMIN#########' "${ALL_PRE}"` ]]; then - echo "Seems like admin creation is already disabled" - exit 0 - fi - echo "Creating admin whitelist IP file." - echo "${TRUSTED_IPS}" | sed -e "s/,/\n/g" > "${ALLOW_LIST}" + if [[ -f "${ALL_PRE}" ]] && [[ `grep -m1 '###########DISABLEADMIN#########' "${ALL_PRE}"` ]]; then + echo "Seems like admin creation is already disabled" + exit 0 + fi + echo "Creating admin whitelist IP file." + echo "${TRUSTED_IPS}" | sed -e "s/,/\n/g" > "${ALLOW_LIST}" - DISABLE_ADMIN=$(cat << EOF -#!/bin/sh -###########DISABLEADMIN######### -if [ "\$command" = "/CMD_API_ACCOUNT_ADMIN" ]; then - if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then - exit 0; - fi - echo "You cannot create admin"; - exit 1; -fi -if [ "\$command" = "/CMD_ACCOUNT_ADMIN" ]; then - if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then - exit 0; - fi - echo "You cannot create admin"; - exit 1; -fi -###########DISABLEADMINEND######### -EOF -) - echo "Adding disable script" - echo "${DISABLE_ADMIN}" > "${ALL_PRE}.tmp" - chown diradmin:diradmin "${ALL_PRE}.tmp" "${ALLOW_LIST}" - chmod 700 "${ALL_PRE}.tmp" "${ALLOW_LIST}" - if [[ -f "${ALL_PRE}" ]]; then - tail -n+2 "${ALL_PRE}" >> "${ALL_PRE}.tmp" - fi - mv -f "${ALL_PRE}.tmp" "${ALL_PRE}" - echo "Done" + DISABLE_ADMIN=$(cat <<- EOF + #!/bin/sh + ###########DISABLEADMIN######### + if [ "\$command" = "/CMD_API_ACCOUNT_ADMIN" ]; then + if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then + exit 0; + fi + echo "You cannot create admin"; + exit 1; + fi + if [ "\$command" = "/CMD_ACCOUNT_ADMIN" ]; then + if grep -m1 -q "^\$caller_ip$" "${ALLOW_LIST}"; then + exit 0; + fi + echo "You cannot create admin"; + exit 1; + fi + ###########DISABLEADMINEND######### + EOF + ) + echo "Adding disable script" + echo "${DISABLE_ADMIN}" > "${ALL_PRE}.tmp" + chown diradmin:diradmin "${ALL_PRE}.tmp" "${ALLOW_LIST}" + chmod 700 "${ALL_PRE}.tmp" "${ALLOW_LIST}" + if [[ -f "${ALL_PRE}" ]]; then + tail -n+2 "${ALL_PRE}" >> "${ALL_PRE}.tmp" + fi + mv -f "${ALL_PRE}.tmp" "${ALL_PRE}" + echo "Done" } +phpCommands () { + if [[ "$1" == "list" ]]; then + phpList 0 "$2" + elif [[ "$1" == "set" ]]; then + phpSet "$2" "$3" + elif [[ "$1" == "export" ]]; then + phpExport "$2" "$3" + elif [[ "$1" == "import" ]]; then + phpImport "$2" + else + echo "Wrong options!" + exit 1 + fi +} + +phpList () { + CBOPTIONS="/usr/local/directadmin/custombuild/options.conf" + USERSDATA="/usr/local/directadmin/data/users" + EXPORT=$1 + + OSRELEASE="/etc/os-release" + if [[ -f "${OSRELEASE}" ]]; then + OSNAME=$(grep -E "^NAME=" "${OSRELEASE}" | cut -f2 -d= | tr -cd '[:alnum:]') + if [[ ${OSNAME} == "CloudLinux" ]]; then + if [[ ${EXPORT} -eq 0 ]]; then + echo "Cloudlinux detected" + fi + if [[ $(/usr/sbin/cagefsctl --cagefs-status 2> /dev/null) == "Enabled" ]]; then + CL=1 + else + if [[ ${EXPORT} -eq 0 ]]; then + echo "But cagefs is disabled. CL selector is not acitve" + fi + CL=0 + fi + fi + fi + + PHP1=$(grep -e "^php1_release=" "${CBOPTIONS}" | cut -f2 -d=) + PHP2=$(grep -e "^php2_release=" "${CBOPTIONS}" | cut -f2 -d=) + PHP3=$(grep -e "^php3_release=" "${CBOPTIONS}" | cut -f2 -d=) + PHP4=$(grep -e "^php4_release=" "${CBOPTIONS}" | cut -f2 -d=) + + if [[ ${EXPORT} -eq 0 ]]; then + printf "%-16s %-30s\t%s\n" "USER" "DOMAIN" "PHP" + echo --- + fi + if [[ -n "$2" ]]; then + USERSLIST="$2" + if [[ $(grep -c -E ": ${USERSLIST}$" /etc/virtual/domainowners) -eq 0 ]]; then + echo "User \"${USERSLIST}\" not found" >&2 + exit 1 + fi + else + USERSLIST=$(ls "${USERSDATA}" | sort -n) + fi + for USER in ${USERSLIST}; do + for DOMAIN in `cat ${USERSDATA}/${USER}/domains.list`; do + PHPVER=`grep -E "^php1_select=" ${USERSDATA}/${USER}/domains/${DOMAIN}.conf | cut -f2 -d=` + if [[ ${PHPVER} -eq 4 ]]; then + PHPSELECTED=${PHP4} + elif [[ ${PHPVER} -eq 3 ]]; then + PHPSELECTED=${PHP3} + elif [[ ${PHPVER} -eq 2 ]]; then + PHPSELECTED=${PHP2} + fi + if [[ -z ${PHPVER} ]] || [[ ${PHPVER} -eq 1 ]] || [[ ${PHPSELECTED} == "no" ]]; then + PHPSELECTED=${PHP1} + if [[ ${CL} -eq 1 ]]; then + CLVER=`/usr/bin/selectorctl -u ${USER} -c 2> /dev/null | cut -f1` + if [[ "${CLVER}" == "native" ]]; then + PHPSELECTED="${PHPSELECTED} (native)" + elif [[ -z "${CLVER}" ]]; then + PHPSELECTED="${PHPSELECTED} (not_in_cagefs)" + else + PHPSELECTED="${CLVER} (CL_selected)" + fi + fi + fi + if [[ ${EXPORT} -eq 1 ]]; then + PHP=`echo -e ${PHPSELECTED} | awk '{print $1}'` + printf "%s=%s\n" ${DOMAIN} ${PHP} + else + printf "%-16s %-30s\t%s %s\n" ${USER} ${DOMAIN} ${PHPSELECTED} + fi + done + done +} + +phpSet () { + + if [[ -z $1 ]] || [[ -z $2 ]]; then + echo "Wrong ooptions" + echo "Example: da_cli.sh php set DOMAIN.TLD 7.2" + echo " da_cli.sh php set USERNAME 7.2" + exit 1 + fi + + USERNAME=$(grep -E "^$1: " -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + if [[ -z ${USERNAME} ]]; then + USERNAME=$(grep -E ": $1$" -m1 /etc/virtual/domainowners | cut -f2 -d: | xargs) + if [[ -z ${USERNAME} ]]; then + echo "User/domain not found" + exit 1 + fi + DOMAINLIST=$(grep -E ": ${USERNAME}$" /etc/virtual/domainowners | cut -f1 -d: | xargs) + else + DOMAINLIST=$1 + fi + + PHPSELECTED="$2" + CBOPTIONS="/usr/local/directadmin/custombuild/options.conf" + + if [[ -z ${USERNAME} ]]; then + echo "Domain was not found" + exit 1 + fi + + PHPVER=$(grep -e "^php._release=${PHPSELECTED}$" "${CBOPTIONS}" | sed -e 's/php\(.\)_release=.*/\1/g') + + for DOMAIN in ${DOMAINLIST}; do + if [[ -z ${PHPVER} ]]; then + printf "\nDOMAIN: %s - PHP version \"%s\" does not exist. Available versions: " "${DOMAIN}" "${PHPSELECTED}" + grep -e "^php._release=" ${CBOPTIONS} | xargs + break + fi + PHPSELECT_JSON=$(cat <<- EOF + { + "php1_select": "${PHPVER}", + "domain": "${DOMAIN}", + "json": "yes", + "action": "php_selector", + "save": "yes" + } + EOF + ) + printf "\nDOMAIN: %s " "${DOMAIN}" + curl -k -X -u "$(/usr/local/directadmin/directadmin --root-auth-url-for="${USERNAME}")/CMD_DOMAIN?json=yes" --request "POST" --data "${PHPSELECT_JSON}" + done +} + +phpExport() { + USERNAME="$2" + FILENAME="$1" + EXPORT=1 + phpList "${EXPORT}" "${USERNAME}" > "${FILENAME}" + echo "Export to \"${FILENAME}\" done" +} + +phpImport() { + FILENAME=$1 + if [[ -f ${FILENAME} ]]; then + while read -r LINE + do + DOMAIN=$(echo "${LINE}" | cut -f1 -d=) + PHPVER=$(echo "${LINE}" | cut -f2 -d=) + phpSet "${DOMAIN}" "${PHPVER}" + done < "${FILENAME}" + else + echo "Filename \"${FILENAME}\" does not exist" + exit 1 + fi +} + +ipCommands () { + [[ -z $3 ]] && listFunctions + case "$1:$2" in + users:export) ipUsersExport "$3" ;; + users:import) ipUsersImport "$3" ;; + domains:export) echo "domains export" ;; + domains:import) echo "domains import" ;; + *) listFunctions; exit 1 ;; + esac +} + +ipUsersExport () { + echo "Exporting IP addreses" + [[ -z "$1" ]] && exit 1 + local data_dir=/usr/local/directadmin/data + local tmp_dir + tmp_dir=$(mktemp -d) + cp -p "${data_dir}/admin/ip.list" "${tmp_dir}" + cp -p -r "${data_dir}/admin/ips" "${tmp_dir}" + + for username in $(find "${data_dir}/users" -maxdepth 1 -mindepth 1 -type d -printf "%f\n"); do + mkdir -p "${tmp_dir}/users/${username}/domains/" || exit + if [[ -f "${data_dir}/users/${username}/reseller.conf" ]]; then + cp -p "${data_dir}/users/${username}/ip.list" "${tmp_dir}/users/${username}/" + grep -E "^(ip|serverip)=" "${data_dir}/users/${username}/reseller.conf" > "${tmp_dir}/users/${username}/reseller.conf.part" + fi + + cp -p "${data_dir}/users/${username}/user_ip.list" "${tmp_dir}/users/${username}/" + grep -E '^ip=' "${data_dir}/users/${username}/user.conf" > "${tmp_dir}/users/${username}/user.conf.part" + + + for domain in $(find "${data_dir}/users/${username}/domains/" -maxdepth 1 -type f -name "*.ip_list" -printf "%f\n" | sed -e 's/\.ip_list//g' ); do + cp -p "${data_dir}/users/${username}/domains/${domain}.ip_list" "${tmp_dir}/users/${username}/domains/" + grep -E '^ip=' "${data_dir}/users/${username}/domains/${domain}.conf" > "${tmp_dir}/users/${username}/domains/${domain}.conf.part" + done + done + tar -czf "$1.tar.gz" -C "${tmp_dir}" ip.list ips users || exit 1 + rm -rf "${tmp_dir}" + echo "Exported to $1.tar.gz" +} + +checkResellerIp() { + reseller=$1 + ip=$2 + if ! grep -qE "^${ip}$" "${users_dir}/${reseller}/ip.list"; then + echo "WARNING: ${username} owner was missing IP ${ip}, adding to his list" + echo "${ip}" >> "${users_dir}/${reseller}/ip.list" + fi +} + +changeUserIp() { + local users_dir=/usr/local/directadmin/data/users + username=$1 + ip=$2 + reseller=$(grep ^creator= "${users_dir}/${username}/user.conf" | cut -f2 -d=) + checkResellerIp "${reseller}" "${ip}" + + local json_data + json_data=$(cat <<- EOF + { + "user": "${username}", + "ip": "${ip}", + "json": "yes", + "action": "ip" + } + EOF + ) + + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url --user="${reseller}")/CMD_MODIFY_USER?json=yes" --request "POST" --data "${json_data}" -o /dev/null +} + +addUserIp() { + local users_dir=/usr/local/directadmin/data/users + username=$1 + ip=$2 + reseller=$(grep ^creator= "${users_dir}/${username}/user.conf" | cut -f2 -d=) + checkResellerIp "${reseller}" "${ip}" + + local json_data + json_data=$(cat <<- EOF + { + "user": "${username}", + "extra_ip": "${ip}", + "json": "yes", + "action": "multi_ip" + } + EOF + ) + + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url --user="${reseller}")/CMD_MODIFY_USER?json=yes" --request "POST" --data "${json_data}" -o /dev/null +} + +changeDomainIp() { + local domain, ip + domain=$1 + ip=$2 + username=$(grep "^${domain}:" | cut -f2 -d' ') + + local json_data + json_data=$(cat <<- EOF + { + "domain": "${domain}", + "ip": "${ip}", + "dns": "yes", + "json": "yes", + "action": "multi_ip", + "add": "yes" + } + EOF + ) + + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url --user="${username}")/CMD_DOMAIN?json=yes" --request "POST" --data "${json_data}" -o /dev/null +} + +deleteDomainIp() { + local domain, ip + domain=$1 + ip=$2 + username=$(grep "^${domain}:" | cut -f2 -d' ') + + local json_data + json_data=$(cat <<- EOF + { + "domain": "${domain}", + "removedns": "yes", + "json": "yes", + "action": "multi_ip", + "delete": "yes", + "select0": "${ip}" + } + EOF + ) + + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url --user="${username}")/CMD_DOMAIN?json=yes" --request "POST" --data "${json_data}" -o /dev/null +} + + +precheckUsers() { + local tmp_dir=$1 + local users_dir=/usr/local/directadmin/data/users + local OK=1 + + echo -n "Precheck users and resellers..." + for reseller_ip_list in $(find "${tmp_dir}/users" -maxdepth 2 -mindepth 2 -name 'ip.list' -printf '%P\n'); do + if ! [[ -f "${data_dir}/users/${reseller_ip_list}" ]]; then + echo "${reseller_ip_list} missing"; + OK=0 + fi + done + + for username in $(find "${tmp_dir}/users" -maxdepth 1 -mindepth 1 -type d -printf "%f\n"); do + if ! [[ -f "${users_dir}/${username}/user_ip.list" ]]; then + echo "${username} user_ip.list missing" + OK=0 + fi + for domain_ips in $(find "${tmp_dir}/users/${username}/domains" -maxdepth 1 -mindepth 1 -type f -name "*.ip_list" -printf "%f\n"); do + if ! [[ -f "${users_dir}/${username}/domains/${domain_ips}" ]]; then + echo "${username} has missing ${domain_ips}" + OK=0 + fi + done + done + + if [[ ${OK} -ne 1 ]]; then + echo "Precheck failed. Have you really restored all the resellers, users and domains?" + rm -rf "${tmp_dir}" + exit 1 + fi + echo "OK" +} + +ipUsersImport() { + echo "Importing IP addresses" + [[ -z "$1" ]] && exit 1 + local data_dir=/usr/local/directadmin/data + local tmp_dir + tmp_dir=$(mktemp -d) + bkp="users_bkp_$(date +%s)" + echo -n "Making users backup to ${data_dir}/${bkp}..." + cp -p -r "${data_dir}/users" "${data_dir}/${bkp}" || exit 1 + echo "OK" + tar -C "${tmp_dir}" -zxf "$1.tar.gz" || exit + + precheckUsers "${tmp_dir}" + + current_server_ip=$(basename "$(grep "status=server" "${data_dir}"/admin/ips/* -l)") + temp_server_ip=$(basename "$(grep "status=server" "${tmp_dir}"/ips/* -l)") + if [[ -z "${temp_server_ip}" ]]; then + echo "Could not detect the server IP from the import file!" + rm -rf "${tmp_dir}" + exit 1 + fi + if [[ "${current_server_ip}" == "${temp_server_ip}" ]]; then + echo "Server IP is already migrated! Something is wrong, bailing out..." + rm -rf "${tmp_dir}" + exit 1 + fi + + cp -p -f "${tmp_dir}/ip.list" "${data_dir}/admin/ip.list" + cp -p -f "${tmp_dir}"/ips/* "${data_dir}/admin/ips/" + sed -i -e 's/status=owned/status=free/g' "${data_dir}"/admin/ips/* # owned IP cannot be assigned twice + + echo "Restore reseller ip lists and settings" + for username in $(find "${tmp_dir}/users" -maxdepth 2 -mindepth 2 -name 'ip.list' -printf '%P\n' | cut -f1 -d/); do + cp -p -f "${tmp_dir}/users/${username}/ip.list" "${data_dir}/users/${username}/ip.list" + ip=$(grep -E ^ip= "${tmp_dir}/users/${username}/reseller.conf.part" | cut -f2 -d=) + sed -i -e "s/^ip=.*/ip=${ip}/g" "${data_dir}/users/${username}/reseller.conf" + serverip=$(grep -E ^serverip= "${tmp_dir}/users/${username}/reseller.conf.part" | cut -f2 -d=) + sed -i -e "s/^serverip=.*/serverip=${serverip}/g" "${data_dir}/users/${username}/reseller.conf" + done + + echo "User ip lists" + for username in $(find "${tmp_dir}/users" -maxdepth 1 -mindepth 1 -type d -printf "%f\n"); do + user_temp_ip=$(grep ^ip= "${data_dir}/users/${username}/user.conf" | cut -f2 -d=) + user_orig_ip=$(grep ^ip= "${tmp_dir}/users/${username}/user.conf.part" | cut -f2 -d=) + if [[ "${user_temp_ip}" != "${user_orig_ip}" ]]; then + changeUserIp "${username}" "${user_orig_ip}" + fi + for additional_user_ip in $(grep -vE "^${user_orig_ip}$" "${tmp_dir}/users/${username}/user_ip.list"); do + if ! grep -qE "^${additional_user_ip}$" "${data_dir}/users/${username}/user_ip.list"; then + addUserIp "${username}" "${additional_user_ip}" + fi + for domain in $(find "${tmp_dir}/users/${username}/domains/" -maxdepth 1 -mindepth 1 -type f -name '*.ip_list' -printf "%f\n" | sed -e 's/\.ip_list//g') ; do + if grep -q "^${additiona_user_ip}$" "${tmp_dir}/users/${username}/domains/${domain}.ip_list" && + ! grep -q "^${additiona_user_ip}$" "${data_dir}/users/${username}/domains/${domain}.ip_list"; then + addDomainIp "${domain}" "${additional_user_ip}" + if ! grep -q "^${current_user_ip}$" "${tmp_dir}/users/${username}/domains/${domain}.ip_list" && + grep -q "^${current_user_ip}$" "${data_dir}/users/${username}/domains/${domain}.ip_list"; then + deleteDomainIp "${domain}" "$current_user_ip}" + fi + fi + done + done + done + + rm -rf "${tmp_dir}" + echo "finishing touch with ip swap to finish up the leftovers" + /usr/local/directadmin/scripts/ipswap.sh "${current_server_ip}" "${temp_server_ip}" + /usr/local/directadmin/scripts/startips + echo "Done" +} + +renameSingleDomain() { + local current_domain=$1 + local new_domain=$2 + local username + current_domain="$1" + new_domain="$2" + username=$(grep "^${current_domain}:" /etc/virtual/domainowners | cut -f2 -d' ') + if [[ -z "${username}" ]]; then + echo "\"${current_domain}\" doesn't seem to belong to any user" + exit 1 + fi + + local json_data + json_data=$(cat <<- EOF + { + "old_domain": "${current_domain}", + "new_domain": "${new_domain}", + "json": "yes" + } + EOF + ) + echo "${current_domain}->${new_domain}" + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url --user="${username}")/CMD_CHANGE_DOMAIN?json=yes" --request "POST" --data "${json_data}" +} + +renameDomains() { + if [[ -z "$1" ]]; then + echo "Missing parameters" + exit 1 + fi + + if [[ -n "$2" ]]; then + echo "Single domain rename" + renameSingleDomain "$1" "$2" + else + if ! [[ -f "$1" ]]; then + echo "$1 File not found" + exit 1 + fi + + local current_domain, new_domain + while IFS= read -r line; do + current_domain=$(echo "${line}" | awk '{print $1}') + new_domain=$(echo "${line}" | awk '{print $2}') + renameSingleDomain "${current_domain}" "${new_domain}" + done < "$1" + fi +} + +createemptybackup() { + + json_data=$(cat <<- EOF + { + "who": "all", + "skip_suspended": "no", + "when": "cron", + "minute": "0", + "hour": "5", + "dayofmonth": "*", + "month": "*", + "dayofweek": "*", + "where": "local", + "ftp_ip": "", + "ftp_username": "", + "ftp_password": "", + "ftp_path": "/", + "ftp_port": "21", + "ftp_secure": "no", + "append_to_path": "nothing", + "custom_append": "", + "what": "select", + "json": "yes", + "action": "create", + "form_version": "4", + "local_path": "/home/admin/admin_backups/ustawienia", + "encryption_password": "", + "option0": "subdomain", + "option1": "ftp", + "option2": "ftpsettings", + "option3": "database", + "option4": "forwarder", + "option5": "email", + "option6": "emailsettings", + "option7": "vacation", + "option8": "autoresponder", + "option9": "list" + } + EOF + ) + + curl --silent -k -X -u "$(/usr/local/directadmin/directadmin api-url)/CMD_ADMIN_BACKUP?json=yes" --request "POST" --data "${json_data}" +} listFunctions () { - echo "+---------------------------------------+" - echo "| TASKS:" - echo "| $0 createuser USERNAME PASSWORD DOMAIN " - echo "| $0 deleteuser USERNAME" - echo "| $0 createdb DBNAME DBUSERNAME DBPASSWORD" - echo "| $0 deletedb DBNAME" - echo "| $0 createforwarder FORWARDER DESTINATION" - echo "| $0 deleteforwarder FORWARDER" - echo "| $0 createdomain USERNAME DOMAIN" - echo "| $0 createdomain USERNAME list=file" - echo "| $0 deletedomain USERNAME DOMAIN" - echo "| $0 deletedomain USERNAME list=file" - echo "| $0 enablessh USERNAME" - echo "| $0 disablessh USERNAME" - echo "| $0 docroot USERNAME DOMAIN DOCROOT" - echo "| $0 createmail DOMAIN MBOX PASSWORD " - echo "| $0 deletemail DOMAIN MBOX" - echo "| $0 enabledkim domain" - echo "| $0 disabledkim domain" - echo "| $0 changemailpass DOMAIN MBOX PASSWORD" - echo "| $0 changeuserpass LOGIN PASSWORD" - echo "| $0 disablenamed" - echo "| $0 enablenamed" - echo "| $0 sethostname HOSTNAME" - echo "| $0 multiserver CLIENTHOSTNAME CLIENTNAME" - echo "| $0 enablemultiserver" - echo "| $0 disablemultiserver" - echo "| $0 enablemultiserverpage" - echo "| $0 disablemultiserverpage" - echo "| $0 enablecreateadmin" - echo "| $0 disablecreateadmin" - echo "+--------------------------------------+" + echo "+---------------------------------------+" + echo "| TASKS:" + echo "| $0 createuser USERNAME PASSWORD DOMAIN " + echo "| $0 deleteuser USERNAME" + echo "| $0 createdb DBNAME DBUSERNAME DBPASSWORD" + echo "| $0 deletedb DBNAME" + echo "| $0 createforwarder FORWARDER DESTINATION" + echo "| $0 deleteforwarder FORWARDER" + echo "| $0 createdomain USERNAME DOMAIN" + echo "| $0 createdomain USERNAME list=file" + echo "| $0 deletedomain USERNAME DOMAIN" + echo "| $0 deletedomain USERNAME list=file" + echo "| $0 enablessh USERNAME" + echo "| $0 disablessh USERNAME" + echo "| $0 docroot USERNAME DOMAIN DOCROOT" + echo "| $0 createmail DOMAIN MBOX PASSWORD " + echo "| $0 createmail FILENAME" + echo "| $0 deletemail DOMAIN MBOX" + echo "| $0 enabledkim domain" + echo "| $0 disabledkim domain" + echo "| $0 changemailpass DOMAIN MBOX PASSWORD" + echo "| $0 changeuserpass LOGIN PASSWORD" + echo "| $0 disablenamed" + echo "| $0 enablenamed" + echo "| $0 sethostname HOSTNAME" + echo "| $0 multiserver CLIENTHOSTNAME CLIENTNAME" + echo "| $0 enablemultiserver" + echo "| $0 disablemultiserver" + echo "| $0 enablemultiserverpage" + echo "| $0 disablemultiserverpage" + echo "| $0 enablecreateadmin" + echo "| $0 disablecreateadmin" + echo "| $0 php list " + echo "| $0 php set DOMAIN PHP_VERSION" + echo "| $0 php set USER PHP_VERSION" + echo "| $0 php export FILENAME " + echo "| $0 php import FILENAME" + echo "| $0 ip users export FILENAME" + echo "| $0 ip users import FILENAME" + echo "| $0 renamedomain olddomain newdomain" + echo "| $0 renamedomain FILENAME" + echo "| $0 createemptybackup" + echo "+--------------------------------------+" } - case "$1" in - createuser) createUser $2 $3 $4 $5 $6 ;; - deleteuser) deleteUser $2 ;; - createdb) createDB $2 $3 $4 ;; - deletedb) deleteDB $2 ;; - createforwarder) createForwarder $2 $3 ;; - deleteforwarder) deleteForwarder $2 ;; - createdomain) createDomain $2 $3 ;; - deletedomain) deleteDomain $2 $3 ;; - enablessh) enableSSH $2 ;; - disablessh) disableSSH $2 ;; - docroot) docroot $2 $3 $4 ;; - createmail) createmail $2 $3 $4 $5 ;; - deletemail) deletemail $2 $3 ;; - enabledkim) enabledkim $2 ;; - disabledkim) disabledkim $2 ;; - changemailpass) changemailpass $2 $3 $4 ;; - changeuserpass) changeuserpass $2 $3 ;; - disablenamed) disablenamed ;; - enablenamed) enablenamed ;; - sethostname) sethostname $2 ;; - multiserver) multiserver $2 $3 ;; - enablemultiserver) enablemultiserver ;; - disablemultiserver) disablemultiserver ;; - enablemultiserverpage) enablemultiserverpage ;; - disablemultiserverpage) disablemultiserverpage ;; - enablecreateadmin) enablecreateadmin ;; - disablecreateadmin) disablecreateadmin ;; - *) listFunctions ;; + createuser) createUser "$2" "$3" "$4" "$5" "$6" ;; + deleteuser) deleteUser "$2" ;; + createdb) createDB "$2" "$3" "$4" ;; + deletedb) deleteDB "$2" ;; + createforwarder) createForwarder "$2" "$3" ;; + deleteforwarder) deleteForwarder "$2" ;; + createdomain) createDomain "$2" "$3" ;; + deletedomain) deleteDomain "$2" "$3" ;; + enablessh) enableSSH "$2" ;; + disablessh) disableSSH "$2" ;; + docroot) docroot "$2" "$3" "$4" ;; + createmail) createmail "$2" "$3" "$4" "$5" ;; + deletemail) deletemail "$2" "$3" ;; + enabledkim) enabledkim "$2" ;; + disabledkim) disabledkim "$2" ;; + changemailpass) changemailpass "$2" "$3" "$4" ;; + changeuserpass) changeuserpass "$2" "$3" ;; + disablenamed) disablenamed ;; + enablenamed) enablenamed ;; + sethostname) sethostname "$2" ;; + multiserver) multiserver "$2" "$3" ;; + enablemultiserver) enablemultiserver ;; + disablemultiserver) disablemultiserver ;; + enablemultiserverpage) enablemultiserverpage ;; + disablemultiserverpage) disablemultiserverpage ;; + enablecreateadmin) enablecreateadmin ;; + disablecreateadmin) disablecreateadmin ;; + php) phpCommands "$2" "$3" "$4" "$5" ;; + ip) ipCommands "$2" "$3" "$4" ;; + renamedomain) renameDomains "$2" "$3" ;; + createemptybackup) createemptybackup ;; + *) listFunctions ;; esac diff --git a/dapostinstall.sh b/dapostinstall.sh old mode 100644 new mode 100755 index e8cc90c..2f7688e --- a/dapostinstall.sh +++ b/dapostinstall.sh @@ -1,5 +1,5 @@ #!/bin/bash -# VERSION 1.6.2-29.07.2023 +# VERSION 1.6.4-23.08,2923 DAPOSTINSTALL_DIR=/opt/dapostinstall DADIR=/usr/local/directadmin CBDIR=/usr/local/directadmin/custombuild @@ -585,7 +585,7 @@ sh da_cli.sh disablenamed sh da_cli.sh disablemultiserverpage sh da_cli.sh disablecreateadmin sh da_cli.sh changeuserpass admin $DA_ADMINPASS - +sh da_cli.sh createemptybackup clear