Page MenuHomeFreeBSD

D54447.id169506.diff
No OneTemporary

D54447.id169506.diff

diff --git a/dns/Makefile b/dns/Makefile
--- 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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /dev/null
+++ b/dns/register-dnsclient/pkg-plist
@@ -0,0 +1,3 @@
+sbin/%%PORTNAME%%
+@sample etc/%%PORTNAME%%.nsupdate.sample
+etc/cron.d/%%PORTNAME%%

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 17, 4:33 PM (18 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27696968
Default Alt Text
D54447.id169506.diff (4 KB)

Event Timeline