mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-12-26 15:02:03 +00:00
support sh
This commit is contained in:
commit
073ca4bf8d
127
acme.sh
127
acme.sh
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
VER=2.2.1
|
VER=2.2.2
|
||||||
|
|
||||||
PROJECT_NAME="acme.sh"
|
PROJECT_NAME="acme.sh"
|
||||||
|
|
||||||
@ -28,6 +28,13 @@ if [ -z "$AGREEMENT" ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_URGLY_PRINTF=""
|
||||||
|
if [ "$(printf '\x41')" != 'A' ] ; then
|
||||||
|
_URGLY_PRINTF=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
_info() {
|
_info() {
|
||||||
if [ -z "$2" ] ; then
|
if [ -z "$2" ] ; then
|
||||||
echo "[$(date)] $1"
|
echo "[$(date)] $1"
|
||||||
@ -84,18 +91,72 @@ _exists(){
|
|||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#a + b
|
||||||
|
_math(){
|
||||||
|
expr "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_h_char_2_dec() {
|
||||||
|
_ch=$1
|
||||||
|
case "${_ch}" in
|
||||||
|
a|A)
|
||||||
|
echo -n 10
|
||||||
|
;;
|
||||||
|
b|B)
|
||||||
|
echo -n 11
|
||||||
|
;;
|
||||||
|
c|C)
|
||||||
|
echo -n 12
|
||||||
|
;;
|
||||||
|
d|D)
|
||||||
|
echo -n 13
|
||||||
|
;;
|
||||||
|
e|E)
|
||||||
|
echo -n 14
|
||||||
|
;;
|
||||||
|
f|F)
|
||||||
|
echo -n 15
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -n $_ch
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_h2b() {
|
_h2b() {
|
||||||
hex=$(cat)
|
hex=$(cat)
|
||||||
i=1
|
i=1
|
||||||
j=2
|
j=2
|
||||||
|
if _exists let ; then
|
||||||
|
uselet="1"
|
||||||
|
fi
|
||||||
|
_debug uselet "$uselet"
|
||||||
|
_debug _URGLY_PRINTF "$_URGLY_PRINTF"
|
||||||
while [ '1' ] ; do
|
while [ '1' ] ; do
|
||||||
|
if [ -z "$_URGLY_PRINTF" ] ; then
|
||||||
h=$(printf $hex | cut -c $i-$j)
|
h=$(printf $hex | cut -c $i-$j)
|
||||||
if [ -z "$h" ] ; then
|
if [ -z "$h" ] ; then
|
||||||
break;
|
break;
|
||||||
fi
|
fi
|
||||||
printf "\x$h"
|
printf "\x$h"
|
||||||
let "i+=2"
|
else
|
||||||
let "j+=2"
|
ic=$(printf $hex | cut -c $i)
|
||||||
|
jc=$(printf $hex | cut -c $j)
|
||||||
|
if [ -z "$ic$jc" ] ; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
ic="$(_h_char_2_dec $ic)"
|
||||||
|
jc="$(_h_char_2_dec $jc)"
|
||||||
|
printf '\'"$(printf %o "$(_math $ic \* 16 + $jc)")"
|
||||||
|
fi
|
||||||
|
if [ "$uselet" ] ; then
|
||||||
|
let "i+=2" >/dev/null
|
||||||
|
let "j+=2" >/dev/null
|
||||||
|
else
|
||||||
|
i="$(_math $i + 2)"
|
||||||
|
j="$(_math $j + 2)"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +194,7 @@ _getfile() {
|
|||||||
_err "Can not find start line: $startline"
|
_err "Can not find start line: $startline"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
let "i+=1"
|
i="$(_math $i + 1)"
|
||||||
_debug i $i
|
_debug i $i
|
||||||
|
|
||||||
j="$(grep -n -- "$endline" $filename | cut -d : -f 1)"
|
j="$(grep -n -- "$endline" $filename | cut -d : -f 1)"
|
||||||
@ -141,7 +202,7 @@ _getfile() {
|
|||||||
_err "Can not find end line: $endline"
|
_err "Can not find end line: $endline"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
let "j-=1"
|
j="$(_math $j - 1)"
|
||||||
_debug j $j
|
_debug j $j
|
||||||
|
|
||||||
sed -n $i,${j}p "$filename"
|
sed -n $i,${j}p "$filename"
|
||||||
@ -427,7 +488,8 @@ _calcjwk() {
|
|||||||
_debug2 e "$e"
|
_debug2 e "$e"
|
||||||
|
|
||||||
modulus=$(openssl rsa -in $keyfile -modulus -noout | cut -d '=' -f 2 )
|
modulus=$(openssl rsa -in $keyfile -modulus -noout | cut -d '=' -f 2 )
|
||||||
n=$(echo $modulus| _h2b | _base64 | _urlencode )
|
_debug2 modulus "$modulus"
|
||||||
|
n=$(echo -n $modulus| _h2b | _base64 | _urlencode )
|
||||||
jwk='{"e": "'$e'", "kty": "RSA", "n": "'$n'"}'
|
jwk='{"e": "'$e'", "kty": "RSA", "n": "'$n'"}'
|
||||||
_debug2 jwk "$jwk"
|
_debug2 jwk "$jwk"
|
||||||
|
|
||||||
@ -440,28 +502,28 @@ _calcjwk() {
|
|||||||
_debug2 crv $crv
|
_debug2 crv $crv
|
||||||
|
|
||||||
pubi="$(openssl ec -in $keyfile -noout -text 2>/dev/null | grep -n pub: | cut -d : -f 1)"
|
pubi="$(openssl ec -in $keyfile -noout -text 2>/dev/null | grep -n pub: | cut -d : -f 1)"
|
||||||
|
pubi=$(_math $pubi + 1)
|
||||||
_debug2 pubi $pubi
|
_debug2 pubi $pubi
|
||||||
let "pubi=pubi+1"
|
|
||||||
|
|
||||||
pubj="$(openssl ec -in $keyfile -noout -text 2>/dev/null | grep -n "ASN1 OID:" | cut -d : -f 1)"
|
pubj="$(openssl ec -in $keyfile -noout -text 2>/dev/null | grep -n "ASN1 OID:" | cut -d : -f 1)"
|
||||||
|
pubj=$(_math $pubj + 1)
|
||||||
_debug2 pubj $pubj
|
_debug2 pubj $pubj
|
||||||
let "pubj=pubj-1"
|
|
||||||
|
|
||||||
pubtext="$(openssl ec -in $keyfile -noout -text 2>/dev/null | sed -n "$pubi,${pubj}p" | tr -d " \n\r")"
|
pubtext="$(openssl ec -in $keyfile -noout -text 2>/dev/null | sed -n "$pubi,${pubj}p" | tr -d " \n\r")"
|
||||||
_debug2 pubtext "$pubtext"
|
_debug2 pubtext "$pubtext"
|
||||||
|
|
||||||
xlen="$(printf "$pubtext" | tr -d ':' | wc -c)"
|
xlen="$(printf "$pubtext" | tr -d ':' | wc -c)"
|
||||||
let "xlen=xlen/4"
|
xlen=$(_math $xlen / 4)
|
||||||
_debug2 xlen $xlen
|
_debug2 xlen $xlen
|
||||||
|
|
||||||
let "xend=xlen+1"
|
xend=$(_math $xend + 1)
|
||||||
x="$(printf $pubtext | cut -d : -f 2-$xend)"
|
x="$(printf $pubtext | cut -d : -f 2-$xend)"
|
||||||
_debug2 x $x
|
_debug2 x $x
|
||||||
|
|
||||||
x64="$(printf $x | tr -d : | _h2b | _base64 | _urlencode)"
|
x64="$(printf $x | tr -d : | _h2b | _base64 | _urlencode)"
|
||||||
_debug2 x64 $x64
|
_debug2 x64 $x64
|
||||||
|
|
||||||
let "xend+=1"
|
xend=$(_math $xend + 1)
|
||||||
y="$(printf $pubtext | cut -d : -f $xend-10000)"
|
y="$(printf $pubtext | cut -d : -f $xend-10000)"
|
||||||
_debug2 y $y
|
_debug2 y $y
|
||||||
|
|
||||||
@ -658,12 +720,12 @@ _startserver() {
|
|||||||
_debug "_NC" "$_NC"
|
_debug "_NC" "$_NC"
|
||||||
# while true ; do
|
# while true ; do
|
||||||
if [ "$DEBUG" ] ; then
|
if [ "$DEBUG" ] ; then
|
||||||
if ! echo -e -n "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC -p $Le_HTTPPort ; then
|
if ! printf "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC -p $Le_HTTPPort ; then
|
||||||
echo -e -n "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC $Le_HTTPPort ;
|
printf "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC $Le_HTTPPort ;
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if ! echo -e -n "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC -p $Le_HTTPPort > /dev/null 2>&1; then
|
if ! printf "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC -p $Le_HTTPPort > /dev/null 2>&1; then
|
||||||
echo -e -n "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC $Le_HTTPPort > /dev/null 2>&1
|
printf "HTTP/1.1 200 OK\r\n\r\n$content" | $_NC $Le_HTTPPort > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "$?" != "0" ] ; then
|
if [ "$?" != "0" ] ; then
|
||||||
@ -1122,7 +1184,7 @@ issue() {
|
|||||||
_currentRoot="$_w"
|
_currentRoot="$_w"
|
||||||
fi
|
fi
|
||||||
_debug "_currentRoot" "$_currentRoot"
|
_debug "_currentRoot" "$_currentRoot"
|
||||||
let "_index+=1"
|
_index=$(_math $_index + 1)
|
||||||
|
|
||||||
vtype="$VTYPE_HTTP"
|
vtype="$VTYPE_HTTP"
|
||||||
if _startswith "$_currentRoot" "dns" ; then
|
if _startswith "$_currentRoot" "dns" ; then
|
||||||
@ -1317,7 +1379,7 @@ issue() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
while [ "1" ] ; do
|
while [ "1" ] ; do
|
||||||
let "waittimes+=1"
|
waittimes=$(_math $waittimes + 1)
|
||||||
if [ "$waittimes" -ge "$MAX_RETRY_TIMES" ] ; then
|
if [ "$waittimes" -ge "$MAX_RETRY_TIMES" ] ; then
|
||||||
_err "$d:Timeout"
|
_err "$d:Timeout"
|
||||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||||
@ -1424,7 +1486,7 @@ issue() {
|
|||||||
|
|
||||||
_setopt "$DOMAIN_CONF" "Le_RenewalDays" "=" "$Le_RenewalDays"
|
_setopt "$DOMAIN_CONF" "Le_RenewalDays" "=" "$Le_RenewalDays"
|
||||||
|
|
||||||
let "Le_NextRenewTime=Le_CertCreateTime+Le_RenewalDays*24*60*60"
|
Le_NextRenewTime=$(_math $Le_CertCreateTime + $Le_RenewalDays \* 24 \* 60 \* 60)
|
||||||
_setopt "$DOMAIN_CONF" "Le_NextRenewTime" "=" "$Le_NextRenewTime"
|
_setopt "$DOMAIN_CONF" "Le_NextRenewTime" "=" "$Le_NextRenewTime"
|
||||||
|
|
||||||
Le_NextRenewTimeStr=$( _time2str $Le_NextRenewTime )
|
Le_NextRenewTimeStr=$( _time2str $Le_NextRenewTime )
|
||||||
@ -1787,6 +1849,19 @@ _precheck() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_setShebang() {
|
||||||
|
_file="$1"
|
||||||
|
_shebang="$2"
|
||||||
|
if [ -z "$_shebang" ] ; then
|
||||||
|
_err "Usage: file shebang"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
cp "$_file" "$_file.tmp"
|
||||||
|
echo "$_shebang" > "$_file"
|
||||||
|
sed -n 2,99999p "$_file.tmp" >> "$_file"
|
||||||
|
rm -f "$_file.tmp"
|
||||||
|
}
|
||||||
|
|
||||||
install() {
|
install() {
|
||||||
|
|
||||||
if ! _initpath ; then
|
if ! _initpath ; then
|
||||||
@ -1881,6 +1956,20 @@ install() {
|
|||||||
|
|
||||||
installcronjob
|
installcronjob
|
||||||
|
|
||||||
|
if [ -z "$NO_DETECT_SH" ] ; then
|
||||||
|
#Modify shebang
|
||||||
|
if _exists bash ; then
|
||||||
|
_info "Good, bash is installed, change the shebang to use bash as prefered."
|
||||||
|
_shebang='#!/usr/bin/env bash'
|
||||||
|
_setShebang "$LE_WORKING_DIR/$PROJECT_ENTRY" "$_shebang"
|
||||||
|
if [ -d "$LE_WORKING_DIR/dnsapi" ] ; then
|
||||||
|
for _apifile in $(ls "$LE_WORKING_DIR/dnsapi/"*.sh) ; do
|
||||||
|
_setShebang "$_apifile" "$_shebang"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
_info OK
|
_info OK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -112,7 +112,7 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
p=$i
|
p=$i
|
||||||
let "i+=1"
|
i=$(expr $i + 1)
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# Cloudxns.com Domain api
|
# Cloudxns.com Domain api
|
||||||
#
|
#
|
||||||
@ -159,7 +159,7 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
p=$i
|
p=$i
|
||||||
let "i+=1"
|
i=$(expr $i + 1)
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# Dnspod.cn Domain api
|
# Dnspod.cn Domain api
|
||||||
#
|
#
|
||||||
@ -165,7 +165,7 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
p=$i
|
p=$i
|
||||||
let "i+=1"
|
i=$(expr $i + 1)
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
#Here is a sample custom api script.
|
#Here is a sample custom api script.
|
||||||
#This file name is "dns_myapi.sh"
|
#This file name is "dns_myapi.sh"
|
||||||
|
Loading…
Reference in New Issue
Block a user