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
f8410391
Unverified
Commit
f8410391
authored
Feb 19, 2019
by
neil
Committed by
GitHub
Feb 19, 2019
Browse files
Merge pull request #2101 from Neilpang/dev
Doh (#2100)
parents
ff38d2bb
b5ca9bba
Changes
1
Hide whitespace changes
Inline
Side-by-side
acme.sh
View file @
f8410391
...
@@ -2929,42 +2929,38 @@ _clearup() {
...
@@ -2929,42 +2929,38 @@ _clearup() {
_clearupdns
()
{
_clearupdns
()
{
_debug
"_clearupdns"
_debug
"_clearupdns"
_debug "dnsadded" "$dnsadded"
_debug
"dns_entries"
"
$dns_entries
"
_debug "vlist" "$vlist"
#dnsadded is "0" or "1" means dns-01 method was used for at least one domain
if
[
-z
"
$dns_entries
"
]
;
then
if [ -z "$dnsadded" ] || [ -z "$vlist" ]; then
_debug
"skip dns."
_debug
"skip dns."
return
return
fi
fi
_info
"Removing DNS records."
_info
"Removing DNS records."
ventries=$(echo "$vlist" | tr ',' ' ')
_alias_index=1
for ventry in $ventries; do
d=$(echo "$ventry" | cut -d "$sep" -f 1)
keyauthorization=$(echo "$ventry" | cut -d "$sep" -f 2)
vtype=$(echo "$ventry" | cut -d "$sep" -f 4)
_currentRoot=$(echo "$ventry" | cut -d "$sep" -f 5)
txt="$(printf "%s" "$keyauthorization" | _digest "sha256" | _url_replace)"
_debug txt "$txt"
if [ "$keyauthorization" = "$STATE_VERIFIED" ]; then
_debug "$d is already verified, skip $vtype."
_alias_index="$(_math "$_alias_index" + 1)"
continue
fi
if [ "$vtype" != "$VTYPE_DNS" ]; then
for
entry
in
$dns_entries
;
do
_debug "Skip $d for $vtype"
d
=
$(
_getfield
"
$entry
"
1
)
continue
txtdomain
=
$(
_getfield
"
$entry
"
2
)
aliasDomain
=
$(
_getfield
"
$entry
"
3
)
txt
=
$(
_getfield
"
$entry
"
5
)
d_api
=
$(
_getfield
"
$entry
"
6
)
_debug
"d"
"
$d
"
_debug
"txtdomain"
"
$txtdomain
"
_debug
"aliasDomain"
"
$aliasDomain
"
_debug
"txt"
"
$txt
"
_debug
"d_api"
"
$d_api
"
if
[
"
$d_api
"
=
"
$txt
"
]
;
then
d_api
=
""
fi
fi
d_api="$(_findHook "$d" dnsapi "$_currentRoot")"
_debug d_api "$d_api"
if
[
-z
"
$d_api
"
]
;
then
if
[
-z
"
$d_api
"
]
;
then
_info
"Not Found domain api file:
$d_api
"
_info
"Not Found domain api file:
$d_api
"
continue
continue
fi
fi
if
[
"
$aliasDomain
"
]
;
then
txtdomain
=
"
$aliasDomain
"
fi
(
(
if
!
.
"
$d_api
"
;
then
if
!
.
"
$d_api
"
;
then
_err
"Load file
$d_api
error. Please check your api file and try again."
_err
"Load file
$d_api
error. Please check your api file and try again."
...
@@ -2977,24 +2973,6 @@ _clearupdns() {
...
@@ -2977,24 +2973,6 @@ _clearupdns() {
return
1
return
1
fi
fi
_dns_root_d="$d"
if _startswith "$_dns_root_d" "*."; then
_dns_root_d="$(echo "$_dns_root_d" | sed 's/*.//')"
fi
_d_alias="$(_getfield "$_challenge_alias" "$_alias_index")"
_alias_index="$(_math "$_alias_index" + 1)"
_debug "_d_alias" "$_d_alias"
if [ "$_d_alias" ]; then
if _startswith "$_d_alias" "$DNS_ALIAS_PREFIX"; then
txtdomain="$(echo "$_d_alias" | sed "s/$DNS_ALIAS_PREFIX//")"
else
txtdomain="_acme-challenge.$_d_alias"
fi
else
txtdomain="_acme-challenge.$_dns_root_d"
fi
if
!
$rmcommand
"
$txtdomain
"
"
$txt
"
;
then
if
!
$rmcommand
"
$txtdomain
"
"
$txt
"
;
then
_err
"Error removing txt for domain:
$txtdomain
"
_err
"Error removing txt for domain:
$txtdomain
"
return
1
return
1
...
@@ -3463,6 +3441,113 @@ __trigger_validation() {
...
@@ -3463,6 +3441,113 @@ __trigger_validation() {
fi
fi
}
}
#endpoint domain type
_ns_lookup
()
{
_ns_ep
=
"
$1
"
_ns_domain
=
"
$2
"
_ns_type
=
"
$3
"
_debug2
"_ns_ep"
"
$_ns_ep
"
_debug2
"_ns_domain"
"
$_ns_domain
"
_debug2
"_ns_type"
"
$_ns_type
"
response
=
"
$(
_H1
=
"accept: application/dns-json"
_get
"
$_ns_ep
?name=
$_ns_domain
&type=
$_ns_type
"
)
"
_ret
=
$?
_debug2
"response"
"
$response
"
if
[
"
$_ret
"
!=
"0"
]
;
then
return
$_ret
fi
_answers
=
"
$(
echo
"
$response
"
|
tr
'{}'
'<>'
| _egrep_o
'"Answer":\[[^]]*]'
|
tr
'<>'
'\n\n'
)
"
_debug2
"_answers"
"
$_answers
"
echo
"
$_answers
"
}
#domain, type
_ns_lookup_cf
()
{
_cf_ld
=
"
$1
"
_cf_ld_type
=
"
$2
"
_cf_ep
=
"https://cloudflare-dns.com/dns-query"
_ns_lookup
"
$_cf_ep
"
"
$_cf_ld
"
"
$_cf_ld_type
"
}
#domain, type
_ns_purge_cf
()
{
_cf_d
=
"
$1
"
_cf_d_type
=
"
$2
"
_debug
"Cloudflare purge
$_cf_d_type
record for domain
$_cf_d
"
_cf_purl
=
"https://1.1.1.1/api/v1/purge?domain=
$_cf_d
&type=
$_cf_d_type
"
response
=
"
$(
_post
""
"
$_cf_purl
"
)
"
_debug2 response
"
$response
"
}
#txtdomain, alias, txt
__check_txt
()
{
_c_txtdomain
=
"
$1
"
_c_aliasdomain
=
"
$2
"
_c_txt
=
"
$3
"
_debug
"_c_txtdomain"
"
$_c_txtdomain
"
_debug
"_c_aliasdomain"
"
$_c_aliasdomain
"
_debug
"_c_txt"
"
$_c_txt
"
_answers
=
"
$(
_ns_lookup_cf
"
$_c_aliasdomain
"
TXT
)
"
_contains
"
$_answers
"
"
$_c_txt
"
}
#txtdomain
__purge_txt
()
{
_p_txtdomain
=
"
$1
"
_debug _p_txtdomain
"
$_p_txtdomain
"
_ns_purge_cf
"
$_p_txtdomain
"
"TXT"
}
#wait and check each dns entries
_check_dns_entries
()
{
_success_txt
=
","
_end_time
=
"
$(
_time
)
"
_end_time
=
"
$(
_math
"
$_end_time
"
+ 1200
)
"
#let's check no more than 20 minutes.
while
[
"
$(
_time
)
"
-le
"
$_end_time
"
]
;
do
_left
=
""
for
entry
in
$dns_entries
;
do
d
=
$(
_getfield
"
$entry
"
1
)
txtdomain
=
$(
_getfield
"
$entry
"
2
)
aliasDomain
=
$(
_getfield
"
$entry
"
3
)
txt
=
$(
_getfield
"
$entry
"
5
)
d_api
=
$(
_getfield
"
$entry
"
6
)
_debug
"d"
"
$d
"
_debug
"txtdomain"
"
$txtdomain
"
_debug
"aliasDomain"
"
$aliasDomain
"
_debug
"txt"
"
$txt
"
_debug
"d_api"
"
$d_api
"
_info
"Checking
$d
for
$aliasDomain
"
if
_contains
"
$_success_txt
"
",
$txt
,"
;
then
_info
"Already success, continue next one."
continue
fi
if
__check_txt
"
$txtdomain
"
"
$aliasDomain
"
"
$txt
"
;
then
_info
"Domain
$d
'
$aliasDomain
' success."
_success_txt
=
"
$_success_txt
,
$txt
,"
continue
fi
_left
=
1
_info
"Not valid yet, let's wait 10 seconds and check next one."
_sleep 10
__purge_txt
"
$txtdomain
"
if
[
"
$txtdomain
"
!=
"
$aliasDomain
"
]
;
then
__purge_txt
"
$aliasDomain
"
fi
done
if
[
"
$_left
"
]
;
then
_info
"Let's wait 10 seconds and check again"
.
_sleep 10
else
_info
"All success, let's return"
break
fi
done
}
#webroot, domain domainlist keylength
#webroot, domain domainlist keylength
issue
()
{
issue
()
{
if
[
-z
"
$2
"
]
;
then
if
[
-z
"
$2
"
]
;
then
...
@@ -3786,6 +3871,7 @@ $_authorizations_map"
...
@@ -3786,6 +3871,7 @@ $_authorizations_map"
done
done
_debug vlist
"
$vlist
"
_debug vlist
"
$vlist
"
#add entry
#add entry
dns_entries
=
""
dnsadded
=
""
dnsadded
=
""
ventries
=
$(
echo
"
$vlist
"
|
tr
"
$dvsep
"
' '
)
ventries
=
$(
echo
"
$vlist
"
|
tr
"
$dvsep
"
' '
)
_alias_index
=
1
_alias_index
=
1
...
@@ -3816,8 +3902,10 @@ $_authorizations_map"
...
@@ -3816,8 +3902,10 @@ $_authorizations_map"
else
else
txtdomain
=
"_acme-challenge.
$_d_alias
"
txtdomain
=
"_acme-challenge.
$_d_alias
"
fi
fi
dns_entries
=
"
${
dns_entries
}${
_dns_root_d
}${
dvsep
}
_acme-challenge.
$_dns_root_d$dvsep$txtdomain$dvsep$_currentRoot
"
else
else
txtdomain
=
"_acme-challenge.
$_dns_root_d
"
txtdomain
=
"_acme-challenge.
$_dns_root_d
"
dns_entries
=
"
${
dns_entries
}${
_dns_root_d
}${
dvsep
}
_acme-challenge.
$_dns_root_d$dvsep$dvsep$_currentRoot
"
fi
fi
_debug txtdomain
"
$txtdomain
"
_debug txtdomain
"
$txtdomain
"
txt
=
"
$(
printf
"%s"
"
$keyauthorization
"
| _digest
"sha256"
| _url_replace
)
"
txt
=
"
$(
printf
"%s"
"
$keyauthorization
"
| _digest
"sha256"
| _url_replace
)
"
...
@@ -3826,7 +3914,9 @@ $_authorizations_map"
...
@@ -3826,7 +3914,9 @@ $_authorizations_map"
d_api
=
"
$(
_findHook
"
$_dns_root_d
"
dnsapi
"
$_currentRoot
"
)
"
d_api
=
"
$(
_findHook
"
$_dns_root_d
"
dnsapi
"
$_currentRoot
"
)
"
_debug d_api
"
$d_api
"
_debug d_api
"
$d_api
"
dns_entries
=
"
$dns_entries$dvsep$txt
${
dvsep
}
$d_api
"
_debug2
"
$dns_entries
"
if
[
"
$d_api
"
]
;
then
if
[
"
$d_api
"
]
;
then
_info
"Found domain api file:
$d_api
"
_info
"Found domain api file:
$d_api
"
else
else
...
@@ -3880,15 +3970,21 @@ $_authorizations_map"
...
@@ -3880,15 +3970,21 @@ $_authorizations_map"
fi
fi
if [ "$dns
added" = '1'
]; then
if
[
"
$dns
_entries
"
]
;
then
if
[
-z
"
$Le_DNSSleep
"
]
;
then
if
[
-z
"
$Le_DNSSleep
"
]
;
then
Le_DNSSleep="$DEFAULT_DNS_SLEEP"
_info
"Let's check each dns records now. Sleep 20 seconds first."
_sleep 20
if
!
_check_dns_entries
;
then
_err
"check dns error."
_on_issue_err
"
$_post_hook
"
_clearup
return
1
fi
else
else
_savedomainconf
"Le_DNSSleep"
"
$Le_DNSSleep
"
_savedomainconf
"Le_DNSSleep"
"
$Le_DNSSleep
"
_info
"Sleep
$(
__green
$Le_DNSSleep
)
seconds for the txt records to take effect"
_sleep
"
$Le_DNSSleep
"
fi
fi
_info "Sleep $(__green $Le_DNSSleep) seconds for the txt records to take effect"
_sleep "$Le_DNSSleep"
fi
fi
NGINX_RESTORE_VLIST
=
""
NGINX_RESTORE_VLIST
=
""
...
...
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