You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.3 KiB

  1. #!/bin/bash
  2. # Here is a script to add/remove TXT records to DNS Server on Synology DSM
  3. #
  4. # Author: Arabezar aka Arkadii Zhuchenko © 13.07.2020
  5. # Great thanks to loderunner84 for the invaluable help in synowebapi research
  6. #
  7. #returns 0 means success, otherwise error.
  8. _DNS_TTL="1"
  9. ######## Public functions #####################
  10. dns_synology_dsm_add() {
  11. _info "Using API for Synology DSM - adding TXT to Synology DNS Server"
  12. fulldomain=$1
  13. txtvalue=$2
  14. _debug fulldomain "$fulldomain"
  15. _debug txtvalue "$txtvalue"
  16. maindomain="${fulldomain//_acme-challenge\./}"
  17. _debug3 maindomain "$maindomain"
  18. # SynoWebAPI call can be replaced by adding the line to the "/var/packages/DNSServer/target/named/etc/zone/master/$maindomain" file
  19. response=$(synowebapi --exec api=SYNO.DNSServer.Zone.Record method=create version=1 runner=admin \
  20. zone_name='"'"${maindomain}"'"' \
  21. domain_name='"'"${maindomain}"'"' \
  22. rr_owner='"'"${fulldomain}"\.'"' \
  23. rr_ttl='"'${_DNS_TTL}'"' \
  24. rr_type='"'"TXT"'"' \
  25. rr_info='"'"${txtvalue}"'"' 2> /dev/null)
  26. _debug3 response "$response"
  27. if [ "$(echo "$response" | jq '.success')" == true ]; then
  28. return 0
  29. fi
  30. return 1
  31. }
  32. dns_synology_dsm_rm() {
  33. _info "Using API for Synology DSM - removing TXT from Synology DNS Server"
  34. fulldomain=$1
  35. txtvalue=$2
  36. _debug fulldomain "$fulldomain"
  37. _debug txtvalue "$txtvalue"
  38. maindomain="${fulldomain//_acme-challenge\./}"
  39. _debug3 maindomain "$maindomain"
  40. response=$(synowebapi --exec api=SYNO.DNSServer.Zone.Record method=delete version=1 runner=admin \
  41. items=["{\"zone_name\":\"$maindomain\",\"domain_name\":\"$maindomain\",\"rr_owner\":\"$fulldomain.\",\"rr_type\":\"TXT\",\"rr_ttl\":\"$_DNS_TTL\",\"rr_info\":\"\\\"$txtvalue\\\"\",\"full_record\":\"$fulldomain.\t$_DNS_TTL\tTXT\t\\\"$txtvalue\\\"\"}"] 2> /dev/null)
  42. # WebAPI-call can be replaced by removing the line from the "/var/packages/DNSServer/target/named/etc/zone/master/$maindomain" file
  43. #_dns_zone_url="/var/packages/DNSServer/target/named/etc/zone/master/$maindomain"
  44. #sed -i "/^${fulldomain}.[[:blank:]]${_DNS_TTL}[[:blank:]]TXT[[:blank:]]\"${txtvalue}\"/d" "$_dns_zone_url"
  45. _debug3 response "$response"
  46. if [ "$(echo "$response" | jq '.success')" == true ]; then
  47. return 0
  48. fi
  49. return 1
  50. }