2 # -*- mode: sh; tab-width: 2; indent-tabs-mode: s; coding: utf-8 -*-
4 # This is the InternetX autoDNS xml api wrapper for acme.sh
5 # Author: auerswald@gmail.com
8 # export AUTODNS_USER="username"
9 # export AUTODNS_PASSWORD="password"
10 # export AUTODNS_CONTEXT="context"
13 # acme.sh --issue --dns dns_autodns -d example.com
15 AUTODNS_API
="https://gateway.autodns.com"
24 AUTODNS_USER
="${AUTODNS_USER:-$(_readaccountconf_mutable AUTODNS_USER)}"
25 AUTODNS_PASSWORD
="${AUTODNS_PASSWORD:-$(_readaccountconf_mutable AUTODNS_PASSWORD)}"
26 AUTODNS_CONTEXT
="${AUTODNS_CONTEXT:-$(_readaccountconf_mutable AUTODNS_CONTEXT)}"
28 if [ -z "$AUTODNS_USER" ] ||
[ -z "$AUTODNS_CONTEXT" ] ||
[ -z "$AUTODNS_PASSWORD" ]; then
29 _err
"You don't specify autodns user, password and context."
33 _saveaccountconf_mutable AUTODNS_USER
"$AUTODNS_USER"
34 _saveaccountconf_mutable AUTODNS_PASSWORD
"$AUTODNS_PASSWORD"
35 _saveaccountconf_mutable AUTODNS_CONTEXT
"$AUTODNS_CONTEXT"
37 _debug
"First detect the root zone"
39 if ! _get_autodns_zone
"$fulldomain"; then
44 _debug _sub_domain
"$_sub_domain"
46 _debug _system_ns
"$_system_ns"
48 _info
"Adding TXT record"
50 autodns_response
="$(_autodns_zone_update "$_zone" "$_sub_domain" "$txtvalue" "$_system_ns")"
52 if [ "$?" -eq "0" ]; then
67 AUTODNS_USER
="${AUTODNS_USER:-$(_readaccountconf_mutable AUTODNS_USER)}"
68 AUTODNS_PASSWORD
="${AUTODNS_PASSWORD:-$(_readaccountconf_mutable AUTODNS_PASSWORD)}"
69 AUTODNS_CONTEXT
="${AUTODNS_CONTEXT:-$(_readaccountconf_mutable AUTODNS_CONTEXT)}"
71 if [ -z "$AUTODNS_USER" ] ||
[ -z "$AUTODNS_CONTEXT" ] ||
[ -z "$AUTODNS_PASSWORD" ]; then
72 _err
"You don't specify autodns user, password and context."
76 _debug
"First detect the root zone"
78 if ! _get_autodns_zone
"$fulldomain"; then
83 _debug _sub_domain
"$_sub_domain"
85 _debug _system_ns
"$_system_ns"
87 _info
"Delete TXT record"
89 autodns_response
="$(_autodns_zone_cleanup "$_zone" "$_sub_domain" "$txtvalue" "$_system_ns")"
91 if [ "$?" -eq "0" ]; then
99 #################### Private functions below ##################################
104 # _sub_domain=_acme-challenge.www
107 _get_autodns_zone
() {
114 h
=$
(printf "%s" "$domain" | cut
-d .
-f $i-100)
122 autodns_response
="$(_autodns_zone_inquire "$h")"
124 if [ "$?" -ne "0" ]; then
125 _err
"invalid domain"
129 if _contains
"$autodns_response" "<summary>1</summary>" >/dev
/null
; then
130 _zone
="$(echo "$autodns_response" | _egrep_o '<name>[^<]*</name>' | cut -d '>' -f 2 | cut -d '<' -f 1)"
131 _system_ns
="$(echo "$autodns_response" | _egrep_o '<system_ns>[^<]*</system_ns>' | cut -d '>' -f 2 | cut -d '<' -f 1)"
132 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
143 _build_request_auth_xml
() {
146 <password>%s</password>
147 <context>%s</context>
148 </auth>" "$AUTODNS_USER" "$AUTODNS_PASSWORD" "$AUTODNS_CONTEXT"
153 _build_zone_inquire_xml
() {
154 printf "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
160 <children>1</children>
165 <operator>eq</operator>
169 </request>" "$(_build_request_auth_xml)" "$1"
177 _build_zone_update_xml
() {
178 printf "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
193 <system_ns>%s</system_ns>
196 </request>" "$(_build_request_auth_xml)" "$2" "$3" "$1" "$4"
201 _autodns_zone_inquire
() {
202 request_data
="$(_build_zone_inquire_xml "$1")"
203 autodns_response
="$(_autodns_api_call "$request_data")"
206 printf "%s" "$autodns_response"
215 _autodns_zone_update
() {
216 request_data
="$(_build_zone_update_xml "$1" "$2" "$3" "$4")"
217 autodns_response
="$(_autodns_api_call "$request_data")"
220 printf "%s" "$autodns_response"
229 _autodns_zone_cleanup
() {
230 request_data
="$(_build_zone_update_xml "$1" "$2" "$3" "$4")"
231 # replace 'rr_add>' with 'rr_rem>' in request_data
232 request_data
="$(printf -- "%s
" "$request_data" | sed 's/rr_add>/rr_rem>/g')"
233 autodns_response
="$(_autodns_api_call "$request_data")"
236 printf "%s" "$autodns_response"
242 _autodns_api_call
() {
245 _debug request_data
"$request_data"
247 autodns_response
="$(_post "$request_data" "$AUTODNS_API")"
250 _debug autodns_response
"$autodns_response"
252 if [ "$ret" -ne "0" ]; then
257 if _contains
"$autodns_response" "<type>success</type>" >/dev
/null
; then
259 printf "%s" "$autodns_response"