Date: Mon, 12 Jan 2026 08:50:32 +0000 From: Michael Osipov <michaelo@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 935d6bded138 - main - [NEW PORT] dns/register-dnsclient Dynamically register hostnames with a DNS server using GSS-TSIG Message-ID: <6964b5d8.cf3b.17a90888@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by michaelo: URL: https://cgit.FreeBSD.org/ports/commit/?id=935d6bded1381342a77b69f341967928b5299329 commit 935d6bded1381342a77b69f341967928b5299329 Author: Michael Osipov <michaelo@FreeBSD.org> AuthorDate: 2026-01-01 21:48:28 +0000 Commit: Michael Osipov <michaelo@FreeBSD.org> CommitDate: 2026-01-12 08:49:40 +0000 [NEW PORT] dns/register-dnsclient Dynamically register hostnames with a DNS server using GSS-TSIG Differential Revision: https://reviews.freebsd.org/D54447 --- dns/Makefile | 1 + dns/register-dnsclient/Makefile | 35 ++++++++++++ dns/register-dnsclient/files/crontab.in | 1 + dns/register-dnsclient/files/pkg-install.in | 21 +++++++ dns/register-dnsclient/files/register-dnsclient.in | 64 ++++++++++++++++++++++ .../files/register-dnsclient.nsupdate.sample | 5 ++ dns/register-dnsclient/pkg-descr | 2 + dns/register-dnsclient/pkg-plist | 3 + 8 files changed, 132 insertions(+) diff --git a/dns/Makefile b/dns/Makefile index 190723bd4586..afb718d62c0f 100644 --- a/dns/Makefile +++ b/dns/Makefile @@ -209,6 +209,7 @@ SUBDIR += rbllookup SUBDIR += rbllookup-ng SUBDIR += rdap + SUBDIR += register-dnsclient SUBDIR += renewck SUBDIR += rpsl2acl SUBDIR += rubygem-dnsruby diff --git a/dns/register-dnsclient/Makefile b/dns/register-dnsclient/Makefile new file mode 100644 index 000000000000..fec4660ba51a --- /dev/null +++ b/dns/register-dnsclient/Makefile @@ -0,0 +1,35 @@ +PORTNAME= register-dnsclient +PORTVERSION= 20260101 +CATEGORIES= dns +DISTFILES= + +MAINTAINER= michaelo@FreeBSD.org +COMMENT= Dynamically register hostnames with a DNS server using GSS-TSIG + +LICENSE= APACHE20 + +RUN_DEPENDS= nsupdate:dns/bind-tools + +NO_ARCH= yes +NO_BUILD= yes + +SUB_FILES= crontab pkg-install ${PORTNAME} +SUB_LIST= PORTNAME=${PORTNAME} GSSAPIBASE=${GSSAPIBASEDIR} + +PLIST_SUB= PORTNAME=${PORTNAME} + +OPTIONS_DEFAULT= GSSAPI_BASE +OPTIONS_SINGLE= GSSAPI +OPTIONS_SINGLE_GSSAPI= GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT + +GSSAPI_BASE_USES= gssapi +GSSAPI_HEIMDAL_USES= gssapi:heimdal +GSSAPI_MIT_USES= gssapi:mit + +do-install: + @${MKDIR} ${STAGEDIR}${PREFIX}/etc/cron.d + ${INSTALL_SCRIPT} ${WRKDIR}/${PORTNAME} ${STAGEDIR}${PREFIX}/sbin + ${INSTALL_DATA} ${FILESDIR}/${PORTNAME}.nsupdate.sample ${STAGEDIR}${PREFIX}/etc + ${INSTALL_DATA} ${WRKDIR}/crontab ${STAGEDIR}${PREFIX}/etc/cron.d/${PORTNAME} + +.include <bsd.port.mk> diff --git a/dns/register-dnsclient/files/crontab.in b/dns/register-dnsclient/files/crontab.in new file mode 100644 index 000000000000..410e7f8e30b2 --- /dev/null +++ b/dns/register-dnsclient/files/crontab.in @@ -0,0 +1 @@ +@daily root %%LOCALBASE%%/sbin/%%PORTNAME%% diff --git a/dns/register-dnsclient/files/pkg-install.in b/dns/register-dnsclient/files/pkg-install.in new file mode 100644 index 000000000000..5a7956ec7d1a --- /dev/null +++ b/dns/register-dnsclient/files/pkg-install.in @@ -0,0 +1,21 @@ +#!/bin/sh + +PREFIX=${PKG_PREFIX:-%%LOCALBASE%%} + +err() { + echo "$@" >&2 + exit 1 +} + +case $2 in + POST-INSTALL) + DOMAIN=$(hostname -d) + HOSTNAME=$(hostname -f) + PRIMARY_IF=$(route -n get default | awk '/interface:/{print $2}') + [ -z "$PRIMARY_IF" ] && err "Could not determine primary interface (no default route)" + PRIMARY_IP=$(ifconfig "$PRIMARY_IF" inet | awk '/inet /{print $2; exit}') + [ -z "$PRIMARY_IP" ] && err "No IPv4 address found on $PRIMARY_IF" + echo "Updating $PREFIX/etc/%%PORTNAME%%.nsupdate with your hostname ($HOSTNAME) and primary IPv4 address ($PRIMARY_IP)" + sed -i "" -e "s#%%ZONE%%#$DOMAIN#" -e "s#%%HOSTNAME%%#$HOSTNAME#" -e "s#%%PRIMARY_IP%%#$PRIMARY_IP#" $PREFIX/etc/%%PORTNAME%%.nsupdate + ;; +esac diff --git a/dns/register-dnsclient/files/register-dnsclient.in b/dns/register-dnsclient/files/register-dnsclient.in new file mode 100644 index 000000000000..af2674d3aaef --- /dev/null +++ b/dns/register-dnsclient/files/register-dnsclient.in @@ -0,0 +1,64 @@ +#!/bin/sh +# %%PORTNAME%% + +name=$(basename $0) + +if [ ! -t 1 ] +then + tmp_output="$(mktemp /tmp/$name.XXXXXXXXXX)" + exec 3>&1 4>&2 + exec > $tmp_output 2>&1 +fi + +clean_exit() { + local rc=$1 + + if [ ! -t 1 ] + then + exec 1>&3 3>&- + exec 2>&4 4>&- + if [ $rc -ne 0 ] + then + [ -s $tmp_output ] && cat $tmp_output + cp /dev/null $tmp_output + rm -f $tmp_output + exit $rc + fi + cp /dev/null $tmp_output + rm -f $tmp_output + exit $rc + else + exit $rc + fi +} + +export KRB5CCNAME=/tmp/krb5cc_$name +KRB5_CLIENT_PRINCIPAL="$(hostname -s)\$" + +%%GSSAPIBASE%%/bin/kinit -k $KRB5_CLIENT_PRINCIPAL +rc=$? +if [ $rc -ne 0 ] +then + KRB5_CLIENT_PRINCIPAL="$(hostname -s | tr \"[:lower:]\" \"[:upper:]\")\$" + >&2 echo "$name: retrying with $KRB5_CLIENT_PRINCIPAL" + %%GSSAPIBASE%%/bin/kinit -k $KRB5_CLIENT_PRINCIPAL + rc=$? + if [ $rc -ne 0 ] + then + >&2 echo "$name: kinit failed" + rc=1 + fi +fi + +[ $rc -ne 0 ] && clean_exit $rc + +%%LOCALBASE%%/bin/nsupdate -g %%LOCALBASE%%/etc/$name.nsupdate +rc=$? +if [ $rc -ne 0 ] +then + >&2 echo "$name: nsupdate failed" + rc=2 +fi + +clean_exit $rc + diff --git a/dns/register-dnsclient/files/register-dnsclient.nsupdate.sample b/dns/register-dnsclient/files/register-dnsclient.nsupdate.sample new file mode 100644 index 000000000000..2ba397ac9f4b --- /dev/null +++ b/dns/register-dnsclient/files/register-dnsclient.nsupdate.sample @@ -0,0 +1,5 @@ +zone %%ZONE%% +update delete %%HOSTNAME%%. A +update add %%HOSTNAME%%. 3600 A %%PRIMARY_IP%% +send + diff --git a/dns/register-dnsclient/pkg-descr b/dns/register-dnsclient/pkg-descr new file mode 100644 index 000000000000..cde890534085 --- /dev/null +++ b/dns/register-dnsclient/pkg-descr @@ -0,0 +1,2 @@ +Dynamically register hostnames with a DNS server like Active Directory DNS +using GSS-TSIG. diff --git a/dns/register-dnsclient/pkg-plist b/dns/register-dnsclient/pkg-plist new file mode 100644 index 000000000000..94624321430d --- /dev/null +++ b/dns/register-dnsclient/pkg-plist @@ -0,0 +1,3 @@ +sbin/%%PORTNAME%% +@sample etc/%%PORTNAME%%.nsupdate.sample +etc/cron.d/%%PORTNAME%%home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6964b5d8.cf3b.17a90888>
