Download raw body.
[update] net/ddclient 4.0.0
Still working well for me in production with Gandi.
Morgan
On Mon, Feb 2, 2026 at 07:54 Brent Cook <busterb@gmail.com> wrote:
> This works well for me, needed an updated ddclient for porkbun support.
>
> ok bcook@
>
> On Thu, Jan 15, 2026 at 3:32 PM Stuart Henderson <stu@spacehopper.org>
> wrote:
>
>> nobody reported any problems. only positive report was from Morgan
>> so I think it would make sense to commit this to get more testing,
>> we can always backout if there's a problem. ok?
>>
>> On 2026/01/07 10:58, Stuart Henderson wrote:
>> > On 2026/01/06 17:44, Morgan Aldridge wrote:
>> > > Updated to latest version 4.0.0. Tested with Gandi protocol.
>> > >
>> > > I've attached to prevent my MUA breaking the diff.
>> > >
>> > > It looks like Pascal's 3.11.2 patch[0] from 2024-03-01 (attached for
>> > > reference; see questions below) never got any feedback and the 3.10.0
>> > > patch[1] (not attached) was never committed (only one OK from sdk@?)
>> > >
>> > > The 3.11.2 patch still applies and builds for me, but I didn't
>> run-test
>> > > it as I need 4.0.0 for some auth changes in the Gandi protocol. I did
>> > > notice that it restores the use of daemon class in PLIST's @newuser,
>> > > which ajacoutot@'s commit in r1.29 explicitly removed.
>> > >
>> > > The daemon class was also restored in the PLIST in my 4.0.0 patch
>> > > when I ran `make plist`. The order of some of the samples also
>> > > differs from Pascal's 3.11.2 patch, which looks to result in slightly
>> > > different file permissions for installed examples.
>> > >
>> > > Should I manually re-order the PLIST and remove the daemon class?
>> >
>> > update-plist shouldn't touch the class, so not sure what happened there.
>> > it should be removed.
>> >
>> > > +CONFIGURE_STYLE=gnu autoreconf
>> >
>> > just autoreconf is enough
>> >
>> > > +AUTOMAKE_VERSION= 1.12
>> > > +AUTOCONF_VERSION= 2.63
>> >
>> > hardly any ports use those old versions - probably only when upstream
>> > already provided configure scripts and we're patching the input files,
>> > so we want the same version for comparison. that doesn't apply here so
>> > use versions which are more likely to be installed already (easier for
>> > manual builds, less churn in bulks).
>> >
>> > > +SYSCONFDIR= ${BASESYSCONFDIR}/ddclient
>> >
>> > upstream changed things in 4.0 so that doesn't work properly (looks in
>> > /etc/ddclient/ddclient), just drop it
>> >
>> > > +MAKE_ENV= runstatedir=/var/run/ddclient
>> >
>> > doesn't seem to do anything. set it via CONFIGURE_ARGS instead.
>> >
>> > > +FAKE_FLAGS= sysconfdir=${PREFIX}/share/examples
>> > > +
>> > > +BUILD_DEPENDS= net/curl
>> >
>> > no need for the BDEP, just pass in the path via CONFIGURE_ARGS
>> >
>> > > +RUN_DEPENDS= net/curl \
>> > > net/p5-IO-Socket-INET6 \
>> > > security/p5-IO-Socket-SSL
>> >
>> > it uses curl instead of the other deps (see changelog), so drop them
>> >
>> > > -NO_BUILD= Yes
>> > > -NO_TEST= Yes
>> >
>> > missing some test deps (there's one that we don't have in ports,
>> > HTTP::Daemon::SSL, but most tests don't need it)
>> >
>> > > post-extract:
>> > > - @sed -i -e "s,/var/cache/ddclient/,/var/db/ddclient/,g;" \
>> > > - -e "s,/etc/ddclient/,${SYSCONFDIR}/ddclient/,g" \
>> > > - ${WRKSRC}/ddclient
>> > ..
>> > > + @sed -i -e "s,/cache/ddclient,/db/ddclient,g" \
>> > > + ${WRKSRC}/{ddclient.in,Makefile.am}
>> >
>> > better use a standard patch rather than sed here.
>> >
>> > how's this diff instead? I don't have any ddns stuff for runtime tests
>> > but 'make test' looks promising.
>> >
>> > Index: Makefile
>> > ===================================================================
>> > RCS file: /cvs/ports/net/ddclient/Makefile,v
>> > diff -u -p -r1.29 Makefile
>> > --- Makefile 8 Nov 2022 11:14:54 -0000 1.29
>> > +++ Makefile 7 Jan 2026 10:54:35 -0000
>> > @@ -2,8 +2,7 @@ COMMENT= update client for dynamic DNS s
>> >
>> > GH_ACCOUNT= ddclient
>> > GH_PROJECT= ddclient
>> > -GH_TAGNAME= v3.9.1
>> > -REVISION= 0
>> > +GH_TAGNAME= v4.0.0
>> >
>> > CATEGORIES= net
>> >
>> > @@ -12,30 +11,25 @@ HOMEPAGE= https://ddclient.net/
>> > # GPLv2+
>> > PERMIT_PACKAGE= Yes
>> >
>> > -RUN_DEPENDS= devel/p5-Data-Validate-IP \
>> > - net/p5-IO-Socket-INET6 \
>> > - security/p5-IO-Socket-SSL
>> > +CONFIGURE_STYLE= autoreconf
>> > +AUTOCONF_VERSION= 2.71
>> > +AUTOMAKE_VERSION= 1.16
>> > +
>> > +CONFIGURE_ARGS= --with-curl=${LOCALBASE}/bin/curl \
>> > + --runstatedir=/var/run/ddclient
>> > +
>> > +FAKE_FLAGS= sysconfdir=${PREFIX}/share/examples
>> > +
>> > +RUN_DEPENDS= net/curl
>> > +TEST_DEPENDS= ${RUN_DEPENDS} \
>> > + devel/p5-Test-MockModule \
>> > + devel/p5-Test-Warnings \
>> > + net/p5-Test-TCP \
>> > + www/p5-HTTP-Daemon \
>> > + www/p5-HTTP-Message \
>> > + www/p5-Plack \
>> > + www/p5-URI
>> >
>> > -NO_BUILD= Yes
>> > -NO_TEST= Yes
>> > PKG_ARCH= *
>> > -
>> > -SAMPLES= sample-etc_cron.d_ddclient sample-etc_ddclient.conf \
>> > - sample-etc_dhclient-exit-hooks
>> sample-etc_dhcpc_dhcpcd-eth0.exe \
>> > - sample-etc_ppp_ip-up.local sample-ddclient-wrapper.sh
>> > -
>> > -post-extract:
>> > - @sed -i -e "s,/var/cache/ddclient/,/var/db/ddclient/,g;" \
>> > - -e "s,/etc/ddclient/,${SYSCONFDIR}/ddclient/,g" \
>> > - ${WRKSRC}/ddclient
>> > -
>> > -do-install:
>> > - ${INSTALL_SCRIPT} ${WRKSRC}/ddclient ${PREFIX}/sbin/
>> > - ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/ddclient
>> > - ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/ddclient
>> > - ${INSTALL_DATA} ${WRKSRC}/README* ${PREFIX}/share/doc/ddclient
>> > -.for i in ${SAMPLES}
>> > - ${INSTALL_DATA} ${WRKSRC}/${i} ${PREFIX}/share/examples/ddclient
>> > -.endfor
>> >
>> > .include <bsd.port.mk>
>> > Index: distinfo
>> > ===================================================================
>> > RCS file: /cvs/ports/net/ddclient/distinfo,v
>> > diff -u -p -r1.12 distinfo
>> > --- distinfo 17 Jan 2021 15:46:53 -0000 1.12
>> > +++ distinfo 7 Jan 2026 10:54:35 -0000
>> > @@ -1,2 +1,2 @@
>> > -SHA256 (ddclient-3.9.1.tar.gz) =
>> 5JaeFcxJH8Ur3NZJ1MKw5LG/DJ+duiNHHGNIcazFJHA=
>> > -SIZE (ddclient-3.9.1.tar.gz) = 63469
>> > +SHA256 (ddclient-4.0.0.tar.gz) =
>> SzfJmsABEQLX22Lx7Of/iZsG3z1LFy4xJwOTGjxZPJM=
>> > +SIZE (ddclient-4.0.0.tar.gz) = 301499
>> > Index: patches/patch-Makefile_am
>> > ===================================================================
>> > RCS file: patches/patch-Makefile_am
>> > diff -N patches/patch-Makefile_am
>> > --- /dev/null 1 Jan 1970 00:00:00 -0000
>> > +++ patches/patch-Makefile_am 7 Jan 2026 10:54:35 -0000
>> > @@ -0,0 +1,13 @@
>> > +Index: Makefile.am
>> > +--- Makefile.am.orig
>> > ++++ Makefile.am
>> > +@@ -42,9 +42,6 @@ bin_SCRIPTS = ddclient
>> > +
>> > + conf_DATA = ddclient.conf
>> > +
>> > +-install-data-local:
>> > +- $(MKDIR_P) '$(DESTDIR)$(localstatedir)'/cache/ddclient
>> > +-
>> > + AM_TESTS_ENVIRONMENT = \
>> > + abs_top_srcdir='$(abs_top_srcdir)'; export abs_top_srcdir;
>> > + LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
>> > Index: patches/patch-ddclient
>> > ===================================================================
>> > RCS file: patches/patch-ddclient
>> > diff -N patches/patch-ddclient
>> > --- patches/patch-ddclient 11 Mar 2022 19:45:52 -0000 1.4
>> > +++ /dev/null 1 Jan 1970 00:00:00 -0000
>> > @@ -1,20 +0,0 @@
>> > -Index: ddclient
>> > ---- ddclient.orig
>> > -+++ ddclient
>> > -@@ -1163,16 +1163,6 @@ sub _read_config {
>> > - # fatal("Cannot open file '%s'. ($!)", $file);
>> > - warning("Cannot open file '%s'. ($!)", $file);
>> > - }
>> > -- # Check for only owner has any access to config file
>> > -- my ($dev, $ino, $mode, @statrest) = stat(FD);
>> > -- if ($mode & 077) {
>> > -- if (-f FD && (chmod 0600, $file)) {
>> > -- warning("file $file must be accessible only by its owner
>> (fixed).");
>> > -- } else {
>> > -- # fatal("file $file must be accessible only by its owner.");
>> > -- warning("file $file must be accessible only by its owner.");
>> > -- }
>> > -- }
>> > -
>> > - local $lineno = 0;
>> > - my $continuation = '';
>> > Index: patches/patch-ddclient_in
>> > ===================================================================
>> > RCS file: patches/patch-ddclient_in
>> > diff -N patches/patch-ddclient_in
>> > --- /dev/null 1 Jan 1970 00:00:00 -0000
>> > +++ patches/patch-ddclient_in 7 Jan 2026 10:54:35 -0000
>> > @@ -0,0 +1,12 @@
>> > +Index: ddclient.in
>> > +--- ddclient.in.orig
>> > ++++ ddclient.in
>> > +@@ -133,7 +133,7 @@ sub subst_var {
>> > + }
>> > +
>> > + my $etc = subst_var('@confdir@', '/etc/ddclient');
>> > +-my $cachedir = subst_var('@localstatedir@', '/var') .
>> '/cache/ddclient';
>> > ++my $cachedir = subst_var('@localstatedir@', '/var') . '/db/ddclient';
>> > + our @curl = (subst_var('@CURL@', 'curl'));
>> > +
>> > + our $emailbody = '';
>> > Index: patches/patch-sample-etc_ddclient_conf
>> > ===================================================================
>> > RCS file: patches/patch-sample-etc_ddclient_conf
>> > diff -N patches/patch-sample-etc_ddclient_conf
>> > --- patches/patch-sample-etc_ddclient_conf 11 Mar 2022 19:45:52
>> -0000 1.3
>> > +++ /dev/null 1 Jan 1970 00:00:00 -0000
>> > @@ -1,12 +0,0 @@
>> > -Index: sample-etc_ddclient.conf
>> > ---- sample-etc_ddclient.conf.orig
>> > -+++ sample-etc_ddclient.conf
>> > -@@ -20,7 +20,7 @@ daemon=300 # check every 300
>> seconds
>> > - syslog=yes # log update msgs to syslog
>> > - mail=root # mail all msgs to root
>> > - mail-failure=root # mail failed update msgs to root
>> > --pid=/var/run/ddclient.pid # record PID in file.
>> > -+pid=/var/run/ddclient/ddclient.pid # record PID in file.
>> > - ssl=yes # use ssl-support. Works
>> with
>> > - # ssl-library
>> > - # postscript=script # run script after updating. The
>> > Index: pkg/PLIST
>> > ===================================================================
>> > RCS file: /cvs/ports/net/ddclient/pkg/PLIST,v
>> > diff -u -p -r1.15 PLIST
>> > --- pkg/PLIST 8 Nov 2022 11:14:54 -0000 1.15
>> > +++ pkg/PLIST 7 Jan 2026 10:54:35 -0000
>> > @@ -1,24 +1,13 @@
>> > @newgroup _ddclient:750
>> > @newuser _ddclient:750:_ddclient::DynDNS
>> Client:/nonexistent:/sbin/nologin
>> > -sbin/ddclient
>> > -share/doc/ddclient/
>> > -share/doc/ddclient/README.cisco
>> > -share/doc/ddclient/README.md
>> > -share/doc/ddclient/README.ssl
>> > +@rcscript ${RCDIR}/ddclient
>> > +bin/ddclient
>> > share/examples/ddclient/
>> > @sample ${SYSCONFDIR}/ddclient/
>> > -share/examples/ddclient/sample-ddclient-wrapper.sh
>> > -share/examples/ddclient/sample-etc_cron.d_ddclient
>> > -share/examples/ddclient/sample-etc_ddclient.conf
>> > -@mode 0640
>> > +share/examples/ddclient/ddclient.conf
>> > +@mode 640
>> > @group _ddclient
>> > @sample ${SYSCONFDIR}/ddclient/ddclient.conf
>> > @mode
>> > -@group
>> > -share/examples/ddclient/sample-etc_dhclient-exit-hooks
>> > -share/examples/ddclient/sample-etc_dhcpc_dhcpcd-eth0.exe
>> > -share/examples/ddclient/sample-etc_ppp_ip-up.local
>> > @owner _ddclient
>> > @sample /var/db/ddclient/
>> > -@owner
>> > -@rcscript ${RCDIR}/ddclient
>> > Index: pkg/ddclient.rc
>> > ===================================================================
>> > RCS file: /cvs/ports/net/ddclient/pkg/ddclient.rc,v
>> > diff -u -p -r1.7 ddclient.rc
>> > --- pkg/ddclient.rc 11 Mar 2022 19:45:52 -0000 1.7
>> > +++ pkg/ddclient.rc 7 Jan 2026 10:54:35 -0000
>> > @@ -1,6 +1,6 @@
>> > #!/bin/ksh
>> >
>> > -daemon="${TRUEPREFIX}/sbin/ddclient"
>> > +daemon="${TRUEPREFIX}/bin/ddclient"
>> > daemon_user="_ddclient"
>> >
>> > . /etc/rc.d/rc.subr
>> >
>>
>>
[update] net/ddclient 4.0.0