From nobody Mon Jan 12 08:50:32 2026 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dqR0n2bXzz6NHCB for ; Mon, 12 Jan 2026 08:50:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dqR0m716zz3kM6 for ; Mon, 12 Jan 2026 08:50:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768207833; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hX/Ec7zg0lHaQk3zZOz9O2dZGbTagl/Lylp0eVCttlA=; b=KHxGmI6YmrUG1sauz33rFt34i7rqJ/y2+9yUsMC3XoyK+D/G7Jy8CMqskHAl3Hges8erFB ygMr92lCd/7kMqR+oc3Vwm8pNCoDsTZhhTYeCO+rcjLJV/0R6yXBQMOOBjhJUn9NmMf9rz qYOKPh0cHtyGLX6J0dkzgPfPch8cqJPd44hr054HkIDRypxKIVicw1z2uBfKuDsQOq3nPU G7ZObBtQ+ZX15pt8RRentQXFXxAm9/I8ujCR/ZezpfRGgyUrqzIys6QaoF7jXABbjhYp0H 5vuLXjgdDGeIxnvNR9OY0/o4pC0x8C+IKMKtZtFJOCd6ZKTg/Jhj4ap8Ahfq6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768207833; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hX/Ec7zg0lHaQk3zZOz9O2dZGbTagl/Lylp0eVCttlA=; b=iLnnH87PDepu8VBz967lk9/35lUIMCFqt0XsOlBrsTpALgcafw5+baoxHQA8OcAUxUAfDW 4ljzJ6W69GLnugJnf8XXlNeT+tUF/TOJsUXaGFWcgcZxnv4O8XpXf+6TEdqH+ojZ0VU5wm XWDT3vGRe211qi6tCuBsImTIQa58DBTglwUCrbMQMN+qyeS44XNTC2Yq6oXfQKY/npIzFR VH5Q7UwfO5BHzKZvr4TUEoiQjdsznW0MYjvJummVFuCRPLQC1Yqduxh/92NHzgTS5NzGOq H9hYYc6Fk0FoKQeJw7QIQHctt4iF1c6R62dXD0H895qdCUNoH0wdAH6lpGgONQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768207833; a=rsa-sha256; cv=none; b=W8uTrCfmf1uKVP93V0418iKz4ICyUHsmBrPzBQIgLbWlTv3q3FSD2LkYWUNZTbJSlWCQVT 2pZ0DMp9FH5c/iaTFnFa4ER316zrRD/g6fXNBzYyjvasqS3ZzAu3q8p/wXgI5qWMIvnMKK oVVdQkrHrfHlAYOCV9ShMB99MziQwCm1lN61Hx8rGE9XbFSIwLnerM4NPolBcHEDtVDrFj 14joQrVGy+6W8vA8aMJxAdqm6FfzzXdy8RsmH6JnWNOsOavWbtDkDMRswEmJ4bKwMMZV11 2aaRkrZz3CKIbTHdicEpZV+0Sta3PW9lqtJSeD3xNMuNobJDyZFW7VH173oU1Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dqR0m6Ds7z3pP for ; Mon, 12 Jan 2026 08:50:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id cf3b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 12 Jan 2026 08:50:32 +0000 To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Michael Osipov Subject: git: 935d6bded138 - main - [NEW PORT] dns/register-dnsclient Dynamically register hostnames with a DNS server using GSS-TSIG List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-ports-main@freebsd.org Sender: owner-dev-commits-ports-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: michaelo X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 935d6bded1381342a77b69f341967928b5299329 Auto-Submitted: auto-generated Date: Mon, 12 Jan 2026 08:50:32 +0000 Message-Id: <6964b5d8.cf3b.17a90888@gitrepo.freebsd.org> The branch main has been updated by michaelo: URL: https://cgit.FreeBSD.org/ports/commit/?id=935d6bded1381342a77b69f341967928b5299329 commit 935d6bded1381342a77b69f341967928b5299329 Author: Michael Osipov AuthorDate: 2026-01-01 21:48:28 +0000 Commit: Michael Osipov 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 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%%