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.

123 lines
4.2 KiB

8 years ago
8 years ago
  1. #!/usr/bin/env sh
  2. ######## Public functions #####################
  3. #Usage: dns_nsupdate_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
  4. dns_nsupdate_add() {
  5. fulldomain=$1
  6. txtvalue=$2
  7. NSUPDATE_SERVER="${NSUPDATE_SERVER:-$(_readaccountconf_mutable NSUPDATE_SERVER)}"
  8. NSUPDATE_SERVER_PORT="${NSUPDATE_SERVER_PORT:-$(_readaccountconf_mutable NSUPDATE_SERVER_PORT)}"
  9. NSUPDATE_KEY="${NSUPDATE_KEY:-$(_readaccountconf_mutable NSUPDATE_KEY)}"
  10. NSUPDATE_ZONE="${NSUPDATE_ZONE:-$(_readaccountconf_mutable NSUPDATE_ZONE)}"
  11. NSUPDATE_CNAME_ZONE="${NSUPDATE_CNAME_ZONE:-$(_readaccountconf_mutable NSUPDATE_CNAME_ZONE)}"
  12. _checkKeyFile || return 1
  13. # save the dns server and key to the account conf file.
  14. _saveaccountconf_mutable NSUPDATE_SERVER "${NSUPDATE_SERVER}"
  15. _saveaccountconf_mutable NSUPDATE_SERVER_PORT "${NSUPDATE_SERVER_PORT}"
  16. _saveaccountconf_mutable NSUPDATE_KEY "${NSUPDATE_KEY}"
  17. _saveaccountconf_mutable NSUPDATE_ZONE "${NSUPDATE_ZONE}"
  18. _saveaccountconf_mutable NSUPDATE_CNAME_ZONE "${NSUPDATE_CNAME_ZONE}"
  19. [ -n "${NSUPDATE_SERVER}" ] || NSUPDATE_SERVER="localhost"
  20. [ -n "${NSUPDATE_SERVER_PORT}" ] || NSUPDATE_SERVER_PORT=53
  21. if [ -n "${NSUPDATE_CNAME_ZONE}" ]; then
  22. _info "adding _acme-challenge.${NSUPDATE_CNAME_ZONE}. 60 in txt \"${txtvalue}\""
  23. _info "the record ${fulldomain}. must be a CNAME to this record for validation to succeed"
  24. else
  25. _info "adding ${fulldomain}. 60 in txt \"${txtvalue}\""
  26. fi
  27. [ -n "$DEBUG" ] && [ "$DEBUG" -ge "$DEBUG_LEVEL_1" ] && nsdebug="-d"
  28. [ -n "$DEBUG" ] && [ "$DEBUG" -ge "$DEBUG_LEVEL_2" ] && nsdebug="-D"
  29. if [ -n "${NSUPDATE_CNAME_ZONE}" ]; then
  30. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  31. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  32. zone ${NSUPDATE_CNAME_ZONE}.
  33. update add _acme-challenge.${NSUPDATE_CNAME_ZONE}. 60 in txt "${txtvalue}"
  34. send
  35. EOF
  36. elif [ -n "${NSUPDATE_ZONE}" ]; then
  37. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  38. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  39. zone ${NSUPDATE_ZONE}.
  40. update add ${fulldomain}. 60 in txt "${txtvalue}"
  41. send
  42. EOF
  43. else
  44. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  45. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  46. update add ${fulldomain}. 60 in txt "${txtvalue}"
  47. send
  48. EOF
  49. fi
  50. if [ $? -ne 0 ]; then
  51. _err "error updating domain"
  52. return 1
  53. fi
  54. return 0
  55. }
  56. #Usage: dns_nsupdate_rm _acme-challenge.www.domain.com
  57. dns_nsupdate_rm() {
  58. fulldomain=$1
  59. NSUPDATE_SERVER="${NSUPDATE_SERVER:-$(_readaccountconf_mutable NSUPDATE_SERVER)}"
  60. NSUPDATE_SERVER_PORT="${NSUPDATE_SERVER_PORT:-$(_readaccountconf_mutable NSUPDATE_SERVER_PORT)}"
  61. NSUPDATE_KEY="${NSUPDATE_KEY:-$(_readaccountconf_mutable NSUPDATE_KEY)}"
  62. NSUPDATE_ZONE="${NSUPDATE_ZONE:-$(_readaccountconf_mutable NSUPDATE_ZONE)}"
  63. _checkKeyFile || return 1
  64. [ -n "${NSUPDATE_SERVER}" ] || NSUPDATE_SERVER="localhost"
  65. [ -n "${NSUPDATE_SERVER_PORT}" ] || NSUPDATE_SERVER_PORT=53
  66. if [ -n "${NSUPDATE_CNAME_ZONE}" ]; then
  67. _info "removing _acme-challenge.${NSUPDATE_CNAME_ZONE}. txt"
  68. else
  69. _info "removing ${fulldomain}. txt"
  70. fi
  71. [ -n "$DEBUG" ] && [ "$DEBUG" -ge "$DEBUG_LEVEL_1" ] && nsdebug="-d"
  72. [ -n "$DEBUG" ] && [ "$DEBUG" -ge "$DEBUG_LEVEL_2" ] && nsdebug="-D"
  73. if [ -n "${NSUPDATE_CNAME_ZONE}" ]; then
  74. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  75. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  76. update delete _acme-challenge.${NSUPDATE_CNAME_ZONE}. txt
  77. zone ${NSUPDATE_CNAME_ZONE}.
  78. send
  79. EOF
  80. elif [ -n "${NSUPDATE_ZONE}" ]; then
  81. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  82. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  83. update delete ${fulldomain}. txt
  84. zone ${NSUPDATE_ZONE}.
  85. send
  86. EOF
  87. else
  88. nsupdate -k "${NSUPDATE_KEY}" $nsdebug <<EOF
  89. server ${NSUPDATE_SERVER} ${NSUPDATE_SERVER_PORT}
  90. update delete ${fulldomain}. txt
  91. send
  92. EOF
  93. fi
  94. if [ $? -ne 0 ]; then
  95. _err "error updating domain"
  96. return 1
  97. fi
  98. return 0
  99. }
  100. #################### Private functions below ##################################
  101. _checkKeyFile() {
  102. if [ -z "${NSUPDATE_KEY}" ]; then
  103. _err "you must specify a path to the nsupdate key file"
  104. return 1
  105. fi
  106. if [ ! -r "${NSUPDATE_KEY}" ]; then
  107. _err "key ${NSUPDATE_KEY} is unreadable"
  108. return 1
  109. fi
  110. }