Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .PKGINFO
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
pkgname = flufflinux-update
pkgbase = flufflinux-update
pkgver = 1.3-1
pkgver = 1.4-1
pkgdesc = Fluff Linux Update Utility
url = https://github.com/FluffNet/flufflinux-update
builddate = 1787644274
builddate = 1788111852
packager = FluffNet LLC
size = 651620
arch = x86_64
Expand Down
11 changes: 10 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
cmake_minimum_required(VERSION 3.20)

project(flufflinux_update_kcm VERSION 1.3.0 LANGUAGES CXX)
project(flufflinux_update_kcm VERSION 1.4.0 LANGUAGES CXX)

option(BUILD_TESTING "Build the isolated signing-key tests" OFF)
include(CTest)

set(QT_MIN_VERSION "6.9.0")
set(KF6_MIN_VERSION "6.0.0")
Expand Down Expand Up @@ -34,9 +37,15 @@ include(KDECMakeSettings)
include(FeatureSummary)

find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core Gui Network Qml Quick Widgets)
if(BUILD_TESTING)
find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Test)
endif()
find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS CoreAddons I18n KCMUtils)

add_subdirectory(src)
if(BUILD_TESTING)
add_subdirectory(tests)
endif()

# Install gettext catalogs into the fakeroot alongside the KCM.
ki18n_install(po)
Expand Down
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,27 @@ Fluff Linux Update uses files under `/etc/pacman.d/`:
- `flufflinux-update-package-protection.json` defines protected, warning, and
autoremove classifications. Packages absent from the file use autoremove.

Repository signing-key recovery is fail-closed. If pacman reports a complete
unknown signing-key fingerprint that pacman conclusively attributes to the
`fluffnet` repository, FLU downloads FluffNet's public certificate and expected
primary fingerprint directly from `fluffnet.org`. It parses the certificate in
an isolated disposable GnuPG home, rejects private-key material, verifies the
primary fingerprint, key usability, self-signatures, and any signing-subkey
binding, and only then imports and locally trusts the exact primary key through
the existing privileged helper. It never contacts a third-party keyserver,
changes global GnuPG configuration, or accepts pacman's key prompt. Failures
from other or unidentified repositories do not trigger any FluffNet request or
keyring change.

The isolated signing-key tests use disposable OpenPGP keys and mocked
fingerprint endpoint, certificate endpoint, and Pacman-key operations:

```sh
cmake -S . -B build-tests -DBUILD_TESTING=ON
cmake --build build-tests
ctest --test-dir build-tests --output-on-failure
```

The existing `lastupdate` hook provides this field:

