|
@@ -76,6 +76,22 @@ dns_namecheap_rm() {
|
|
|
# _sub_domain=_acme-challenge.www
|
|
|
# _domain=domain.com
|
|
|
_get_root() {
|
|
|
+ fulldomain=$1
|
|
|
+
|
|
|
+ if ! _get_root_by_getList "$fulldomain"; then
|
|
|
+ _debug "Failed domain lookup via domains.getList api call. Trying domain lookup via domains.dns.getHosts api."
|
|
|
+ # The above "getList" api will only return hosts *owned* by the calling user. However, if the calling
|
|
|
+ # user is not the owner, but still has administrative rights, we must query the getHosts api directly.
|
|
|
+ # See this comment and the official namecheap response: http://disq.us/p/1q6v9x9
|
|
|
+ if ! _get_root_by_getHosts "$fulldomain"; then
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
+_get_root_by_getList() {
|
|
|
domain=$1
|
|
|
|
|
|
if ! _namecheap_post "namecheap.domains.getList"; then
|
|
@@ -94,6 +110,10 @@ _get_root() {
|
|
|
#not valid
|
|
|
return 1
|
|
|
fi
|
|
|
+ if ! _contains "$h" "\\."; then
|
|
|
+ #not valid
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
|
|
|
if ! _contains "$response" "$h"; then
|
|
|
_debug "$h not found"
|
|
@@ -108,6 +128,31 @@ _get_root() {
|
|
|
return 1
|
|
|
}
|
|
|
|
|
|
+_get_root_by_getHosts() {
|
|
|
+ i=100
|
|
|
+ p=99
|
|
|
+
|
|
|
+ while [ $p -ne 0 ]; do
|
|
|
+
|
|
|
+ h=$(printf "%s" "$1" | cut -d . -f $i-100)
|
|
|
+ if [ -n "$h" ]; then
|
|
|
+ if _contains "$h" "\\."; then
|
|
|
+ _debug h "$h"
|
|
|
+ if _namecheap_set_tld_sld "$h"; then
|
|
|
+ _sub_domain=$(printf "%s" "$1" | cut -d . -f 1-$p)
|
|
|
+ _domain="$h"
|
|
|
+ return 0
|
|
|
+ else
|
|
|
+ _debug "$h not found"
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ i="$p"
|
|
|
+ p=$(_math "$p" - 1)
|
|
|
+ done
|
|
|
+ return 1
|
|
|
+}
|
|
|
+
|
|
|
_namecheap_set_publicip() {
|
|
|
|
|
|
if [ -z "$NAMECHEAP_SOURCEIP" ]; then
|