DFSG NEW Queue

DFSG, Licensing & New Packages Team

Review: cfdns-updater 1.1.0-2

Package Information

DescriptionCloudflare 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.

MaintainerPaulo Henrique de Lima Santana (phls) <phls@debian.org>
Changed ByPaulo Henrique de Lima Santana (phls) <phls@debian.org>
Sponsorphls@debian.org
Distributionunstable
Architectureall
Trackerhttps://tracker.debian.org/pkg/cfdns-updater
Uploaded4 days ago
Supersedes1.1.0-1

New Package Report

.changes◂
DateTue, 03 Nov 2026 18:42:42 -0300
Sourcecfdns-updater
Version1.1.0-2
Changed-ByPaulo Henrique de Lima Santana (phls) <phls@debian.org>
Architecturesource all
Distributionunstable
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◂
Componentmain
Package-Listcfdns-updater deb net optional arch=all
Sectionnet
Priorityoptional
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/copyright is 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 only if ($dh{RESTART_AFTER_UPGRADE}) or elsif (!$dh{NO_START}).
  • Problem: With --no-start alone, 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 after apt upgrade — the 1.1.0 changes (PATCH instead of PUT, TTL/proxy handling, interval validation) only take effect after a manual systemctl restart.
  • Fix: Pass both options: dh_installsystemd --no-start --restart-after-upgrade. debhelper then uses postinst-systemd-restartnostart with try-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.7 with .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, so man 1 cfdns-updater fails; only the fallback search finds it.
  • Fix: Rename to debian/manpage/cfdns-updater.1, change the .TH section field to "1", update debian/manpages and Documentation=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 later debian/manpage/genallman.sh stanza 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.sh stanza correctly follows the debian/* 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 --help exits 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-start is 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, packaged 1.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

VersionHashAllocatedCompletedReviewerStatusDetails
1.1.0-1 a629bb9b… 2026-11-04 17:23 2026-11-04 17:23 dfsg-uploader rejected VIEW

Back to Dashboard | View all reviews for this package