```json
Expand Down
5 changes: 5 additions & 0 deletions po/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ means. The English `msgid` must never be changed. Only edit `msgstr`.
| To allow system updates to continue, %1 was automatically removed after it was deemed safe to remove. | Ten-second notice for one safe automatic removal. Preserve `%1`. |
| To allow system updates to continue, the following packages were automatically removed after they were deemed safe to remove: %1 | Ten-second notice for multiple safe automatic removals. Preserve `%1`. |
| A file conflict was detected and resolved. %1 was renamed to %2. The update process has restarted. | Ten-second file conflict recovery notice. Preserve `%1` and `%2`. |
| Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. | Red status shown when verified FluffNet key recovery fails. |
| Repository: %1 | Repository field in signing-key technical details. Preserve `%1`; the inserted repository name remains left-to-right. |
| FLU version: %1 | Installed FLU version in signing-key technical details. Preserve `%1`. |
| Fluff Linux version: %1 | Operating-system version in signing-key technical details. Preserve `%1`. |
| The official FluffNet repository signing key was verified and added to Pacman. | Temporary notice after the verified certificate is imported successfully. |

The panel name and description shown in the System Settings search results also
have translations in `src/kcm_fluffupdates.json`. The application-menu entry is
Expand Down
51 changes: 51 additions & 0 deletions po/ar/kcm_fluffupdates.po
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,54 @@ msgstr "اكتُشف تعارض في الملفات وتم حله. أُعيدت

msgid "The conflicting package could not be removed. Please seek support."
msgstr "تعذرت إزالة الحزمة المتعارضة. يُرجى طلب الدعم."


#. TRANSLATORS: Security failure shown when FLU refuses an unverified repository key.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system."
msgstr "تعذر على Fluff Linux Update التحقق من مفتاح توقيع مستودع FluffNet. تم إيقاف التحديث لحماية نظامك."

#. TRANSLATORS: Full security guidance; keep the warning against manual acceptance.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. This may indicate a network problem, an unavailable FluffNet server, an expired or rotated signing key, a repository configuration problem, an unexpected key, or a possible repository compromise. Do not manually accept an unexpected key unless Fluff Linux publishes verified instructions."
msgstr "تعذر على Fluff Linux Update التحقق من مفتاح توقيع مستودع FluffNet. تم إيقاف التحديث لحماية نظامك. قد يشير ذلك إلى مشكلة في الشبكة، أو عدم توفر خادم FluffNet، أو مفتاح توقيع منتهي الصلاحية أو تم تدويره، أو مشكلة في إعداد المستودع، أو مفتاح غير متوقع، أو احتمال اختراق المستودع. لا تقبل مفتاحًا غير متوقع يدويًا إلا إذا نشرت Fluff Linux تعليمات موثقة."

msgid "Repository: %1"
msgstr "المستودع: %1"

msgid "The official FluffNet repository signing key was verified and added to Pacman."
msgstr "تم التحقق من مفتاح التوقيع الرسمي لمستودع FluffNet وإضافته إلى Pacman."

msgid "Technical details"
msgstr "التفاصيل الفنية"

msgid "Repository signing-key verification technical details"
msgstr "التفاصيل الفنية للتحقق من مفتاح توقيع المستودع"

msgid "Failure category: %1"
msgstr "فئة الفشل: %1"

msgid "Expected fingerprint: %1"
msgstr "البصمة المتوقعة: %1"

msgid "Received fingerprint: %1"
msgstr "البصمة المستلمة: %1"

msgid "Requested signing-key fingerprint: %1"
msgstr "بصمة مفتاح التوقيع المطلوبة: %1"

msgid "Pacman exit status: %1"
msgstr "حالة خروج بكمن: %1"

msgid "FLU version: %1"
msgstr "إصدار FLU: %1"

msgid "Fluff Linux version: %1"
msgstr "إصدار Fluff Linux: %1"

msgid "Try Again"
msgstr "حاول ثانية"

msgid "Copy Technical Details"
msgstr "نسخ التفاصيل الفنية"

msgid "Open an Issue on GitHub"
msgstr "افتح مشكلة على جيثب"
51 changes: 51 additions & 0 deletions po/bg/kcm_fluffupdates.po
Original file line number Diff line number Diff line change
Expand Up @@ -281,3 +281,54 @@ msgstr "Файлов конфликт беше открит и разрешен.
#. Error shown when an approved blocking package could not be removed.
msgid "The conflicting package could not be removed. Please seek support."
msgstr "Конфликтният пакет не можа да бъде премахнат. Моля, потърсете поддръжка."


#. TRANSLATORS: Security failure shown when FLU refuses an unverified repository key.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system."
msgstr "Fluff Linux Update не можа да провери ключа за подписване на хранилището FluffNet. Обновяването беше спряно, за да се защити системата ви."

#. TRANSLATORS: Full security guidance; keep the warning against manual acceptance.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. This may indicate a network problem, an unavailable FluffNet server, an expired or rotated signing key, a repository configuration problem, an unexpected key, or a possible repository compromise. Do not manually accept an unexpected key unless Fluff Linux publishes verified instructions."
msgstr "Fluff Linux Update не можа да провери ключа за подписване на хранилището FluffNet. Обновяването беше спряно, за да се защити системата ви. Това може да означава проблем с мрежата, недостъпен сървър на FluffNet, изтекъл или сменен ключ за подписване, проблем с настройката на хранилището, неочакван ключ или възможно компрометиране на хранилището. Не приемайте ръчно неочакван ключ, освен ако Fluff Linux не публикува проверени инструкции."

msgid "Repository: %1"
msgstr "Хранилище: %1"

msgid "The official FluffNet repository signing key was verified and added to Pacman."
msgstr "Официалният ключ за подписване на хранилището FluffNet беше проверен и добавен към Pacman."

msgid "Technical details"
msgstr "Технически детайли"

msgid "Repository signing-key verification technical details"
msgstr "Технически подробности за проверка на ключ за подписване на хранилище"

msgid "Failure category: %1"
msgstr "Категория на повреда: %1"

msgid "Expected fingerprint: %1"
msgstr "Очакван пръстов отпечатък: %1"

msgid "Received fingerprint: %1"
msgstr "Получен пръстов отпечатък: %1"

msgid "Requested signing-key fingerprint: %1"
msgstr "Поискан пръстов отпечатък на ключ за подписване: %1"

msgid "Pacman exit status: %1"
msgstr "Статус на излизане от Pacman: %1"

msgid "FLU version: %1"
msgstr "Версия на FLU: %1"

msgid "Fluff Linux version: %1"
msgstr "Версия на Fluff Linux: %1"

msgid "Try Again"
msgstr "Опитайте отново"

msgid "Copy Technical Details"
msgstr "Копиране на техническите подробности"

msgid "Open an Issue on GitHub"
msgstr "Отворете проблем в GitHub"
51 changes: 51 additions & 0 deletions po/cs/kcm_fluffupdates.po
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,54 @@ msgstr "Byl zjištěn a vyřešen konflikt souborů. %1 byl přejmenován na %2.
#. Error shown when an approved blocking package could not be removed.
msgid "The conflicting package could not be removed. Please seek support."
msgstr "Konfliktní balíček nelze odebrat. Vyhledejte podporu."


#. TRANSLATORS: Security failure shown when FLU refuses an unverified repository key.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system."
msgstr "Fluff Linux Update nemohl ověřit podpisový klíč repozitáře FluffNet. Aktualizace byla zastavena, aby byl váš systém chráněn."

#. TRANSLATORS: Full security guidance; keep the warning against manual acceptance.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. This may indicate a network problem, an unavailable FluffNet server, an expired or rotated signing key, a repository configuration problem, an unexpected key, or a possible repository compromise. Do not manually accept an unexpected key unless Fluff Linux publishes verified instructions."
msgstr "Fluff Linux Update nemohl ověřit podpisový klíč repozitáře FluffNet. Aktualizace byla zastavena, aby byl váš systém chráněn. Příčinou může být problém se sítí, nedostupný server FluffNet, prošlý nebo vyměněný podpisový klíč, problém s nastavením repozitáře, neočekávaný klíč nebo možné napadení repozitáře. Neočekávaný klíč ručně nepřijímejte, pokud Fluff Linux nezveřejní ověřené pokyny."

msgid "Repository: %1"
msgstr "Repozitář: %1"

msgid "The official FluffNet repository signing key was verified and added to Pacman."
msgstr "Oficiální podpisový klíč repozitáře FluffNet byl ověřen a přidán do Pacmanu."

msgid "Technical details"
msgstr "Technické detaily"

msgid "Repository signing-key verification technical details"
msgstr "Technické podrobnosti ověření podpisového klíče úložiště"

msgid "Failure category: %1"
msgstr "Kategorie poruch: %1"

msgid "Expected fingerprint: %1"
msgstr "Očekávaný otisk: %1"

msgid "Received fingerprint: %1"
msgstr "Přijatý otisk prstu: %1"

msgid "Requested signing-key fingerprint: %1"
msgstr "Požadovaný otisk podpisového klíče: %1"

msgid "Pacman exit status: %1"
msgstr "Stav ukončení Pacman: %1"

msgid "FLU version: %1"
msgstr "Verze FLU: %1"

msgid "Fluff Linux version: %1"
msgstr "Verze Fluff Linux: %1"

msgid "Try Again"
msgstr "Zkuste to znovu"

msgid "Copy Technical Details"
msgstr "Zkopírujte technické podrobnosti"

msgid "Open an Issue on GitHub"
msgstr "Otevřete problém na GitHubu"
51 changes: 51 additions & 0 deletions po/da/kcm_fluffupdates.po
Original file line number Diff line number Diff line change
Expand Up @@ -281,3 +281,54 @@ msgstr "En filkonflikt blev fundet og løst. %1 blev omdøbt til %2. Opdaterings
#. Error shown when an approved blocking package could not be removed.
msgid "The conflicting package could not be removed. Please seek support."
msgstr "Den modstridende pakke kunne ikke fjernes. Søg venligst support."


#. TRANSLATORS: Security failure shown when FLU refuses an unverified repository key.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system."
msgstr "Fluff Linux Update kunne ikke bekræfte signeringsnøglen til FluffNet-arkivet. Opdateringen blev stoppet for at beskytte dit system."

#. TRANSLATORS: Full security guidance; keep the warning against manual acceptance.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. This may indicate a network problem, an unavailable FluffNet server, an expired or rotated signing key, a repository configuration problem, an unexpected key, or a possible repository compromise. Do not manually accept an unexpected key unless Fluff Linux publishes verified instructions."
msgstr "Fluff Linux Update kunne ikke bekræfte signeringsnøglen til FluffNet-arkivet. Opdateringen blev stoppet for at beskytte dit system. Det kan skyldes et netværksproblem, en utilgængelig FluffNet-server, en udløbet eller udskiftet signeringsnøgle, et konfigurationsproblem med arkivet, en uventet nøgle eller et muligt kompromitteret arkiv. Acceptér ikke en uventet nøgle manuelt, medmindre Fluff Linux offentliggør bekræftede instruktioner."

msgid "Repository: %1"
msgstr "Arkiv: %1"

msgid "The official FluffNet repository signing key was verified and added to Pacman."
msgstr "Den officielle signeringsnøgle til FluffNet-arkivet blev bekræftet og føjet til Pacman."

msgid "Technical details"
msgstr "Tekniske detaljer"

msgid "Repository signing-key verification technical details"
msgstr "Tekniske detaljer for verifikation af lagersigneringsnøgle"

msgid "Failure category: %1"
msgstr "Fejlkategori: %1"

msgid "Expected fingerprint: %1"
msgstr "Forventet fingeraftryk: %1"

msgid "Received fingerprint: %1"
msgstr "Modtaget fingeraftryk: %1"

msgid "Requested signing-key fingerprint: %1"
msgstr "Anmodet signaturnøgle-fingeraftryk: %1"

msgid "Pacman exit status: %1"
msgstr "Pacman exit status: %1"

msgid "FLU version: %1"
msgstr "FLU-version: %1"

msgid "Fluff Linux version: %1"
msgstr "Fluff Linux-version: %1"

msgid "Try Again"
msgstr "Prøv igen"

msgid "Copy Technical Details"
msgstr "Kopiér tekniske detaljer"

msgid "Open an Issue on GitHub"
msgstr "Åbn et problem på GitHub"
51 changes: 51 additions & 0 deletions po/de/kcm_fluffupdates.po
Original file line number Diff line number Diff line change
Expand Up @@ -215,3 +215,54 @@ msgstr "Ein Dateikonflikt wurde erkannt und behoben. %1 wurde in %2 umbenannt. D

msgid "The conflicting package could not be removed. Please seek support."
msgstr "Das in Konflikt stehende Paket konnte nicht entfernt werden. Bitte wenden Sie sich an den Support."


#. TRANSLATORS: Security failure shown when FLU refuses an unverified repository key.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system."
msgstr "Fluff Linux Update konnte den Signaturschlüssel des FluffNet-Repositorys nicht überprüfen. Das Update wurde zum Schutz Ihres Systems gestoppt."

#. TRANSLATORS: Full security guidance; keep the warning against manual acceptance.
msgid "Fluff Linux Update could not verify the FluffNet repository signing key. The update was stopped to protect your system. This may indicate a network problem, an unavailable FluffNet server, an expired or rotated signing key, a repository configuration problem, an unexpected key, or a possible repository compromise. Do not manually accept an unexpected key unless Fluff Linux publishes verified instructions."
msgstr "Fluff Linux Update konnte den Signaturschlüssel des FluffNet-Repositorys nicht überprüfen. Das Update wurde zum Schutz Ihres Systems gestoppt. Dies kann auf ein Netzwerkproblem, einen nicht verfügbaren FluffNet-Server, einen abgelaufenen oder ausgetauschten Signaturschlüssel, ein Repository-Konfigurationsproblem, einen unerwarteten Schlüssel oder eine mögliche Kompromittierung des Repositorys hinweisen. Akzeptieren Sie einen unerwarteten Schlüssel nicht manuell, es sei denn, Fluff Linux veröffentlicht verifizierte Anweisungen."

msgid "Repository: %1"
msgstr "Repository: %1"

msgid "The official FluffNet repository signing key was verified and added to Pacman."
msgstr "Der offizielle Signaturschlüssel des FluffNet-Repositorys wurde überprüft und zu Pacman hinzugefügt."

msgid "Technical details"
msgstr "Technische Details"

msgid "Repository signing-key verification technical details"
msgstr "Technische Details zur Repository-Signaturschlüsselüberprüfung"

msgid "Failure category: %1"
msgstr "Fehlerkategorie: %1"

msgid "Expected fingerprint: %1"
msgstr "Erwarteter Fingerabdruck: %1"

msgid "Received fingerprint: %1"
msgstr "Empfangener Fingerabdruck: %1"

msgid "Requested signing-key fingerprint: %1"
msgstr "Angeforderter Fingerabdruck des Signaturschlüssels: %1"

msgid "Pacman exit status: %1"
msgstr "Pacman-Exit-Status: %1"

msgid "FLU version: %1"
msgstr "FLU-Version: %1"

msgid "Fluff Linux version: %1"
msgstr "Fluff-Linux-Version: %1"

msgid "Try Again"
msgstr "Versuchen Sie es erneut"

msgid "Copy Technical Details"
msgstr "Technische Details kopieren"

msgid "Open an Issue on GitHub"
msgstr "Öffnen Sie ein Problem auf GitHub"
Loading