mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2026-08-13 12:33:30 +02:00
fix: grep -A is not portable, breaks ARI on Solaris
Solaris /usr/bin/grep has no -A ("illegal option -- A"), so _getAKI
printed an error to stderr on every cron renewal and returned empty.
The empty AKI silently corrupts the RFC 9773 ARI certID, so ARI is
never available and renewal falls back to the fixed schedule.
Split the pipeline into a testable stdin filter _extractAKI and select
the value line with a portable sed range instead.
Same fix for the two hooks that still used grep -A: dns_world4you.sh
(also replaces the GNU-only "\s" in the same expression) and
deploy/keyhelp.sh (the -A 2 window could truncate the div range that
follows it, so it is just dropped).
https://github.com/acmesh-official/acme.sh/issues/7159
This commit is contained in:
parent
830782fd1d
commit
7c12deb7ef
3 changed files with 24 additions and 5 deletions
10
acme.sh
10
acme.sh
|
|
@ -7369,10 +7369,18 @@ deactivate() {
|
|||
done
|
||||
}
|
||||
|
||||
#reads the output of "openssl x509 -text" from stdin, prints the hex AKI
|
||||
#the value is on the line right after the extension header; "grep -A" is not
|
||||
#portable (Solaris /usr/bin/grep: "illegal option -- A"), so select from the
|
||||
#header to EOF and keep the second line of that range
|
||||
_extractAKI() {
|
||||
sed -n '/X509v3 Authority Key Identifier/,$p' | _head_n 2 | _tail_n 1 | tr -d ': ' | sed "s/keyid//"
|
||||
}
|
||||
|
||||
#cert
|
||||
_getAKI() {
|
||||
_cert="$1"
|
||||
${ACME_OPENSSL_BIN:-openssl} x509 -in "$_cert" -text -noout | grep -A 1 "X509v3 Authority Key Identifier" | _tail_n 1 | tr -d ': ' | sed "s/keyid//"
|
||||
${ACME_OPENSSL_BIN:-openssl} x509 -in "$_cert" -text -noout | _extractAKI
|
||||
}
|
||||
|
||||
#cert
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ keyhelp_deploy() {
|
|||
_request_body="submit=1&certificate_name=$certificate_name&add_type=upload&text_private_key=$encoded_key&text_certificate=$encoded_ccert&text_ca_certificate=$encoded_cca"
|
||||
_H1="Cookie: $_cookie"
|
||||
_response=$(_post "$_request_body" "$DEPLOY_KEYHELP_BASEURL/index.php?page=ssl_certificates&action=add" "" "POST")
|
||||
_message=$(echo "$_response" | grep -A 2 'message-body' | sed -n '/<div class="message-body ">/,/<\/div>/{//!p;}' | sed 's/<[^>]*>//g' | sed 's/^ *//;s/ *$//')
|
||||
_message=$(echo "$_response" | sed -n '/<div class="message-body ">/,/<\/div>/{//!p;}' | sed 's/<[^>]*>//g' | sed 's/^ *//;s/ *$//')
|
||||
_info "_message" "$_message"
|
||||
if [ -z "$_message" ]; then
|
||||
_err "Fail to upload certificate."
|
||||
|
|
@ -118,7 +118,7 @@ keyhelp_deploy() {
|
|||
|
||||
_request_body="submit=1&id=$DOMAIN_ID&target_type=$target_type&path=$path&is_prefer_https=$is_prefer_https&hsts_enabled=$hsts_enabled&certificate_type=custom&certificate_id=$cert_value&enforce_https=$DEPLOY_KEYHELP_ENFORCE_HTTPS"
|
||||
_response=$(_post "$_request_body" "$DEPLOY_KEYHELP_BASEURL/index.php?page=domains&action=edit" "" "POST")
|
||||
_message=$(echo "$_response" | grep -A 2 'message-body' | sed -n '/<div class="message-body ">/,/<\/div>/{//!p;}' | sed 's/<[^>]*>//g' | sed 's/^ *//;s/ *$//')
|
||||
_message=$(echo "$_response" | sed -n '/<div class="message-body ">/,/<\/div>/{//!p;}' | sed 's/<[^>]*>//g' | sed 's/^ *//;s/ *$//')
|
||||
_info "_message" "$_message"
|
||||
if [ -z "$_message" ]; then
|
||||
_err "Fail to apply certificate."
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ dns_world4you_add() {
|
|||
if _contains "$res" "successfully"; then
|
||||
return 0
|
||||
else
|
||||
msg=$(echo "$res" | grep -A 20 'alert-notification' | grep 'class="weak-title">[^<]' | sed 's/<[^>]*>//g;s/^\s*//g')
|
||||
msg=$(_w4y_alert_msg "$res")
|
||||
if [ "$msg" = '' ]; then
|
||||
_err "Unable to add record: Unknown error"
|
||||
echo "$ret" >'error-01.html'
|
||||
|
|
@ -125,7 +125,7 @@ dns_world4you_rm() {
|
|||
if _contains "$res" "successfully"; then
|
||||
return 0
|
||||
else
|
||||
msg=$(echo "$res" | grep -A 20 'alert-notification' | grep 'class="weak-title">[^<]' | sed 's/<[^>]*>//g;s/^\s*//g')
|
||||
msg=$(_w4y_alert_msg "$res")
|
||||
if [ "$msg" = '' ]; then
|
||||
_err "Unable to remove record: Unknown error"
|
||||
echo "$ret" >'error-01.html'
|
||||
|
|
@ -145,6 +145,17 @@ dns_world4you_rm() {
|
|||
|
||||
################ Private functions ################
|
||||
|
||||
# Usage: _w4y_alert_msg <html>
|
||||
# Extracts the error text out of the alert box of a DNS page.
|
||||
# "grep -A" is not portable (Solaris /usr/bin/grep: "illegal option -- A"),
|
||||
# so select from the alert to EOF and keep the same number of lines.
|
||||
# "\s" is a GNU sed extension, use an explicit space/tab bracket instead.
|
||||
_w4y_alert_msg() {
|
||||
_w4y_tab=$(printf '\t')
|
||||
echo "$1" | sed -n '/alert-notification/,$p' | _head_n 21 |
|
||||
grep 'class="weak-title">[^<]' | sed "s/<[^>]*>//g;s/^[ $_w4y_tab]*//"
|
||||
}
|
||||
|
||||
# Usage: _login
|
||||
_login() {
|
||||
WORLD4YOU_USERNAME="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue