98 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
#!/usr/bin/env sh
 | 
						|
 | 
						|
########  Public functions #####################
 | 
						|
 | 
						|
#Usage: dns_knot_add   _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 | 
						|
dns_knot_add() {
 | 
						|
  fulldomain=$1
 | 
						|
  txtvalue=$2
 | 
						|
  _checkKey || return 1
 | 
						|
  [ -n "${KNOT_SERVER}" ] || KNOT_SERVER="localhost"
 | 
						|
  # save the dns server and key to the account.conf file.
 | 
						|
  _saveaccountconf KNOT_SERVER "${KNOT_SERVER}"
 | 
						|
  _saveaccountconf KNOT_KEY "${KNOT_KEY}"
 | 
						|
 | 
						|
  if ! _get_root "$fulldomain"; then
 | 
						|
    _err "Domain does not exist."
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
 | 
						|
  _info "Adding ${fulldomain}. 60 TXT \"${txtvalue}\""
 | 
						|
 | 
						|
  knsupdate <<EOF
 | 
						|
server ${KNOT_SERVER}
 | 
						|
key ${KNOT_KEY}
 | 
						|
zone ${_domain}.
 | 
						|
update add ${fulldomain}. 60 TXT "${txtvalue}"
 | 
						|
send
 | 
						|
quit
 | 
						|
EOF
 | 
						|
 | 
						|
  if [ $? -ne 0 ]; then
 | 
						|
    _err "Error updating domain."
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
 | 
						|
  _info "Domain TXT record successfully added."
 | 
						|
  return 0
 | 
						|
}
 | 
						|
 | 
						|
#Usage: dns_knot_rm   _acme-challenge.www.domain.com
 | 
						|
dns_knot_rm() {
 | 
						|
  fulldomain=$1
 | 
						|
  _checkKey || return 1
 | 
						|
  [ -n "${KNOT_SERVER}" ] || KNOT_SERVER="localhost"
 | 
						|
 | 
						|
  if ! _get_root "$fulldomain"; then
 | 
						|
    _err "Domain does not exist."
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
 | 
						|
  _info "Removing ${fulldomain}. TXT"
 | 
						|
 | 
						|
  knsupdate <<EOF
 | 
						|
server ${KNOT_SERVER}
 | 
						|
key ${KNOT_KEY}
 | 
						|
zone ${_domain}.
 | 
						|
update del ${fulldomain}. TXT
 | 
						|
send
 | 
						|
quit
 | 
						|
EOF
 | 
						|
 | 
						|
  if [ $? -ne 0 ]; then
 | 
						|
    _err "error updating domain"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
 | 
						|
  _info "Domain TXT record successfully deleted."
 | 
						|
  return 0
 | 
						|
}
 | 
						|
 | 
						|
####################  Private functions below ##################################
 | 
						|
# _acme-challenge.www.domain.com
 | 
						|
# returns
 | 
						|
# _domain=domain.com
 | 
						|
_get_root() {
 | 
						|
  domain=$1
 | 
						|
  i="$(echo "$fulldomain" | tr '.' ' ' | wc -w)"
 | 
						|
  i=$(_math "$i" - 1)
 | 
						|
 | 
						|
  while true; do
 | 
						|
    h=$(printf "%s" "$domain" | cut -d . -f "$i"-100)
 | 
						|
    if [ -z "$h" ]; then
 | 
						|
      return 1
 | 
						|
    fi
 | 
						|
    _domain="$h"
 | 
						|
    return 0
 | 
						|
  done
 | 
						|
  _debug "$domain not found"
 | 
						|
  return 1
 | 
						|
}
 | 
						|
 | 
						|
_checkKey() {
 | 
						|
  if [ -z "${KNOT_KEY}" ]; then
 | 
						|
    _err "You must specify a TSIG key to authenticate the request."
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
}
 |