diff --git a/dnsapi/dns_pleskxml.sh b/dnsapi/dns_pleskxml.sh index 2c42145b..3f4f4f2a 100644 --- a/dnsapi/dns_pleskxml.sh +++ b/dnsapi/dns_pleskxml.sh @@ -66,30 +66,33 @@ _DBG_EARLY_CHECK_MODE() { return 1 fi - _info "plesk XML running in debug mode. Debug level = '${_pleskxml_DBG_LEVEL}' " - # This won't display if DBG level was set to zero. -} - -# arg1 = severity level (1=least serious, 3=most serious) -# By design if DBG level is 9 for a MESSAGE, the message is ALWAYS shown, this is used for _info and _err -# arg2 = message -_DBG() { - if [ "$1" -eq 9 ] || ([ "$_pleskxml_DBG_LEVEL" -gt 0 ] && [ "$1" -ge "$_pleskxml_DBG_LEVEL" ]); then - case $1 in - 1) _pleskxml_severity='INFO' ;; - 2) _pleskxml_severity='WARN' ;; - 3) _pleskxml_severity='ERR' ;; - 9) _pleskxml_severity='_ACME.SH' ;; - esac - _pleskxml_DBG_COUNT=$((_pleskxml_DBG_COUNT + 1)) - printf '%04d DEBUG [%s]:\n%s\n\n' "$_pleskxml_DBG_COUNT" "$_pleskxml_severity" "$2" + if [ $_pleskxml_DBG_LEVEL -gt 0 ]; then + _info "plesk XML running in debug mode. Debug level = '${_pleskxml_DBG_LEVEL}' " + # This won't display if DBG level was set to zero. fi } -# arg1 = severity level (1=least serious, 3=most serious) -# arg2 = message (vardump will be appended) +# arg1 = LINENO +# arg2 = severity level (1=least serious, 3=most serious) +# By design if DBG level is 9 for a MESSAGE, the message is ALWAYS shown, this is used for _info and _err +# arg3 = message +_DBG() { + if [ "$2" -eq 9 ] || ([ "$_pleskxml_DBG_LEVEL" -gt 0 ] && [ "$2" -ge "$_pleskxml_DBG_LEVEL" ]); then + case $2 in + 1) _pleskxml_severity='MAX_DETAIL' ;; + 2) _pleskxml_severity='DETAIL' ;; + 3) _pleskxml_severity='INFO' ;; + 9) _pleskxml_severity='ACME.SH' ;; + esac + _pleskxml_DBG_COUNT=$((_pleskxml_DBG_COUNT + 1)) + printf '%04d DEBUG [%s/%d, line %s]:\n%s\n\n' "$_pleskxml_DBG_COUNT" "$_pleskxml_severity" "$2" "$1" "$3" + fi +} + +# arg1 = LINENO +# arg2 = severity level (1=least serious, 3=most serious) _DBG_VARDUMP() { - _DBG "$1" "$(printf '%s: 1st lines of current defined variables are now:\n%s\n\n' "${2:-NO_FURTHER_MSG}" "$(set | grep '_pleskxml' | sort)")" + _DBG "$1" "$2" "$(printf '1st lines of current defined variables are now:\n%s\n\n' "$(set | grep '_pleskxml' | sort)")" } _DBG_ERR_TRAP() { @@ -118,26 +121,26 @@ _pleskxml_newline=' # (otherwise printf repeats the string causing the API call to fail) _pleskxml_tplt_get_domain_id="%s" -# Convert domain name to a Plesk internal domain ID -# Args: -# the domain name to query +# Convert domain name to a Plesk internal domain ID +# Args: +# the domain name to query _pleskxml_tplt_add_txt_record="%sTXT%s%s" -# Adds a TXT record to a domain -# Args: -# the Plesk internal domain ID for the domain -# the "host" entry within the domain, to add this to (eg '_acme_challenge') -# the TXT record value +# Adds a TXT record to a domain +# Args: +# the Plesk internal domain ID for the domain +# the "host" entry within the domain, to add this to (eg '_acme_challenge') +# the TXT record value _pleskxml_tplt_rmv_dns_record="%s" -# Adds a TXT record to a domain -# Args: -# the Plesk internal ID for the dns record to delete +# Adds a TXT record to a domain +# Args: +# the Plesk internal ID for the dns record to delete _pleskxml_tplt_get_dns_records="%s" -# Gets all DNS records for a Plesk domain ID -# Args: -# the domain id to query +# Gets all DNS records for a Plesk domain ID +# Args: +# the domain id to query ############ Define public functions ##################### @@ -145,45 +148,46 @@ _pleskxml_tplt_get_dns_records="%s/dev/null)" _pleskxml_retcode="$?" - _DBG 1 "_pleskxml_prettyprint_result =${_pleskxml_newline}'$_pleskxml_prettyprint_result' " - _DBG 2 "retcode = $_pleskxml_retcode" + _DBG "$LINENO" 1 "_pleskxml_prettyprint_result =${_pleskxml_newline}'$_pleskxml_prettyprint_result' " + _DBG "$LINENO" 2 "retcode = $_pleskxml_retcode" # BUGFIX TO CHECK - WILL RETCODE FROM cURL BE AVAILABLE HERE? @@ -421,7 +432,7 @@ _pleskxml_api_request() { if [ $_pleskxml_retcode -ne 0 ]; then _pleskxml_errors="Exiting due to cURL error when querying Plesk XML API. The cURL return code was: $_pleskxml_retcode." - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi @@ -437,19 +448,20 @@ _pleskxml_api_request() { | tr -d '\n' )" - _DBG_VARDUMP 2 'cURL succeeded, valid cURL response obtained' + _DBG "$LINENO" 2 'cURL succeeded, valid cURL response obtained' + _DBG_VARDUMP "$LINENO" 2 # Now we need to check item by item if it's OK. # As we go, we will strip out "known OK" stuff to leave the core reply. # XML header and packet version? - _DBG 2 'Checking and tags exist...' + _DBG "$LINENO" 2 'Checking and tags exist...' if printf '%s' "$_pleskxml_result" | grep -qiEv '^<\?xml version=[^>]+>]+>.*$'; then # Error - should have .... Abort _pleskxml_errors="Error when querying Plesk XML API. The API did not return a valid XML response. The response was:${_pleskxml_newline}${_pleskxml_prettyprint_result}${_pleskxml_newline}The collapsed version was:${_pleskxml_newline}'${_pleskxml_result}'${_pleskxml_newline}" - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 else # So far so good. Strip the and ... tags and continue @@ -458,7 +470,7 @@ _pleskxml_api_request() { )" fi - _DBG 2 "Checking tags don't exist..." + _DBG "$LINENO" 2 "Checking tags don't exist..." # section found anywhere in response? # This usually means some kind of basic API error such as login failure, bad XML request, etc @@ -466,11 +478,11 @@ _pleskxml_api_request() { if printf '%s' "$_pleskxml_result" | grep -qiE '.*'; then # Error - shouldn't contain .... Abort _pleskxml_errors='Error when querying Plesk XML API. The result contained a tag.\nThis usually indicates an invalid login, badly formatted API request or other error. The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi - _DBG 2 'Checking 1 or >=1 tag (or tags) found, each containing 'status:ok'...' + _DBG "$LINENO" 2 'Checking 1 or >=1 tag (or tags) found, each containing 'status:ok'...' # Check results section. Most commands only have one results section. # But some (i.e., get all DNS records for a domain) have many results sections, @@ -485,11 +497,11 @@ _pleskxml_api_request() { if printf '%s' "$_pleskxml_result" | grep -qiEv '.*'; then # Error - doesn't contain .... Abort _pleskxml_errors='Error when querying Plesk XML API. The result did not contain a section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi - _DBG 2 'Found at least 1 section. Splitting each result section to a separate line' + _DBG "$LINENO" 2 'Found at least 1 section. Splitting each result section to a separate line' _pleskxml_result="$(printf '%s' "$_pleskxml_result" \ | sed "s//\\${_pleskxml_newline}/g" \ @@ -501,18 +513,19 @@ _pleskxml_api_request() { _pleskxml_linecount=$(printf '%s\n' "$_pleskxml_result" | wc -l) - _DBG 2 "Result is: '$_pleskxml_result' (${_pleskxml_linecount} line(s))" + _DBG "$LINENO" 2 "Result is: '$_pleskxml_result' (${_pleskxml_linecount} line(s))" - _DBG_VARDUMP 2 'Testing section linecount is OK (1 or >=1 as required)' + _DBG "$LINENO" 2 'Testing section linecount is OK (1 or >=1 as required)' + _DBG_VARDUMP "$LINENO" 2 if [ $_pleskxml_multiple_results_allowed -eq 0 ] && [ "$_pleskxml_linecount" -gt 1 ]; then # Error - contains multiple sections. Abort _pleskxml_errors='Error when querying Plesk XML API. The result contained more than one section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi - _DBG 2 "Found ${_pleskxml_linecount} section(s), checking each has status:ok..." + _DBG "$LINENO" 2 "Found ${_pleskxml_linecount} section(s), checking each has status:ok..." # Loop through each section, checking every line has exactly one result section, # containing exactly one status section, which contains ok @@ -522,11 +535,12 @@ _pleskxml_api_request() { # _pleskxml_line *should* contain a single result section. # Check this is correct. - # _DBG "Checking a section... content is ${_pleskxml_line}" + # _DBG "$LINENO" "Checking a section... content is ${_pleskxml_line}" if printf '%s' "$_pleskxml_line" | grep -qiEv '^.*$'; then # Error - doesn't contain .... Abort _pleskxml_errors='Error when querying Plesk XML API. A section was not found where expected.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\n' + _err "$_pleskxml_errors" return 1 fi @@ -537,21 +551,21 @@ _pleskxml_api_request() { if printf '%s' "$_pleskxml_line" | grep -qiEv '.*'; then # Error - doesn't contain .... Abort _pleskxml_errors='Error when querying Plesk XML API. A section did not contain a section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _DBG "$LINENO" 2 "$_pleskxml_errors" return 1 elif printf '%s' "$_pleskxml_line" | grep -qiE '.*.*'; then # Error - contains ....... Abort _pleskxml_errors='Error when querying Plesk XML API. A section contained more than one section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _DBG "$LINENO" 2 "$_pleskxml_errors" return 1 elif printf '%s' "$_pleskxml_line" | grep -qiEv 'ok'; then # Error - doesn't contain ok. Abort _pleskxml_errors='Error when querying Plesk XML API. A tag did not contain "ok". The response was:\n'"$_pleskxml_prettyprint_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi - # _DBG "Line is OK. Looping to next line or exiting..." + # _DBG "$LINENO" "Line is OK. Looping to next line or exiting..." done <ok sections as they're checked now. - _DBG 2 "All results lines had status:ok. Exiting loop, and removing all ok tags now they've been checked" + _DBG "$LINENO" 2 "All results lines had status:ok. Exiting loop, and removing all ok tags now they've been checked" _pleskxml_result="$(printf '%s' "$_pleskxml_result" \ | sed -E 's/ok<\/status>//g' @@ -567,15 +581,16 @@ EOL # Result is OK. Remove any redundant self-closing tags, and or tags, and exit - _DBG 2 'Now removing any self-closing tags, or ... tags' + _DBG "$LINENO" 2 'Now removing any self-closing tags, or ... tags' _pleskxml_result="$(printf '%s' "$_pleskxml_result" \ | sed -E 's/(<[a-zA-Z0-9._-]+[[:space:]]*\/>|<\/?data\/?>)//g' )" - _DBG 2 "About to exit API function. Result = ${_pleskxml_newline}'${_pleskxml_result}' " + _DBG "$LINENO" 2 "About to exit API function. Result = ${_pleskxml_newline}'${_pleskxml_result}' " - _DBG_VARDUMP 2 'Successfully exiting Plesk XML API function' + _DBG "$LINENO" 2 'Successfully exiting Plesk XML API function' + _DBG_VARDUMP "$LINENO" 2 return 0 @@ -583,21 +598,21 @@ EOL _pleskxml_get_domain_ID() { - _DBG 2 "Entered Plesk get_domain_ID($*), to get the domain's Plesk ID." + _DBG "$LINENO" 2 "Entered Plesk get_domain_ID($*), to get the domain's Plesk ID." # Call cURL to convert a domain name to a plesk domain ID. - _DBG 2 'About to make API request (domain name -> domain ID)' + _DBG "$LINENO" 2 'About to make API request (domain name -> domain ID)' _pleskxml_api_request "$_pleskxml_tplt_get_domain_id" "$1" _pleskxml_retcode=$? # $1 is the domain name we wish to convert to a Plesk domain ID - _DBG 2 'Returned from API request, now back in get_domain_ID()' + _DBG "$LINENO" 2 'Returned from API request, now back in get_domain_ID()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi @@ -605,17 +620,17 @@ _pleskxml_get_domain_ID() { # Result should comprise precisely one section - _DBG 2 'Testing API return data for one and removing if so' + _DBG "$LINENO" 2 'Testing API return data for one and removing if so' if printf '%s' "$_pleskxml_result" | grep -qiEv '^.*$'; then # Error - doesn't comprise DOMAINNAME. Something's wrong. Abort _pleskxml_errors='Error when querying Plesk XML API. The API did not comprise a section containing all other data.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 elif printf '%s' "$_pleskxml_result" | grep -qiE '.*'; then # Error - contains ....... Abort _pleskxml_errors='Error when querying Plesk XML API. The API contained more than one section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 else # So far so good. Remove the ... section and continue @@ -626,17 +641,17 @@ _pleskxml_get_domain_ID() { # Result should contain precisely one section, containing the domain name inquired. - _DBG 2 'Testing API return data for one and removing if so' + _DBG "$LINENO" 2 'Testing API return data for one and removing if so' if printf '%s' "$_pleskxml_result" | grep -qiv "$1"; then # Error - doesn't contain DOMAINNAME. Something's wrong. Abort _pleskxml_errors='Error when querying Plesk XML API. The API did not contain the expected section containing the domain name.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 elif printf '%s' "$_pleskxml_result" | grep -qiE '.*'; then # Error - contains ....... Abort _pleskxml_errors='Error when querying Plesk XML API. The API contained more than one section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 else # So far so good. Remove the ... section and continue @@ -647,12 +662,12 @@ _pleskxml_get_domain_ID() { # All that should be left is one section, containing DOMAIN_ID - _DBG 2 "Remaining part of result is now: '$_pleskxml_result' " + _DBG "$LINENO" 2 "Remaining part of result is now: '$_pleskxml_result' " if printf '%s' "$_pleskxml_result" | grep -qiEv '^[0-9]+$'; then # Error - doesn't contain just NUMBERS. Something's wrong. Abort _pleskxml_errors='Error when querying Plesk XML API. The API did not contain the expected [NUMERIC_ID] section, or contained other unexpected values as well.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi @@ -662,7 +677,10 @@ _pleskxml_get_domain_ID() { | sed -E 's/^([0-9]+)<\/id>$/\1/' )" - _DBG_VARDUMP 2 'SUCCESSFULLY exiting Plesk get_domain_ID' + _pleskxml_domain_id="$_pleskxml_result" + + _DBG "$LINENO" 2 'SUCCESSFULLY exiting Plesk get_domain_ID' + _DBG_VARDUMP "$LINENO" 2 return 0 @@ -674,47 +692,47 @@ _pleskxml_get_domain_ID() { _pleskxml_get_dns_records() { - _DBG 2 "Entered Plesk _pleskxml_get_dns_records($*)" + _DBG "$LINENO" 2 "Entered Plesk _pleskxml_get_dns_records($*)" # First, we need to get all DNS records, and check the list is valid - _DBG 2 'About to make API request (get DNS records)' + _DBG "$LINENO" 2 'About to make API request (get DNS records)' _pleskxml_api_request "$_pleskxml_tplt_get_dns_records" "$1" _pleskxml_retcode=$? # $1 is the Plesk internal domain ID for the domain - _DBG 2 'Returned from API request, now back in get_txt_records()' + _DBG "$LINENO" 2 'Returned from API request, now back in get_txt_records()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi # OK, we should have a section containing a list of DNS records. # Now keep only the TXT records - _DBG 2 "Full DNS records were:${_pleskxml_newline}${_pleskxml_newline}'${_pleskxml_result}' " + _DBG "$LINENO" 2 "Full DNS records were:${_pleskxml_newline}${_pleskxml_newline}'${_pleskxml_result}' " if [ -n "${2:-}" ]; then _pleskxml_result="$(printf '%s' "$_pleskxml_result" \ | grep "$2" )" - _DBG 2 "Filtered relevant DNS records. Records to be returned are:${_pleskxml_newline}${_pleskxml_newline}'${_pleskxml_result}' " + _DBG "$LINENO" 2 "Filtered relevant DNS records. Records to be returned are:${_pleskxml_newline}${_pleskxml_newline}'${_pleskxml_result}' " else - _DBG 2 'Not filtering DNS records. All records will be returned.' + _DBG "$LINENO" 2 'Not filtering DNS records. All records will be returned.' fi - _DBG 2 "SUCCESSFULLY exiting _pleskxml_get_dns_records" + _DBG "$LINENO" 2 "SUCCESSFULLY exiting _pleskxml_get_dns_records" return 0 } _pleskxml_add_txt_record() { - _DBG 2 "Entered Plesk _pleskxml_add_txt_record($*)" + _DBG "$LINENO" 2 "Entered Plesk _pleskxml_add_txt_record($*)" - _DBG 2 'About to make API request (add TXT record)' + _DBG "$LINENO" 2 'About to make API request (add TXT record)' _pleskxml_api_request "$_pleskxml_tplt_add_txt_record" "$1" "$2" "$3" _pleskxml_retcode=$? @@ -723,11 +741,11 @@ _pleskxml_add_txt_record() { # $2 is the "host" entry within the domain, to add this to (eg '_acme_challenge') # $3 is the TXT record value - _DBG 2 'Returned from API request, now back in add_txt_record()' + _DBG "$LINENO" 2 'Returned from API request, now back in add_txt_record()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi @@ -737,7 +755,7 @@ _pleskxml_add_txt_record() { if printf '%s' "$_pleskxml_result" | grep -qivE '^[0-9]+$'; then # Error - doesn't contain just NUMBERS. Something's wrong. Abort _pleskxml_errors='Error when calling Plesk XML API. The API did not contain the expected [PLESK_NEW_DNS_RECORD_ID] section, or contained other unexpected values as well.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi @@ -748,33 +766,35 @@ _pleskxml_add_txt_record() { | sed -E "s/^([0-9]+)<\/id><\/result>$/\1/" )" - _DBG_VARDUMP 2 'SUCCESSFULLY exiting Plesk _pleskxml_add_txt_record' + _DBG "$LINENO" 2 'SUCCESSFULLY exiting Plesk _pleskxml_add_txt_record' + _DBG_VARDUMP "$LINENO" 2 return 0 } _pleskxml_rmv_dns_record() { - _DBG 2 "Entered Plesk _pleskxml_rmv_dns_record($*)" + _DBG "$LINENO" 2 "Entered Plesk _pleskxml_rmv_dns_record($*)" - _DBG 2 'About to make API request (rmv TXT record)' + _DBG "$LINENO" 2 'About to make API request (rmv TXT record)' _pleskxml_api_request "$_pleskxml_tplt_rmv_dns_record" "$1" _pleskxml_retcode=$? # $1 is the Plesk internal domain ID for the TXT record - _DBG 2 'Returned from API request, now back in rmv_dns_record()' + _DBG "$LINENO" 2 'Returned from API request, now back in rmv_dns_record()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi # OK, we should have removed a TXT record. If it failed, there wouldn't have been a "status:ok" above - _DBG_VARDUMP 2 'SUCCESSFULLY exiting Plesk _pleskxml_rmv_dns_record' + _DBG "$LINENO" 2 'SUCCESSFULLY exiting Plesk _pleskxml_rmv_dns_record' + _DBG_VARDUMP "$LINENO" 2 return 0 } @@ -784,25 +804,25 @@ _pleskxml_rmv_dns_record() { # 3rd arg = value of TXT record string to be found and removed _pleskxml_rmv_txt_record() { - _DBG 2 "Entered Plesk _pleskxml_rmv_dns_TXT_record($*). Getting DNS TXT records for the domain ID" + _DBG "$LINENO" 2 "Entered Plesk _pleskxml_rmv_dns_TXT_record($*). Getting DNS TXT records for the domain ID" _pleskxml_get_dns_records "$1" 'TXT' _pleskxml_retcode=$? # $1 is the Plesk internal domain ID for the domain - _DBG 2 'Returned from API request, now back in rmv_txt_record()' + _DBG "$LINENO" 2 'Returned from API request, now back in rmv_txt_record()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi # OK, we should have a section containing a list of DNS TXT records. # Now we need to find our desired record in it (if it exists). - # and might as well collapse any successful matches to a signle line for line-count purposes at the same time + # and might as well collapse any successful matches to a single line for line-count purposes at the same time - _DBG 2 "Filters to apply (as literal strings):${_pleskxml_newline}'${2:-}.'${_pleskxml_newline}'${3:-}' " + _DBG "$LINENO" 2 "Filters to apply (as literal strings):${_pleskxml_newline}'${2:-}.'${_pleskxml_newline}'${3:-}' " _pleskxml_result="$(printf '%s' "$_pleskxml_result" \ | grep -F "${2:-}." \ @@ -814,19 +834,19 @@ _pleskxml_rmv_txt_record() { # ands this avoids regex and escaping which is easier # NOTE: the returned "host" field is actually the FQDN, not just the host ID, hence the grep match on that field. - _DBG 2 "Filtered result:${_pleskxml_newline}'$_pleskxml_result' " + _DBG "$LINENO" 2 "Filtered result:${_pleskxml_newline}'$_pleskxml_result' " if printf '%s' "$_pleskxml_result" | grep -qiE ".*"; then # Error - contains ....... Abort _pleskxml_errors='Error when querying Plesk XML API. The API contained more than one section.\nThis is unexpected: something has gone wrong. Please raise this as a bug/issue in the module. The response was:\n'"$_pleskxml_prettyprint_result"'\nand the exact test string was:\n'"$_pleskxml_result"'\n' - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi if printf '%s\n' "$_pleskxml_result" | grep -qiv ""; then # No matching TXT records, so we're done. _info "Couldn't find a TXT record matching the requested host/value. Not an error, but a concern..." - _DBG 2 "Exiting Plesk _pleskxml_rmv_txt_record (without raising an error), as nothing more to do: the record requested for deletion doesn't exist" + _DBG "$LINENO" 2 "Exiting Plesk _pleskxml_rmv_txt_record (without raising an error), as nothing more to do: the record requested for deletion doesn't exist" _pleskxml_result='' return 0 fi @@ -837,112 +857,109 @@ _pleskxml_rmv_txt_record() { | sed -E 's/^.*([0-9]+)<\/id>.*$/\1/' )" - _DBG 2 "A unique matching DNS TXT record was found, with Plesk record ID = '$_pleskxml_result'. Calling API to delete this record." + _DBG "$LINENO" 2 "A unique matching DNS TXT record was found, with Plesk record ID = '$_pleskxml_result'. Calling API to delete this record." _pleskxml_rmv_dns_record "$_pleskxml_result" _pleskxml_retcode=$? - _DBG 2 'Returned from API request, now back in rmv_txt_record()' + _DBG "$LINENO" 2 'Returned from API request, now back in rmv_txt_record()' if [ $_pleskxml_retcode -ne 0 ] || [ "$_pleskxml_errors" != '' ] || [ "$_pleskxml_result" = '' ]; then # Really, just testing return code should be enough, based on above code, but let's go "all-in" and test all variables returned - _DBG 2 "$_pleskxml_errors" + _err "$_pleskxml_errors" return 1 fi - _DBG_VARDUMP 2 'SUCCESSFULLY exiting Plesk _pleskxml_rmv_txt_record' + _DBG "$LINENO" 2 'SUCCESSFULLY exiting Plesk _pleskxml_rmv_txt_record' + _DBG_VARDUMP "$LINENO" 2 return 0 } -exit +if false; then -# ---------------------- TEST CODE ------------------------------ + # ---------------------- TEST CODE ------------------------------ -# defined by user -pleskxml_uri="https://plesk.XXXXX.net:8443/enterprise/control/agent.php" -pleskxml_user="XXXXX" -pleskxml_pass="XXXXX" -pleskxml_debug_min_level=3 + # defined by user + pleskxml_uri="https://plesk.XXXXX.net:8443/enterprise/control/agent.php" + pleskxml_user="XXXXX" + pleskxml_pass="XXXXX" + pleskxml_debug_min_level=3 -# defined from args by module -_pleskxml_FQDN="_acme_challenge.XXXXX.com" -_pleskxml_TXT_string='~test~string~' + # defined from args by module + _pleskxml_FQDN="_acme_challenge.XXXXX.com" + _pleskxml_TXT_string='~test~string~' -printf '\n\n\n\n======================================================================== START OF RUN\n\n' + printf '\n\n\n\n======================================================================== START OF RUN\n\n' -_info 'Checking debug mode...' + _info 'Checking debug mode...' -_DBG_EARLY_CHECK_MODE + _DBG_EARLY_CHECK_MODE -_DBG 3 'Debug mode done. Now testing _pleskxml_get_variables()' + _DBG "$LINENO" 3 'Debug mode done. Now testing _pleskxml_get_variables()' -_pleskxml_get_variables -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _pleskxml_get_variables + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 '===============================================================' + _DBG "$LINENO" 3 '===============================================================' -_DBG 3 'Testing _pleskxml_get_domain_ID()' -_pleskxml_get_domain_ID "atticflat.uk" + _DBG "$LINENO" 3 'Testing _pleskxml_get_domain_ID()' + _pleskxml_get_domain_ID "atticflat.uk" -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG_VARDUMP 2 + _DBG "$LINENO" 3 '===============================================================' -_DBG 3 '===============================================================' + test_string="TEST STRING ADDED @ $(date)" -test_string="TEST STRING ADDED @ $(date)" + _DBG "$LINENO" 3 "Testing add a TXT string: '$test_string' " + _pleskxml_add_txt_record 874 '_test_subdomain' "$test_string" -_DBG 3 "Testing add a TXT string: '$test_string' " -_pleskxml_add_txt_record 874 '_test_subdomain' "$test_string" + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG "$LINENO" 3 '===============================================================' -_DBG_VARDUMP 2 + _DBG "$LINENO" 3 'Testing get DNS records (ALL)' + _pleskxml_get_dns_records 874 -_DBG 3 '===============================================================' + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 'Testing get DNS records (ALL)' -_pleskxml_get_dns_records 874 + _DBG "$LINENO" 3 '===============================================================' -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG "$LINENO" 3 'Testing get DNS records (TXT ONLY)' + _pleskxml_get_dns_records 874 TXT -_DBG_VARDUMP 2 + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 '===============================================================' + _DBG "$LINENO" 3 '===============================================================' -_DBG 3 'Testing get DNS records (TXT ONLY)' -_pleskxml_get_dns_records 874 TXT + _DBG "$LINENO" 3 'Testing rmv a TXT string' + _pleskxml_rmv_txt_record 874 '_test_subdomain' "$test_string" -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG_VARDUMP 2 + _DBG "$LINENO" 3 '===============================================================' -_DBG 3 '===============================================================' + _DBG "$LINENO" 3 'Re-testing get DNS records (TXT ONLY) after TXT string removal' + _pleskxml_get_dns_records 874 TXT -_DBG 3 'Testing rmv a TXT string' -_pleskxml_rmv_txt_record 874 '_test_subdomain' "$test_string" + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG "$LINENO" 3 '===============================================================' -_DBG_VARDUMP 2 + _DBG "$LINENO" 3 'Testing rmv a TXT string, with a non-matching string' + _pleskxml_rmv_txt_record 874 '_test_subdomain' 'JUNKegqw4bw4bb2' -_DBG 3 '===============================================================' + _DBG "$LINENO" 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" + _DBG_VARDUMP "$LINENO" 3 -_DBG 3 'Re-testing get DNS records (TXT ONLY) after TXT string removal' -_pleskxml_get_dns_records 874 TXT + _DBG "$LINENO" 3 '=============================================================== END OF RUN' -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" - -_DBG_VARDUMP 2 - -_DBG 3 '===============================================================' - -_DBG 3 'Testing rmv a TXT string, with a non-matching string' -_pleskxml_rmv_txt_record 874 '_test_subdomain' 'JUNKegqw4bw4bb2' - -_DBG 3 "$(printf 'RESULT:\n _pleskxml_errors: "%s"\n _pleskxml_retcode: "%s"\n _pleskxml_result: "%s"\n\n' "$_pleskxml_errors" "$_pleskxml_retcode" "$_pleskxml_result")" - -_DBG_VARDUMP 2 - -_DBG 3 '=============================================================== END OF RUN' +fi