From 50decdd3dd2c02bd3381a9a2f1ef1fc888c4fb67 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sat, 12 Dec 2020 19:45:09 +0100 Subject: Fix CHANGELOG --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index c5a6325..321509f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ The modifications are: -IsoDumper 1.28 +IsoDumper 1.29 -------------- - Fix creating ~/.isodumper for logging when not yet existing -- cgit v1.2.1 From 13d33efae28b8828cc37e6bdfc5c30981f6d1ea2 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 14 Dec 2020 18:42:49 +0100 Subject: Add catching signal form udisks when device is added or removed --- lib/isodumper.py | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/lib/isodumper.py b/lib/isodumper.py index 16e6804..540b0b1 100755 --- a/lib/isodumper.py +++ b/lib/isodumper.py @@ -25,11 +25,9 @@ # Requires python3-parted -# ensure we're using the latest build, if called from our build environment + import sys import importlib -import logging - try: from isodumper import version except: @@ -49,6 +47,10 @@ import gettext from subprocess import Popen, PIPE from pydbus import SystemBus +import logging +import threading +from gi.repository import GLib +from queue import SimpleQueue import psutil import manatools.args as args @@ -162,7 +164,7 @@ class ParseCLI(args.AppArgs): class IsoDumper(object): - def get_devices(self): + def get_devices(self, selected=None): self.list = self.u.find_devices() while len(self.list) == 0: if self.nodevDialog(): @@ -173,7 +175,9 @@ class IsoDumper(object): if len(self.list) > 0: for name, path, size in self.list: if size != 0: - self.devicelist.addItem(str(name + ' (' + path.lstrip() + ') ' + self.sizeof_fmt(size)), False) + label = str(name + ' (' + path.lstrip() + ') ' + self.sizeof_fmt(size)) + sel = (label == selected) if selected else False + self.devicelist.addItem(label, sel) return True def udev_wait(self, operation): @@ -202,6 +206,14 @@ class IsoDumper(object): self.dialog.recalcLayout() self.restore() + def update_list_on_event(self): + selitem = self.devicelist.selectedItem().label() + self.devicelist.deleteAllItems() + self.get_devices(selected = selitem) + if self.devicelist.selectedItem().label() != selitem: + self.restore() + self.dialog.recalcLayout() + def device_selected(self): selitem = self.devicelist.selectedItem() if selitem is not None: @@ -505,6 +517,8 @@ class IsoDumper(object): self.write_logfile() self.dialog.destroy() self.dialog = None + self.glib_loop.quit() + self.glib_thread.join() def write_logfile(self): logpath = os.path.join(os.path.expanduser('~'), '.isodumper') @@ -694,7 +708,23 @@ exFAT, NTFS or ext. You can specify a volume name and the format in a new dialog self.device_selected() self.dialog.recalcLayout() self.ancrage.showChild() - + self.uEventQueue = SimpleQueue() + self.glib_loop = GLib.MainLoop() + self.glib_thread = threading.Thread(target=self.glib_mainloop, args=(self.glib_loop,)) + self.glib_thread.start() + + + def glib_mainloop(self, loop): + ''' + thread function for glib main loop + listen to signal from udisks + ''' + self.u.iface["org.freedesktop.DBus.ObjectManager"].InterfacesAdded.connect(self.device_changed) + loop.run() + + def device_changed(self, a, b): + self.uEventQueue.put({'event': "device-changed", 'value': True}) + def ask_format(self): atelier = yui.YUI.widgetFactory() dialog = atelier.createPopupDialog() @@ -790,7 +820,7 @@ exFAT, NTFS or ext. You can specify a volume name and the format in a new dialog def handleevent(self): self.traitement = None while True: - event = self.dialog.waitForEvent() + event = self.dialog.waitForEvent(100) if event.eventType() == yui.YEvent.CancelEvent: self.close() break @@ -854,6 +884,12 @@ exFAT, NTFS or ext. You can specify a volume name and the format in a new dialog pass if event.widget() == self.aboutbt: self.aboutDialog() + try: + item = self.uEventQueue.get_nowait() + if item['event'] == "device-changed": + self.update_list_on_event() + except Exception as e: + pass def run(self): try: -- cgit v1.2.1 From a5ff14b2e46f5270d06f970152d1c9e1fc40cee7 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Fri, 18 Dec 2020 21:51:05 +0100 Subject: Verify also detached signatures --- backend/raw_write.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/raw_write.py b/backend/raw_write.py index 30b658c..1c1e216 100755 --- a/backend/raw_write.py +++ b/backend/raw_write.py @@ -145,12 +145,20 @@ class Dumper(object): self.sum_check_searched = True with open(sig_file, 'rb') as g: self.signature_found = True - verified = gpg.verify_file(g) + verified = gpg.verify_file(g, close_file=False) if verified: self.signature_checked = True logging.debug("signature checked") + g.close() else: - self.signature_checked = False + g.seek(0) + verified = gpg.verify_file(g, self.source_file) + if verified: + self.signature_checked = True + logging.debug("Detached signature is OK") + else: + self.signature_checked = False + logging.debug("Signature is false") except: self.signature_found = False logging.info(_("Signature file {} not found\n").format(sig_file)) -- cgit v1.2.1 From f4171e7499ef27db9e1bdf92ea9c254a5f4436c2 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Fri, 18 Dec 2020 22:46:20 +0100 Subject: Display warning instead of succes when signatures or sums doesn't match --- backend/raw_write.py | 4 +++- lib/isodumper.py | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/backend/raw_write.py b/backend/raw_write.py index 1c1e216..164089b 100755 --- a/backend/raw_write.py +++ b/backend/raw_write.py @@ -198,6 +198,7 @@ class Dumper(object): sha512func.update(block) sha512sumcalc=sha512func.hexdigest().upper() f.close() + self.return_state = True if self.signature_found and not self.signature_checked: #, keep the pourcent, this is the place for source file name self.return_message = _('Invalid signature for %s')%self.source_file @@ -211,17 +212,18 @@ class Dumper(object): else : if self.signature_found: self.return_message +="\n" + _("The signature of the sum is false !").format(self.sum_type) + self.return_state = False else: #, keep the bracket, this is the place for sum type self.return_message +="\n" + _("The {} sum check is OK but the signature can't be found").format(self.sum_type) else: self.return_message +="\n" + _("/!\\The computed and stored sums don't match") + self.return_state = False #except: #pass self._progress = 100 logging.info(self.return_message) - self.return_state = True self.finished.set() def udev_wait(self, operation): diff --git a/lib/isodumper.py b/lib/isodumper.py index 540b0b1..9e68e3f 100755 --- a/lib/isodumper.py +++ b/lib/isodumper.py @@ -417,7 +417,7 @@ class IsoDumper(object): self.progress.setValue(progress) self.dialog.pollEvent() time.sleep(.5) - success, message = iface.end() + nowarning, message = iface.end() self.progress.setEnabled() self.logger(message) # Add persistent partition if asked @@ -455,7 +455,10 @@ class IsoDumper(object): self.udev_wait(_("unmounting")) if success: self.u.eject(target) - self.success() + if nowarning : + self.success() + else: + self.warning() else: self.emergency(message) self.restore() @@ -477,6 +480,16 @@ class IsoDumper(object): if self.ask_OK(info): return + def warning(self): + self.operation = False + self.final_unsensitive() + info = Info(_("Warning"), True, _("The operation completed, but with anomalies.\n\ + Check carefully the messages in log view.\n\ + You are free to unplug it now, a logfile \n\ +(/home/-user- or /root)/.isodumper/isodumper.log will be saved when\n\ + you close the application.")) + if self.ask_OK(info): + return def confirm_close(self, *args): if not self.operation: # no writing , backup nor format running self.close() -- cgit v1.2.1 From 278f5b32114820e49ec834045df360736a0dc0c7 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sat, 19 Dec 2020 18:27:18 +0100 Subject: Update README --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7186356..631ac27 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,19 @@ Requirements - python3-parted - python3-pydbus - udisks2 -- libyui and declanation of ncurses, gtk or Qt +- libyui and declanation of ncurses, gtk or Qt, python bindings - libyui-mga - cryptsetup - fdisk - e2fsprogs +- python3-gnupg +- python3-manatools +Some explanations +----------------- +The application comprises two parts: a GUI and a backend, called magiback. +The GUI run in user mode, and call backend feature over DBUS. The backend run as deamon using systemd service and is launched as needed. The authorization is called to run the backend. +Logs of the backend are stored in /var/log/magiback.log License -------- -- cgit v1.2.1 From d697eb8a6de5c3e32e4029dabfd46bcda0645388 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sat, 19 Dec 2020 18:29:01 +0100 Subject: 1.30 --- CHANGELOG | 4 ++++ Makefile | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 321509f..978af7b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,8 @@ The modifications are: +IsoDumper 1.30 +-------------- + - Verify signatures also when they are detached (mga#27667) + - Display warning instead of success when sums or signatures doesn't match (mga#27667) IsoDumper 1.29 -------------- diff --git a/Makefile b/Makefile index f91d325..9547ccd 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ DBUSDIR=$(SYSCONFDIR)/dbus-1 SYSTEMDCONFDIR=$(LIBDIR)/systemd/system/ PACKAGE = isodumper -VERSION = 1.29 +VERSION = 1.30 GITPATH = git://git.mageia.org/software/isodumper all: version dirs pofiles -- cgit v1.2.1 From d3f06143079d72b8da8d3ec34c65d5983b2c6251 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sun, 20 Dec 2020 16:51:32 +0100 Subject: Fix call to warning message dialog --- lib/isodumper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/isodumper.py b/lib/isodumper.py index 9e68e3f..669a2b9 100755 --- a/lib/isodumper.py +++ b/lib/isodumper.py @@ -458,7 +458,7 @@ class IsoDumper(object): if nowarning : self.success() else: - self.warning() + self.warn() else: self.emergency(message) self.restore() @@ -480,7 +480,7 @@ class IsoDumper(object): if self.ask_OK(info): return - def warning(self): + def warn(self): self.operation = False self.final_unsensitive() info = Info(_("Warning"), True, _("The operation completed, but with anomalies.\n\ -- cgit v1.2.1 From 3bd2651a5be5a37574f199669a45c2698b9caa5c Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sun, 20 Dec 2020 16:53:17 +0100 Subject: Fix initialization of flag of signature checking --- backend/raw_write.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/raw_write.py b/backend/raw_write.py index 164089b..cdac7e2 100755 --- a/backend/raw_write.py +++ b/backend/raw_write.py @@ -127,6 +127,7 @@ class Dumper(object): def _get_sum(self, source): self.return_state = False + self.signature_checked = False mageia_keyid = "835E41F4EDCA7A90" logging.debug("Starting getting sum") # Check if the sum file has a valid signature -- cgit v1.2.1 From 4d72d0da0bd7960bba8eef08bb013290a61d9696 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 21 Dec 2020 08:07:21 +0100 Subject: Fix return state in raw_write when signature is false --- backend/raw_write.py | 7 +++---- lib/isodumper.py | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/backend/raw_write.py b/backend/raw_write.py index cdac7e2..508a9ae 100755 --- a/backend/raw_write.py +++ b/backend/raw_write.py @@ -119,10 +119,10 @@ class Dumper(object): return ifc.close() self._progress = 100 - self.finished.set() self.return_state = True self.return_message = _("Writing terminated") logging.debug(self.return_message) + self.finished.set() return def _get_sum(self, source): @@ -175,7 +175,6 @@ class Dumper(object): def _check_write(self, target, source): logging.debug("Start checking") - self.return_state = False self.return_message = "" b = os.path.getsize(source) # Compute the sum from the written device @@ -203,11 +202,12 @@ class Dumper(object): if self.signature_found and not self.signature_checked: #, keep the pourcent, this is the place for source file name self.return_message = _('Invalid signature for %s')%self.source_file + self.return_state = False if (self.sum_check == "") : # Can't get stored sum self.return_message += _('SHA3 sum: {}').format(sha512sumcalc) # compare the sums elif (sha512sumcalc == self.sum_check) : - if self.signature_checked: + if self.signature_checked and self.signature_found: #, keep the bracket, this is the place for sum type self.return_message +="\n" + _("The {} sum check is OK and the sum is signed").format(self.sum_type) else : @@ -223,7 +223,6 @@ class Dumper(object): #except: #pass self._progress = 100 - logging.info(self.return_message) self.finished.set() diff --git a/lib/isodumper.py b/lib/isodumper.py index 669a2b9..9bde522 100755 --- a/lib/isodumper.py +++ b/lib/isodumper.py @@ -411,12 +411,12 @@ class IsoDumper(object): self.dialog.pollEvent() # Checking iface.check_write(target, source) - progress = iface.progress + progress = 0 while progress < 100: - progress = iface.progress self.progress.setValue(progress) self.dialog.pollEvent() time.sleep(.5) + progress = iface.progress nowarning, message = iface.end() self.progress.setEnabled() self.logger(message) -- cgit v1.2.1 From c9fbbbe79cbd082a3bc7be526a9eaa32d5ab3ba2 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 21 Dec 2020 08:09:11 +0100 Subject: 1.31 --- CHANGELOG | 5 +++++ Makefile | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 978af7b..5f649b6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,9 @@ The modifications are: + +IsoDumper 1.31 +-------------- + - Fix display of warning + IsoDumper 1.30 -------------- - Verify signatures also when they are detached (mga#27667) diff --git a/Makefile b/Makefile index 9547ccd..681c523 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ DBUSDIR=$(SYSCONFDIR)/dbus-1 SYSTEMDCONFDIR=$(LIBDIR)/systemd/system/ PACKAGE = isodumper -VERSION = 1.30 +VERSION = 1.31 GITPATH = git://git.mageia.org/software/isodumper all: version dirs pofiles -- cgit v1.2.1 From 80de1c22c863634cd8dafbf2eb8416d60d2579de Mon Sep 17 00:00:00 2001 From: Yuri Chornoivan Date: Mon, 21 Dec 2020 12:15:26 +0200 Subject: Update Greek translation from Tx --- po/el.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/po/el.po b/po/el.po index ecf44b0..6bb8013 100644 --- a/po/el.po +++ b/po/el.po @@ -8,18 +8,18 @@ # Dimitrios Glentadakis , 2018 # dtsiamasiotis , 2013-2014 # FIRST AUTHOR , 2008 -# Δημήτρης Σπέντζος , 2014 +# Dimitris Spentzos , 2014 # Jim Spentzos, 2014 -# Δημήτρης Σπέντζος , 2014 -# Δημήτρης Σπέντζος , 2014 -# Δημήτρης Σπέντζος , 2014 +# Dimitris Spentzos , 2014 +# Dimitris Spentzos , 2014 +# Dimitris Spentzos , 2014 msgid "" msgstr "" "Project-Id-Version: Mageia\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 12:08+0100\n" -"PO-Revision-Date: 2020-10-30 11:19+0000\n" -"Last-Translator: Yuri Chornoivan \n" +"PO-Revision-Date: 2020-12-21 05:27+0000\n" +"Last-Translator: Dimitrios Glentadakis \n" "Language-Team: Greek (http://www.transifex.com/MageiaLinux/mageia/language/" "el/)\n" "Language: el\n" @@ -92,19 +92,19 @@ msgstr "Η μόνιμη κατάτμηση δημιουργήθηκε" #: backend/raw_write.py:281 msgid "formatting partition" -msgstr "" +msgstr "μορφοποίηση κατάτμησης" #: backend/raw_write.py:329 msgid "opening encrypted partition" -msgstr "" +msgstr "άνοιγμα κρυπτογραφημένης κατάτμησης" #: backend/raw_write.py:352 msgid "formatting encrypted partition" -msgstr "" +msgstr "μορφοποίηση κρυπτογραφημένης κατάτμησης" #: backend/raw_write.py:374 msgid "closing encrypted partition" -msgstr "" +msgstr "κλείσιμο κρυπτογραφημένης κατάτμησης" #: lib/isodumper.py:208 msgid "Target Device: " @@ -161,7 +161,7 @@ msgstr "Γράφτηκε: {}%" #: lib/isodumper.py:279 lib/isodumper.py:375 lib/isodumper.py:437 msgid "unmounting" -msgstr "" +msgstr "αποπροσάρτηση" #: lib/isodumper.py:307 msgid "Backup confirmation" -- cgit v1.2.1