#! /bin/sh # This source code is released into the public domain. . /usr/local/share/lfacme/init.sh # begin, done or failed ACTION=$1 # ACME method, must be dns-01. METHOD=$2 # This is the full domain name we're authorising. DOMAIN=$3 # Token name, not used for dns-01. TOKEN=$4 # The token value we need to create. AUTH=$5 if [ "$#" -ne 5 ]; then _fatal "missing arguments" fi if [ "$METHOD" != "dns-01" ]; then exit 1 fi if [ -z "$ACME_KERBEROS_KEYTAB" ]; then ACME_KERBEROS_KEYTAB="/etc/krb5.keytab" fi if ! kinit -k -t "$ACME_KERBEROS_KEYTAB" "$ACME_KERBEROS_PRINCIPAL"; then _fatal "failed to obtain a Kerberos ticket" fi # Keep removing labels from the name until we find one with nameservers. _getnameservers() { local domain="$1" local _trydomain="$domain" while ! [ -z "$_trydomain" ]; do if [ "$_trydomain" = "${_trydomain#*.}" ]; then # If there are no dots in the domain, we couldn't # find the nameservers. break fi # For CNAME records, a query for NS will return the CNAME. # Therefore we have to check we actually got NS records. local nameservers="$( dig "$_trydomain" ns +noall +answer | \ awk '$4 == "NS" { print $5 }' )" if ! [ -z "$nameservers" ]; then echo "$nameservers" return fi _trydomain="${_trydomain#*.}" done _fatal "unable to find nameservers for %s" "$_trydomain" } # Add a new record using nsupdate. _add_record() { local domain="$1" local auth="$2" nsupdate -g <