Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
d7affad0
Unverified
Commit
d7affad0
authored
Oct 29, 2019
by
stilez
Committed by
GitHub
Oct 29, 2019
Browse files
various small improves
parent
7c09bdc6
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_pleskxml.sh
View file @
d7affad0
...
@@ -189,7 +189,7 @@ dns_pleskxml_rm() {
...
@@ -189,7 +189,7 @@ dns_pleskxml_rm() {
return
0
return
0
}
}
#################### Private functions below ##################################
#################### Private functions below
(utility functions)
##################################
# Outputs value of a variable without additional newlines etc
# Outputs value of a variable without additional newlines etc
_value
()
{
_value
()
{
...
@@ -203,6 +203,12 @@ _valuecut() {
...
@@ -203,6 +203,12 @@ _valuecut() {
printf
'%s'
"
$3
"
|
cut
-d
.
-f
"
${
1
}
-
${
2
}
"
printf
'%s'
"
$3
"
|
cut
-d
.
-f
"
${
1
}
-
${
2
}
"
}
}
# Counts '.' present in a domain name
# $1 = domain name
_countdots
()
{
_value
"
$1
"
|
tr
-dc
'.'
|
wc
-c
}
# Cleans up an API response, splits it "one line per item in the response" and greps for a string that in the context, identifies "useful" lines
# Cleans up an API response, splits it "one line per item in the response" and greps for a string that in the context, identifies "useful" lines
# $1 - result string from API
# $1 - result string from API
# $2 - tag to resplit on (usually "result" or "domain")
# $2 - tag to resplit on (usually "result" or "domain")
...
@@ -215,6 +221,8 @@ _api_response_split() {
...
@@ -215,6 +221,8 @@ _api_response_split() {
|
grep
-E
"
$3
"
|
grep
-E
"
$3
"
}
}
#################### Private functions below (DNS functions) ##################################
# Calls Plesk XML API, and checks results for obvious issues
# Calls Plesk XML API, and checks results for obvious issues
_call_api
()
{
_call_api
()
{
request
=
"
$1
"
request
=
"
$1
"
...
@@ -228,7 +236,7 @@ _call_api() {
...
@@ -228,7 +236,7 @@ _call_api() {
export
_H4
=
"HTTP_PRETTY_PRINT: true"
export
_H4
=
"HTTP_PRETTY_PRINT: true"
pleskxml_prettyprint_result
=
"
$(
_post
"
${
request
}
"
"
$pleskxml_uri
"
""
"POST"
)
"
pleskxml_prettyprint_result
=
"
$(
_post
"
${
request
}
"
"
$pleskxml_uri
"
""
"POST"
)
"
pleskxml_retcode
=
"
$?
"
pleskxml_retcode
=
"
$?
"
_debug
"acme _post() returned
retcode=
$pleskxml_retcode
. Literal response:"
'\n'
"'
$
{
pleskxml_prettyprint_result
}
'"
_debug
'The responses from the Plesk XML server were:\n'
"
retcode=
$pleskxml_retcode
. Literal response:"
'\n'
"'
$pleskxml_prettyprint_result
'"
# Detect any <status> that isn't "ok". None of the used calls should fail if the API is working correctly.
# Detect any <status> that isn't "ok". None of the used calls should fail if the API is working correctly.
# Also detect if there simply aren't any status lines (null result?) and report that, as well.
# Also detect if there simply aren't any status lines (null result?) and report that, as well.
...
@@ -239,9 +247,9 @@ _call_api() {
...
@@ -239,9 +247,9 @@ _call_api() {
# We have some status lines that aren't "ok". Get the details
# We have some status lines that aren't "ok". Get the details
errtext
=
"
$(
_value
"
$pleskxml_prettyprint_result
"
\
errtext
=
"
$(
_value
"
$pleskxml_prettyprint_result
"
\
|
grep
-
i
E
"(<status>|<errcode>|<errtext>)"
\
|
grep
-E
"(<status>|<errcode>|<errtext>)"
\
|
sed
-E
's/
(^[[:space:]]+|<\/[a-z]+$)//g
'
\
|
sed
-E
's/
^<(status|errcode|errtext)>/\1: /
'
\
|
sed
-E
's/
^<([a-z]+)>/\1: /'
|
sed
-E
's/
(^[[:space:]]+|<\/(status|errcode|errtext)>$)//g'
\
)
"
)
"
elif
!
_value
"
$statuslines
"
|
grep
-q
'<status>ok</status>'
;
then
elif
!
_value
"
$statuslines
"
|
grep
-q
'<status>ok</status>'
;
then
...
@@ -252,14 +260,23 @@ _call_api() {
...
@@ -252,14 +260,23 @@ _call_api() {
fi
fi
if
[
"
$pleskxml_retcode
"
-ne
0
]
||
[
"
$errtext
"
!=
""
]
;
then
if
[
"
$pleskxml_retcode
"
-ne
0
]
||
[
"
$errtext
"
!=
""
]
;
then
_err
"The Plesk XML API call failed."
# Call failed, for reasons either in the retcode or the response text...
_err
"The return code for the POST request was
$pleskxml_retcode
(0=success)."
if
[
"
$pleskxml_retcode
"
-eq
0
]
;
then
_err
"The POST request was successfully sent to the Plesk server."
else
_err
"The return code for the POST request was
$pleskxml_retcode
(non-zero = could not submit request to server)."
fi
if
[
"
$errtext
"
!=
""
]
;
then
if
[
"
$errtext
"
!=
""
]
;
then
_err
'
Status and
error
m
es
sag
es received from the Plesk server:\n'
"
$errtext
"
_err
'
The
error
r
es
pons
es received from the Plesk server
were
:\n'
"
$errtext
"
else
else
_err
"No additional error messages were received back from the Plesk server"
_err
"No additional error messages were received back from the Plesk server"
fi
fi
_err
"The Plesk XML API call failed."
return
1
return
1
fi
fi
_debug
"Leaving _call_api(). Successful call."
_debug
"Leaving _call_api(). Successful call."
...
@@ -319,10 +336,12 @@ _credential_check() {
...
@@ -319,10 +336,12 @@ _credential_check() {
_pleskxml_get_root_domain
()
{
_pleskxml_get_root_domain
()
{
_debug
"Identifying DNS root domain for '
$1
' that is managed by the Plesk account."
_debug
"Identifying DNS root domain for '
$1
' that is managed by the Plesk account."
original_full_domain_name
=
"
$1
"
root_domain_name
=
"
$1
"
# test if the domain as provided is valid for splitting.
# test if the domain as provided is valid for splitting.
if
_value
"
$root_domain_name
"
|
grep
-qvE
'^[^.]+\.[^.]+\.[^.]'
;
then
if
!
_countdots
"
$root_domain_name
"
;
then
_err
"Invalid domain. The ACME domain must contain at least two parts (aa.bb) to identify a domain and tld for the TXT record."
_err
"Invalid domain. The ACME domain must contain at least two parts (aa.bb) to identify a domain and tld for the TXT record."
return
1
return
1
fi
fi
...
@@ -347,10 +366,7 @@ _pleskxml_get_root_domain() {
...
@@ -347,10 +366,7 @@ _pleskxml_get_root_domain() {
# loop and test if domain, or any parent domain, is managed by Plesk
# loop and test if domain, or any parent domain, is managed by Plesk
# Loop until we don't have any '.' in the string we're testing as a candidate Plesk-managed domain
# Loop until we don't have any '.' in the string we're testing as a candidate Plesk-managed domain
root_domain_name
=
"
$1
"
while
true
;
do
doneloop
=
0
while
_contains
"
$root_domain_name
"
'\.'
;
do
_debug
"Checking if '
$root_domain_name
' is managed by the Plesk server..."
_debug
"Checking if '
$root_domain_name
' is managed by the Plesk server..."
...
@@ -360,32 +376,23 @@ _pleskxml_get_root_domain() {
...
@@ -360,32 +376,23 @@ _pleskxml_get_root_domain() {
# Found a match
# Found a match
# SEE IMPORTANT NOTE ABOVE - THIS FUNCTION CAN RETURN HOST='', AND THAT'S OK FOR PLESK XML API WHICH ALLOWS IT.
# SEE IMPORTANT NOTE ABOVE - THIS FUNCTION CAN RETURN HOST='', AND THAT'S OK FOR PLESK XML API WHICH ALLOWS IT.
# SO WE HANDLE IT AND DON'T PREVENT IT
# SO WE HANDLE IT AND DON'T PREVENT IT
sub_domain_name
=
"
$(
_value
"
$
1
"
|
sed
-E
"s/
\.
?
${
root_domain_name
}
"
'$//'
)
"
sub_domain_name
=
"
$(
_value
"
$
original_full_domain_name
"
|
sed
-E
"s/
\.
?
${
root_domain_name
}
"
'$//'
)
"
_info
"Matched host '
$
1
' to: DOMAIN '
${
root_domain_name
}
' (Plesk ID '
${
root_domain_id
}
'), HOST '
${
sub_domain_name
}
'. Returning."
_info
"
Success.
Matched host '
$
original_full_domain_name
' to: DOMAIN '
${
root_domain_name
}
' (Plesk ID '
${
root_domain_id
}
'), HOST '
${
sub_domain_name
}
'. Returning."
return
0
return
0
fi
fi
# No match, try next parent up (if any)...
# No match, try next parent up (if any)...
if
_contains
"
$root_domain_name
"
'\.[^.]+\.'
;
then
_debug
"No match, trying next parent up..."
else
_debug
"No match,and next parent would be a TLD..."
fi
root_domain_name
=
"
$(
_valuecut 2 1000
"
$root_domain_name
"
)
"
root_domain_name
=
"
$(
_valuecut 2 1000
"
$root_domain_name
"
)
"
doneloop
=
1
done
if
!
_countdots
"
$root_domain_name
"
;
then
_debug
"No match, and next parent would be a TLD..."
_err
"Cannot find '
$original_full_domain_name
' or any parent domain of it, in Plesk."
_err
"Are you sure that this domain is managed by this Plesk server?"
return
1
fi
# if we get here, we failed to find a root domain match in the list of domains managed by Plesk.
_debug
"No match, trying next parent up..."
# if we never ran the loop even once, $1 wasn't a 2nd level (or deeper) domain (e.g. domain.tld) and wasn't valid anyway
if
[
-z
$doneloop
]
;
then
done
_err
"'
$1
' isn't a valid domain for ACME DNS. Exiting."
else
_err
"Cannot find '
$1
' or any parent domain of it, in Plesk."
_err
"Are you sure that this domain is managed by this Plesk server?"
fi
return
1
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment