Review: cfdns-updater 1.1.0-2
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 |
| Tracker | https://tracker.debian.org/pkg/cfdns-updater |
| Uploaded | 4 days ago |
| Supersedes | 1.1.0-1 |
New Package Report
.changes
| Changed-By | Paulo Henrique de Lima Santana (phls) <phls@debian.org> |
|---|---|
| Architecture | source all |
| Distribution | unstable |
| Date | Tue, 03 Nov 2026 18:42:42 -0300 |
| Source | cfdns-updater |
| Version | 1.1.0-2 |
Changelog
cfdns-updater (1.1.0-2) unstable; urgency=medium . * debian/manpage/cfdns-updater.txt: fixed the place of cdfdns-updater file. * debian/rules: added the option don't start the service after install.
.dsc
| Component | main |
|---|---|
| Package-List | cfdns-updater deb net optional arch=all |
| Section | net |
| Priority | optional |
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, 0 important, 2 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 4 days ago.
Report
DFSG NEW review for cfdns-updater version 1.1.0-2
Summary
- Licensing is DFSG-compliant and
debian/copyrightis accurate: Yes - Packaging is of good quality: Yes
- Issues: 0 blocker, 0 important, 2 minor
- debian/watch: version 5
- debian/copyright: machine-readable
- Scan before the review: nothing found
Licensing
Everything in the tree is MIT or BSD-3-Clause, both DFSG-free, and debian/copyright is DEP-5 and accurate: every one of the 14 upstream files (including .gitignore, .github/workflows/release.yml and the packaging/ files) is matched by the Files: list, and the one third-party file, debian/manpage/genallman.sh, has its own stanza with its BSD-3-Clause-or-MIT dual offer. Full texts of both licences are included, as required for these permissive licences. The only licence notices in the tree are LICENSE.txt and genallman.sh, and both holders are named.
Packaging
Competent, minimal packaging: compat 14 with a plain dh $@, correct single-binary layout, the service shipped as debian/cfdns-updater.service, config created in postinst and removed on purge (Policy 10.7.3's maintainer-script route), shell and env file handled with mode 600, Standards-Version current, and a valid autopkgtest. Two minor defects: dh_installsystemd --no-start silently turns off the default restart-after-upgrade, so an upgrade leaves the old script running, and the manual page for the command is installed in section 7.
Issues
minor packaging 1. Upgrades of a running cfdns-updater service do not restart it, because --no-start also disables restart-after-upgrade ◂
- Files:
debian/rules:9 - Basis: checked, in the package or with a reference tool
- Evidence:
override_dh_installsystemd:/dh_installsystemd --no-start; dh_installsystemd(1):--no-start— "Do not start the unit file after upgrades and after initial installation"; /usr/bin/dh_installsystemd:184$dh{RESTART_AFTER_UPGRADE} = 1 if not defined($dh{R_FLAG}) and $dh{NO_START} eq '';and :428-441, where the postinst start/restart autoscript is added onlyif ($dh{RESTART_AFTER_UPGRADE})orelsif (!$dh{NO_START}). - Problem: With
--no-startalone, dh_installsystemd emits only the enable snippet: no postinst start or restart script is generated, and prerm-systemd-restart only stops the unit on removal. A service the administrator started therefore keeps running the old script afterapt upgrade— the 1.1.0 changes (PATCH instead of PUT, TTL/proxy handling, interval validation) only take effect after a manualsystemctl restart. - Fix: Pass both options:
dh_installsystemd --no-start --restart-after-upgrade. debhelper then uses postinst-systemd-restartnostart withtry-restart, which leaves a fresh install unstarted but restarts the unit on upgrade when it is running.
minor packaging 2. The man page for the cfdns-updater command is installed in section 7, but a program's manual page belongs in section 1 ◂
- Files:
debian/manpages:1,debian/manpage/cfdns-updater.7:1,debian/manpage/cfdns-updater.header:1,debian/cfdns-updater.service:5 - Basis: checked, in the package or with a reference tool
- Evidence:
debian/manpage/cfdns-updater.7with.TH cfdns-updater "7" "Nov 2026" ...; FHS 4.11.6.1: "man1: User programs Manual pages that describe publicly accessible commands are contained in this chapter"; "man7: Miscellaneous Manual pages that are difficult to classify". - Problem: Policy 12.1 requires manual pages to be installed in the appropriate place and sections chosen per the FHS. cfdns-updater is a user-runnable command (
--help,--run-once), not a miscellaneous documentation page, soman 1 cfdns-updaterfails; only the fallback search finds it. - Fix: Rename to debian/manpage/cfdns-updater.1, change the
.THsection field to "1", update debian/manpages andDocumentation=man:cfdns-updater(1)in debian/cfdns-updater.service (and the generator header).
Verified ◂
- The prescan listed no file to explain: its author check (13 files) reported every copyright holder found as named in debian/copyright. All 14 upstream files were nonetheless read or grepped individually.
- File inventory, complete: .gitignore, CHANGELOG.md, LICENSE.txt, README.md, VERSION, cfdns-updater, cfdns-updater.env-example, cfdns-updater.service, .github/workflows/release.yml, packaging/build-deb.sh, packaging/debian/{control,postinst,postrm,prerm}, plus debian/. All are matched by the
Files:stanzas of debian/copyright (the first stanza names them one by one;debian/*covers debian/, and the laterdebian/manpage/genallman.shstanza overrides it for that file). - Only two files in the tree carry licence notices: LICENSE.txt (
MIT License,Copyright (c) 2026 Eduardo Marcel Maçan) and debian/manpage/genallman.sh (Copyright (C) 2014-2015 Joao Eriberto Mota Filho, BSD-3-clause or the debian/ licence, i.e. MIT). Both holders and both licence texts are in debian/copyright, and the full MIT and BSD-3-Clause texts are reproduced there since neither is in /usr/share/common-licenses. A grep for copyright/licence/GPL/Apache/SPDX/public domain/non-commercial over the whole tree found nothing else. - No vendored third-party code, no binaries, no minified files, no images or fonts; nothing built is shipped. debian/manpage/cfdns-updater.7 is generated, but its inputs cfdns-updater.txt and cfdns-updater.header and the generator genallman.sh are all present.
- debian/copyright is DEP-5 (Format: .../copyright-format/1.0/), with Upstream-Name/Source and no Files-Excluded; the
Files: debian/manpage/genallman.shstanza correctly follows thedebian/*stanza so that it overrides it. - Packaging read in full: control, rules, changelog, source/format, install, docs, examples, manpages, tests/control, upstream/metadata, both maintainer scripts, the unit file and the manual page sources. No debian/patches (quilt with no patches is fine).
- Dependencies checked with the reference tools: dh-sequence-single-binary is a virtual package provided by debhelper 14.5 (Build-Depends debhelper-compat (= 14) is consistent); bash, curl and systemd all exist in the archive. Standards-Version 4.7.4 matches the reviewing system's Policy 4.7.4.1 in its first two components.
- Config handling follows Policy 10.7.3's maintainer-script route: postinst creates /etc/cfdns-updater.env from the example in /usr/share/doc/cfdns-updater/examples/ with mode 600 and is idempotent; postrm removes it only on purge; the file is correctly not a conffile and not shipped.
- autopkgtest
Test-Command: cfdns-updater --helpexits 0 before the required-variable check in the script, so it passes without a configuration file or network. - The systemd unit is installed and enabled by dh_installsystemd (default enable; only
--no-startis passed), which matches the postinst message telling the administrator to edit the config and then start the service. - uscan found the packaged version as the newest upstream release (upstream
1.1.0, packaged1.1.0).
Not confirmed ◂
None.
Proposed changes ◂
None.
Uploader's response to the LLM review
The uploader rejected this upload in response to the review.
Review Information
rejected — allocated to dfsg-uploader 3 days ago, started 3 days ago, completed 3 days ago.
Final Comment
The uploader rejected this upload in response to the automated (LLM) review of it, so that they can fix the problems it found and upload again.
The uploader said:
Hi, I'm canceling this upload because there is another simular package.
Other Reviews of this Package
| Version | Hash | Allocated | Completed | Reviewer | Status | Details |
|---|---|---|---|---|---|---|
| 1.1.0-1 | a629bb9b… | 2026-11-04 17:23 | 2026-11-04 17:23 | dfsg-uploader | rejected | VIEW |