cfdns-updater 1.1.0-1
Package Information
| Description | Cloudflare dynamic DNS updater A Bash script that monitors your public IP address and automatically updates a Cloudflare DNS A record when it changes. Designed to run as a systemd service. |
|---|---|
| Maintainer | Paulo Henrique de Lima Santana (phls) <phls@debian.org> |
| Changed By | Paulo Henrique de Lima Santana (phls) <phls@debian.org> |
| Sponsor | phls@debian.org |
| Distribution | unstable |
| Architecture | all |
| Closes | #1152967 |
| Tracker | https://tracker.debian.org/pkg/cfdns-updater |
| Uploaded | 3 hours ago |
New Package Report
.changes
| Distribution | unstable |
|---|---|
| Date | Tue, 03 Nov 2026 16:35:20 -0300 |
| Source | cfdns-updater |
| Version | 1.1.0-1 |
| Changed-By | Paulo Henrique de Lima Santana (phls) <phls@debian.org> |
| Architecture | source all |
Changelog
cfdns-updater (1.1.0-1) unstable; urgency=medium . * Initial release. (Closes: #1152967).
.dsc
| Package-List | cfdns-updater deb net optional arch=all |
|---|---|
| Section | net |
| Priority | optional |
| Component | main |
debian/copyright
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://github.com/eduardomacan/cfdns-updater
Upstream-Name: cfdns-updater
Upstream-Contact: Eduardo Marcel Maçan <eduardomacan@gmail.com>
Files: CHANGELOG.md
LICENSE.txt
README.md
VERSION
cfdns-updater
cfdns-updater.env-example
cfdns-updater.service
packaging/build-deb.sh
packaging/debian/control
packaging/debian/postinst
packaging/debian/postrm
packaging/debian/prerm
.github/workflows/release.yml
.gitignore
Copyright: 2026, Eduardo Marcel Maçan <eduardomacan@gmail.com>
License: MIT
Comment:
Using license as found in LICENSE file.
Files: debian/*
Copyright: 2026, Paulo Henrique de Lima Santana (phls) <phls@debian.org>
License: MIT
Files: debian/manpage/genallman.sh
Copyright: 2014-2015 Joao Eriberto Mota Filho <eriberto@debian.org>
License: BSD-3-Clause or MIT
License: MIT
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
License: BSD-3-Clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DFSG Assistant LLM REVIEW 0 blocker, 1 important, 1 minor
This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.
Reviewed 2 hours ago.
Report
DFSG NEW review for cfdns-updater version 1.1.0-1
Summary
- Licensing is DFSG-compliant and
debian/copyrightis accurate: Yes - Packaging is of good quality: No
- Issues: 0 blocker, 1 important, 1 minor
- debian/watch: version 5
- debian/copyright: machine-readable
- Scan before the review: nothing found
Licensing
debian/copyright is in DEP-5 format with the correct Format URL and names every upstream file individually: the 13-file upstream tree is fully covered, and the debian/* stanza plus the later debian/manpage/genallman.sh override give the right holders and licences. The MIT text in LICENSE.txt and the BSD-3-Clause/MIT dual licence of genallman.sh are reproduced in full in the file, no other copyright notices exist in the tree, nothing is non-free, and no third-party code is vendored.
Packaging
The packaging is small and mostly correct: compat 14 with the explicit single-binary addon, a complete debian/install/docs/examples/manpages set, DEP-5 copyright, maintainer-script-managed config under /etc, an autopkgtest and valid upstream metadata. One real defect remains: the maintainer scripts are written as if the service is not started until the admin configures it, but debhelper's default enables and starts the unit on install, so a freshly installed package runs the daemon with the placeholder token and polls Cloudflare every 60 seconds. The shipped man page also points at a path that does not exist.
Issues
important packaging 1. The systemd service is started at install time with the placeholder config, before the admin can edit /etc/cfdns-updater.env ◂
- Files:
debian/rules:5-6,debian/cfdns-updater.postinst:13-14,debian/cfdns-updater.service:8,debian/cfdns-updater.env-example:4-6 - Basis: checked, in the package or with a reference tool
- Evidence: debian/rules is only
dh $@; dh_installsystemd(1): "--no-start Do not start the unit file after upgrades and after initial installation (the latter is only relevant for services without a corresponding init script)"; debian/cfdns-updater.postinst printsedit $CONFIG file, then run: systemctl start cfdns-updater; debian/cfdns-updater.env-example shipsCLOUDFLARE_API_TOKEN="your_api_token_here". - Problem: dh_installsystemd is part of the default dh sequence since compat 11 (/usr/share/perl5/Debian/Debhelper/Sequence/root_sequence.pm line 53) and, for a service without an init script, starts the unit on initial installation unless --no-start is given. Because the copied example config has non-empty placeholder values, the script's required-variable check (cfdns-updater:40) passes, so the daemon runs with an invalid token, calls checkip.amazonaws.com and api.cloudflare.com every 60 s and writes failures to the journal until the admin happens to read the postinst warning. The documented flow (edit the config, then
systemctl start) is a no-op because the unit is already running. - Fix: Stop debhelper starting it unconfigured: add
override_dh_installsystemd:runningdh_installsystemd --no-start(or give the unit an ExecCondition/ConditionPathExists check that refuses to run with the placeholders), and let postinst runsystemctl start/deb-systemd-invoke startonce the placeholder values are gone, keeping the existing warning when they are not.
minor packaging 2. Man page tells users to edit /opt/cfdns-updater/cfdns-updater, which the package does not install ◂
- Files:
debian/manpage/cfdns-updater.txt:91,debian/manpage/cfdns-updater.7:176 - Basis: checked, in the package or with a reference tool
- Evidence:
Edit /opt/cfdns-updater/cfdns-updater to customize:(CONFIGURATION section), while debian/install puts the script at/usr/bin/cfdns-updater. - Problem: The path is a leftover from upstream 1.0.x; the installed package has no /opt/cfdns-updater. The shipped man page is the package's primary documentation, so it directs the admin to a file that does not exist, and even the corrected path would be a dpkg-owned file whose edits are lost on upgrade.
- Fix: Correct the CONFIGURATION section in debian/manpage/cfdns-updater.txt (name the real file, /usr/bin/cfdns-updater, and note that those two settings can only be changed by editing the script) and regenerate debian/manpage/cfdns-updater.7 with debian/manpage/genallman.sh.
Verified ◂
- debian/copyright is machine-readable (exact copyright-format 1.0 Format URL) and its stanzas cover every file: the Files: list names all 13 upstream paths (CHANGELOG.md, LICENSE.txt, README.md, VERSION, cfdns-updater, cfdns-updater.env-example, cfdns-updater.service, packaging/build-deb.sh, packaging/debian/{control,postinst,postrm,prerm}, .github/workflows/release.yml, .gitignore); debian/* and the later debian/manpage/genallman.sh stanza cover the packaging.
- The pre-scan reported no copyright holder missing from debian/copyright and listed no individual files to account for; a grep of the whole tree for Copyright/(C)/SPDX/Licensed under/GNU/Apache/MPL/public domain/All rights reserved found notices only in LICENSE.txt and debian/manpage/genallman.sh, both of which debian/copyright handles.
- LICENSE.txt is the plain MIT text with Copyright (c) 2026 Eduardo Marcel Maçan, matching the Files: stanza's holder and the full MIT text reproduced under
License: MIT; genallman.sh's header ("same terms of the BSD-3-clause license or, optionally, ... the license used in debian/ directory") matchesLicense: BSD-3-Clause or MITwith the BSD-3-Clause text included, and both licences are DFSG-free and mutually compatible. - No binary files, images, fonts, minified code, PDFs, generated code without its input, or vendored third-party code in the tree; debian/manpage/cfdns-updater.7 is a text man page generated by genallman.sh from cfdns-updater.txt and cfdns-updater.header, both shipped.
- The .orig.tar.gz is pristine upstream (no debian/ directory) and matches the unpacked tree; debian/patches does not exist, so there are no patches to review.
- debian/install ships the script as 0644 from the source tree; dh_fixperms(1) makes files in usr/bin executable at this compat level, so the installed /usr/bin/cfdns-updater is executable.
- The example config is 711 bytes and dh_compress only compresses files in usr/share/doc larger than 4 KiB, so the postinst's path /usr/share/doc/cfdns-updater/examples/cfdns-updater.env-example exists uncompressed.
- debian/tests/control omits Depends, which the autopkgtest specification defines as
Depends: @, socfdns-updater --helpruns against the installed package and exits 0 during argument parsing, before the config and network checks. - Standards-Version 4.7.4 against Policy 4.7.4.1: first two components match, so it is current.
- Build-Depends
debhelper-compat (= 14)is the recommended level anddh-sequence-single-binaryis provided by debhelper 14.5 (apt-cache), the addon debhelper recommends activating explicitly at compat 14; missing ${misc:Depends} in Depends is not a fault at compat 14. - Config handling follows Policy 10.7.3's maintainer-script style: /etc/cfdns-updater.env is not a conffile, is created from the example only if absent, is never overwritten, is chmod 600 on every configure, and is removed only on purge.
- debian/changelog: unstable, version 1.1.0-1, initial release closing #1152967, correct date and maintainer; debian/upstream/metadata has valid fields; Architecure all with bash/curl/systemd dependencies is consistent with the script's needs (grep, sed, tr, install and systemctl aside).
- Ignored .pc/ and debian/cargo-checksum.json throughout.
- uscan found the packaged version as the newest upstream release (upstream
1.1.0, packaged1.1.0).
Not confirmed ◂
- The package was not built or installed (read-only review); the effect described in the first issue rests on dh_installsystemd's documented default at compat 14 and the script's own startup checks, not on an observed installation.
Proposed changes ◂
None.
Uploader's response to the LLM review
The uploader was emailed about the review 2 hours ago.