Byla vydána (𝕏) nová verze 24.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 24.7 je Thriving Tiger. Přehled novinek v příspěvku na fóru.
Binarly REsearch upozorňuje na bezpečnostní problém PKFail (YouTube) v ekosystému UEFI. Stovky modelů zařízení používají pro Secure Boot testovací Platform Key vygenerovaný American Megatrends International (AMI) a jeho privátní část byla při úniku dat prozrazena. Do milionů zařízení (seznam v pdf) po celém světě tak útočníci mohou do Secure Bootu vložit podepsaný malware. Otestovat firmware si lze na stránce pk.fail. Ukázka PoC na Linuxu na Windows na YouTube.
Mobilní operační systém /e/OS (Wikipedie) založený na Androidu / LineageOS, ale bez aplikací a služeb od Googlu, byl vydán ve verzi 2.2 (Mastodon, 𝕏). Přehled novinek na GitLabu. Vypíchnuta je rodičovská kontrola.
Společnost OpenAI představila vyhledávač SearchGPT propojující OpenAI modely umělé inteligence a informace z webů v reálném čase. Zatím jako prototyp pro vybrané uživatele. Zapsat se lze do pořadníku čekatelů.
Distribuce Linux Mint 22 „Wilma“ byla vydána. Je založená na Ubuntu 24.04 LTS, ale s desktopovým prostředím Cinnamon (aktuálně verze 6.2), příp. MATE nebo Xfce, balíkem aplikací XApp, integrací balíčků Flatpak a dalšími změnami. Více v přehledu novinek a poznámkách k vydání.
Příspěvek na blogu Truffle Security: Kdokoli může přistupovat ke smazaným a privátním repozitářům na GitHubu.
Byla vydána nová verze 14 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v cgitu. Vypíchnout lze podporu rozšíření v Lua.
Byla vydána verze 1.80.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Apple oznámil, že v beta verzi spustil své Apple Maps na webu. Podporován je také webový prohlížeč Chrome. Ne však na Linuxu.
Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 65 tisíc vývojářů. Z Česka jich bylo 710. Ze Slovenska 246.
#!/usr/bin/python import gtk, sys, os, glob, re f = ['*'] cd = os.path.realpath(os.curdir) + '/' def delprefix(x): if x.startswith(cd): return x[len(cd):] return x def select_files(*args): global f, files selector = gtk.FileSelection('Select files') selector.set_select_multiple(True) selector.run() f = [delprefix(x) for x in selector.get_selections()] print f selector.destroy() files.set_text(' '.join(f)) def slabel(text, table, row, widget): label = gtk.Label() label.set_text_with_mnemonic(text) label.set_alignment(0, 0.5) label.set_mnemonic_widget(widget) table.attach(label, 0, 1, row, row+1) dialog = gtk.Dialog('Search & Replace', None, 0, (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) dialog.set_border_width(8) table = gtk.Table(6, 3, False) table.set_row_spacings(4) table.set_col_spacings(4) dialog.vbox.pack_start(table) dialog.vbox.set_spacing(4) search = gtk.Entry() slabel('_Search for', table, 0, search) table.attach(search, 1, 2, 0, 1) replace = gtk.Entry() slabel('_Replace with', table, 1, replace) table.attach(replace, 1, 2, 1, 2) files = gtk.Entry() slabel('In _files', table, 2, files) files.set_text(' '.join(f)) table.attach(files, 1, 2, 2, 3) browse = gtk.Button('_Browse...') table.attach(browse, 2, 3, 2, 3) browse.connect('clicked', select_files) recursive = gtk.CheckButton('Recurse into sub_directories') table.attach(recursive, 0, 2, 3, 4) globally = gtk.CheckButton('Replace _all occurences') table.attach(globally, 0, 2, 4, 5) ignorecase = gtk.CheckButton('_Ignore case') table.attach(ignorecase, 0, 2, 5, 6) table.show_all() response = dialog.run() f = files.get_text().split(' ') f = reduce(lambda x, y: x+y, [glob.glob(x) for x in f]) search = search.get_text().replace('/', '\\/') replace = replace.get_text().replace('/', '\\/') if (response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT or not f or not search): sys.exit(0) recursive = recursive.get_active() ignorecase = ('', 'i')[ignorecase.get_active()] globally = ('', 'g')[globally.get_active()] dialog.destroy() ff = [] for x in f: if os.path.isdir(x): if recursive: p = os.popen('find ' + re.sub(r'([$`"\\])', r'\\\1', x) + ' -type f', 'r') ff.extend([z.strip() for z in p.readlines()]) p.close() else: ff.append(x) ff = dict([(x, 1) for x in ff]).keys() exp = 's/%s/%s/%s%s' % (search, replace, globally, ignorecase) if ff: os.execv('/bin/sed', ['sed', '-i', '-e', exp, '--'] + ff)
Tiskni
Sdílej: