Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142166259
D54447.id169506.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D54447.id169506.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D54447: [NEW PORT] dns/register-dnsclient Dynamically register hostnames with a DNS server using GSS‑TSIG
Attached
Detach File
Event Timeline
Log In to Comment