2 # -*- mode: sh; tab-width: 2; indent-tabs-mode: s; coding: utf-8 -*-
7 # Completly based on the autoDNS xml api wrapper by auerswald@gmail.com
9 # export SCHLUNDTECH_USER="username"
10 # export SCHLUNDTECH_PASSWORD="password"
13 # acme.sh --issue --dns dns_schlundtech -d example.com
15 SCHLUNDTECH_API
="https://gateway.schlundtech.de"
20 dns_schlundtech_add
() {
24 SCHLUNDTECH_USER
="${SCHLUNDTECH_USER:-$(_readaccountconf_mutable SCHLUNDTECH_USER)}"
25 SCHLUNDTECH_PASSWORD
="${SCHLUNDTECH_PASSWORD:-$(_readaccountconf_mutable SCHLUNDTECH_PASSWORD)}"
27 if [ -z "$SCHLUNDTECH_USER" ] ||
[ -z "$SCHLUNDTECH_PASSWORD" ]; then
28 _err
"You didn't specify schlundtech user and password."
32 _saveaccountconf_mutable SCHLUNDTECH_USER
"$SCHLUNDTECH_USER"
33 _saveaccountconf_mutable SCHLUNDTECH_PASSWORD
"$SCHLUNDTECH_PASSWORD"
35 _debug
"First detect the root zone"
37 if ! _get_autodns_zone
"$fulldomain"; then
42 _debug _sub_domain
"$_sub_domain"
44 _debug _system_ns
"$_system_ns"
46 _info
"Adding TXT record"
48 autodns_response
="$(_autodns_zone_update "$_zone" "$_sub_domain" "$txtvalue" "$_system_ns")"
50 if [ "$?" -eq "0" ]; then
61 dns_schlundtech_rm
() {
65 SCHLUNDTECH_USER
="${SCHLUNDTECH_USER:-$(_readaccountconf_mutable SCHLUNDTECH_USER)}"
66 SCHLUNDTECH_PASSWORD
="${SCHLUNDTECH_PASSWORD:-$(_readaccountconf_mutable SCHLUNDTECH_PASSWORD)}"
68 if [ -z "$SCHLUNDTECH_USER" ] ||
[ -z "$SCHLUNDTECH_PASSWORD" ]; then
69 _err
"You didn't specify schlundtech user and password."
73 _debug
"First detect the root zone"
75 if ! _get_autodns_zone
"$fulldomain"; then
80 _debug _sub_domain
"$_sub_domain"
82 _debug _system_ns
"$_system_ns"
84 _info
"Delete TXT record"
86 autodns_response
="$(_autodns_zone_cleanup "$_zone" "$_sub_domain" "$txtvalue" "$_system_ns")"
88 if [ "$?" -eq "0" ]; then
96 #################### Private functions below ##################################
101 # _sub_domain=_acme-challenge.www
104 _get_autodns_zone
() {
111 h
=$
(printf "%s" "$domain" | cut
-d .
-f $i-100)
119 autodns_response
="$(_autodns_zone_inquire "$h")"
121 if [ "$?" -ne "0" ]; then
122 _err
"invalid domain"
126 if _contains
"$autodns_response" "<summary>1</summary>" >/dev
/null
; then
127 _zone
="$(echo "$autodns_response" | _egrep_o '<name>[^<]*</name>' | cut -d '>' -f 2 | cut -d '<' -f 1)"
128 _system_ns
="$(echo "$autodns_response" | _egrep_o '<system_ns>[^<]*</system_ns>' | cut -d '>' -f 2 | cut -d '<' -f 1)"
129 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
140 _build_request_auth_xml
() {
143 <password>%s</password>
144 <context>10</context>
145 </auth>" "$SCHLUNDTECH_USER" "$SCHLUNDTECH_PASSWORD"
150 _build_zone_inquire_xml
() {
151 printf "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
157 <children>1</children>
162 <operator>eq</operator>
166 </request>" "$(_build_request_auth_xml)" "$1"
174 _build_zone_update_xml
() {
175 printf "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
190 <system_ns>%s</system_ns>
193 </request>" "$(_build_request_auth_xml)" "$2" "$3" "$1" "$4"
198 _autodns_zone_inquire
() {
199 request_data
="$(_build_zone_inquire_xml "$1")"
200 autodns_response
="$(_autodns_api_call "$request_data")"
203 printf "%s" "$autodns_response"
212 _autodns_zone_update
() {
213 request_data
="$(_build_zone_update_xml "$1" "$2" "$3" "$4")"
214 autodns_response
="$(_autodns_api_call "$request_data")"
217 printf "%s" "$autodns_response"
226 _autodns_zone_cleanup
() {
227 request_data
="$(_build_zone_update_xml "$1" "$2" "$3" "$4")"
228 # replace 'rr_add>' with 'rr_rem>' in request_data
229 request_data
="$(printf -- "%s
" "$request_data" | sed 's/rr_add>/rr_rem>/g')"
230 autodns_response
="$(_autodns_api_call "$request_data")"
233 printf "%s" "$autodns_response"
239 _autodns_api_call
() {
242 _debug request_data
"$request_data"
244 autodns_response
="$(_post "$request_data" "$SCHLUNDTECH_API")"
247 _debug autodns_response
"$autodns_response"
249 if [ "$ret" -ne "0" ]; then
254 if _contains
"$autodns_response" "<type>success</type>" >/dev
/null
; then
256 printf "%s" "$autodns_response"