openSUSE Commits
Threads by month
- ----- 2024 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
July 2024
- 1 participants
- 1521 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gdcm for openSUSE:Factory checked in at 2024-07-22 17:14:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gdcm (Old)
and /work/SRC/openSUSE:Factory/.gdcm.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gdcm"
Mon Jul 22 17:14:48 2024 rev:21 rq:1186171 version:3.0.24
Changes:
--------
--- /work/SRC/openSUSE:Factory/gdcm/gdcm.changes 2024-05-14 13:40:57.232258438 +0200
+++ /work/SRC/openSUSE:Factory/.gdcm.new.17339/gdcm.changes 2024-07-22 17:15:05.094264334 +0200
@@ -1,0 +2,6 @@
+Wed Jul 3 21:16:29 UTC 2024 - Christophe Marin <christophe(a)krop.fr>
+
+- Force c++-20 on factory to fix build failure with poppler >= 24.05
+ (https://sourceforge.net/p/gdcm/bugs/561)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gdcm.spec ++++++
--- /var/tmp/diff_new_pack.ldpnrX/_old 2024-07-22 17:15:07.046342831 +0200
+++ /var/tmp/diff_new_pack.ldpnrX/_new 2024-07-22 17:15:07.046342831 +0200
@@ -175,7 +175,10 @@
-DGDCM_USE_JPEGLS:BOOL=ON \
-DGDCM_USE_SYSTEM_LIBXML2:BOOL=ON \
-DGDCM_USE_SYSTEM_JSON:BOOL=ON \
- -DGDCM_USE_SYSTEM_POPPLER:BOOL=ON
+ -DGDCM_USE_SYSTEM_POPPLER:BOOL=ON \
+%if 0%{?suse_version} > 1500
+ -DCMAKE_CXX_STANDARD=20
+%endif
%make_build
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package liburing for openSUSE:Factory checked in at 2024-07-22 17:14:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/liburing (Old)
and /work/SRC/openSUSE:Factory/.liburing.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "liburing"
Mon Jul 22 17:14:46 2024 rev:22 rq:1188710 version:2.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/liburing/liburing.changes 2024-07-14 08:48:50.688808084 +0200
+++ /work/SRC/openSUSE:Factory/.liburing.new.17339/liburing.changes 2024-07-22 17:15:03.958218652 +0200
@@ -1,0 +2,6 @@
+Fri Jul 12 16:49:22 UTC 2024 - David Disseldorp <ddiss(a)suse.com>
+
+- Fix buf-ring-nommap.t test failure
+ * test-buf-ring-nommap-zero-the-ringbuf-memory.patch
+
+-------------------------------------------------------------------
New:
----
test-buf-ring-nommap-zero-the-ringbuf-memory.patch
BETA DEBUG BEGIN:
New:- Fix buf-ring-nommap.t test failure
* test-buf-ring-nommap-zero-the-ringbuf-memory.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ liburing.spec ++++++
--- /var/tmp/diff_new_pack.z2CgvY/_old 2024-07-22 17:15:04.818253235 +0200
+++ /var/tmp/diff_new_pack.z2CgvY/_new 2024-07-22 17:15:04.818253235 +0200
@@ -25,6 +25,7 @@
Group: Development/Libraries/C and C++
URL: https://git.kernel.dk/cgit/liburing
Source: https://git.kernel.dk/cgit/liburing/snapshot/%{name}-%{version}.tar.bz2
+Patch0: test-buf-ring-nommap-zero-the-ringbuf-memory.patch
BuildRequires: gcc-c++
BuildRequires: pkgconfig
BuildRequires: procps
@@ -86,8 +87,7 @@
# io_uring syscalls not supported as of qemu 7.0.0 and would test the host
# kernel anyway not the target kernel..
%if !0%{?qemu_user_space_build}
-# buf-ring-nommap.t crashes with kernel 6.9
-/usr/bin/make %{?_smp_mflags} runtests TEST_EXCLUDE='buf-ring-nommap.t'
+/usr/bin/make %{?_smp_mflags} runtests
%endif
%install
++++++ test-buf-ring-nommap-zero-the-ringbuf-memory.patch ++++++
From 8100d7b5f862fa514d821e8bd8f99d0de79af571 Mon Sep 17 00:00:00 2001
From: "Jiri Slaby (SUSE)" <jirislaby(a)kernel.org>
Date: Fri, 12 Jul 2024 13:17:03 +0200
Subject: [PATCH] test/buf-ring-nommap: zero the ringbuf memory
The test crashes when run under the openSUSE build system. It sets
MALLOC_PERTURB_=69 in the environment, so the allocated memory is
initialized to 0xba.
Later in io_uring_get_sqe() -> _io_uring_get_sqe():
1424 if (next - head <= sq->ring_entries) {
(gdb) p *sq
$2 = {khead = 0x55555555d000, ktail = 0x55555555d004,
kring_mask = 0x55555555d010, kring_entries = 0x55555555d018,
kflags = 0x55555555d024, kdropped = 0x55555555d020, array = 0x0,
sqes = 0x55555555c000, sqe_head = 0, sqe_tail = 0, ring_sz = 0,
ring_ptr = 0x55555555d000, ring_mask = 0, ring_entries = 1, pad = {0, 0}}
(gdb) p sq->ring_entries
$3 = 1
(gdb) p next
$4 = 1
(gdb) p/x head
$6 = 0xbabababa
And that causes a crash, of course.
Fix that by zeroing the memory after posix_memalign().
Signed-off-by: Jiri Slaby (SUSE) <jirislaby(a)kernel.org>
---
test/buf-ring-nommap.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/test/buf-ring-nommap.c b/test/buf-ring-nommap.c
index 1e47f28..17c1495 100644
--- a/test/buf-ring-nommap.c
+++ b/test/buf-ring-nommap.c
@@ -41,6 +41,8 @@ int main(int argc, char *argv[])
if (posix_memalign(&ring_mem, 16384, 16384))
return T_EXIT_FAIL;
+ memset(ring_mem, 0, 16384);
+
p.flags = IORING_SETUP_NO_MMAP;
ret = io_uring_queue_init_mem(1, &ring, &p, ring_mem, 16384);
if (ret < 0) {
--
2.35.3
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kf6-kwidgetsaddons for openSUSE:Factory checked in at 2024-07-22 17:14:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kwidgetsaddons (Old)
and /work/SRC/openSUSE:Factory/.kf6-kwidgetsaddons.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-kwidgetsaddons"
Mon Jul 22 17:14:44 2024 rev:8 rq:1188708 version:6.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kwidgetsaddons/kf6-kwidgetsaddons.changes 2024-07-14 08:53:38.723346271 +0200
+++ /work/SRC/openSUSE:Factory/.kf6-kwidgetsaddons.new.17339/kf6-kwidgetsaddons.changes 2024-07-22 17:15:02.838173613 +0200
@@ -1,0 +2,6 @@
+Fri Jul 19 16:32:37 UTC 2024 - Christophe Marin <christophe(a)krop.fr>
+
+- Add upstream fix:
+ * 0001-Partially-revert-cccaa8.patch
+
+-------------------------------------------------------------------
New:
----
0001-Partially-revert-cccaa8.patch
BETA DEBUG BEGIN:
New:- Add upstream fix:
* 0001-Partially-revert-cccaa8.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kf6-kwidgetsaddons.spec ++++++
--- /var/tmp/diff_new_pack.0nSRjx/_old 2024-07-22 17:15:03.414196776 +0200
+++ /var/tmp/diff_new_pack.0nSRjx/_new 2024-07-22 17:15:03.414196776 +0200
@@ -35,6 +35,8 @@
Source1: %{rname}-%{version}.tar.xz.sig
Source2: frameworks.keyring
%endif
+#PATCH-FIX-UPSTREAM
+Patch0: 0001-Partially-revert-cccaa8.patch
BuildRequires: doxygen
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_bugfix_version}
++++++ 0001-Partially-revert-cccaa8.patch ++++++
From c0e1e0010f6feb6532486135dd77a1a4cdc72831 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii(a)kde.org>
Date: Tue, 16 Jul 2024 12:43:16 +0300
Subject: [PATCH] Partially revert cccaa8f89897146043a535d45a276e3a57412815
The widget may not be properly integrated into the widget tree when
KJobWidgets::setWindow() is called.
(cherry picked from commit 185e946c8b918471ee5164815d3296bc06d8a2e7)
---
src/kjobwidgets.cpp | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/src/kjobwidgets.cpp b/src/kjobwidgets.cpp
index b092a2e0..a64a422e 100644
--- a/src/kjobwidgets.cpp
+++ b/src/kjobwidgets.cpp
@@ -14,15 +14,8 @@ void KJobWidgets::setWindow(QObject *job, QWidget *widget)
{
job->setProperty("widget", QVariant::fromValue(widget));
- QWindow *windowHandle = nullptr;
- if (widget) {
- QWidget *window = widget->window();
- if (window->winId()) {
- windowHandle = window->windowHandle();
- }
- }
-
- setWindowHandle(job, windowHandle);
+ QWindow *window = widget ? widget->windowHandle() : nullptr;
+ setWindowHandle(job, window);
}
void KJobWidgets::setWindowHandle(QObject *job, QWindow *window)
--
2.45.2
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kernel-source-longterm for openSUSE:Factory checked in at 2024-07-22 17:14:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kernel-source-longterm (Old)
and /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source-longterm"
Mon Jul 22 17:14:25 2024 rev:24 rq:1188543 version:6.6.41
Changes:
--------
--- /work/SRC/openSUSE:Factory/kernel-source-longterm/kernel-longterm.changes 2024-07-18 19:15:34.925305618 +0200
+++ /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.17339/kernel-longterm.changes 2024-07-22 17:14:44.121433175 +0200
@@ -1,0 +2,214 @@
+Thu Jul 18 14:13:26 CEST 2024 - rfrohl(a)suse.com
+
+- Linux 6.6.41 (bsc#1218260).
+- i2c: rcar: fix error code in probe() (bsc#1218260).
+- kbuild: Make ld-version.sh more robust against version string
+ changes (bsc#1218260).
+- x86/bhi: Avoid warning in #DB handler due to BHI mitigation
+ (bsc#1218260).
+- x86/entry/64: Remove obsolete comment on tracing vs. SYSRET
+ (bsc#1218260).
+- x86/entry: Rename ignore_sysret() (bsc#1218260).
+- i2c: rcar: clear NO_RXDMA flag after resetting (bsc#1218260).
+- i2c: testunit: avoid re-issued work after read message
+ (bsc#1218260).
+- i2c: rcar: ensure Gen3+ reset does not disturb local targets
+ (bsc#1218260).
+- i2c: rcar: introduce Gen4 devices (bsc#1218260).
+- i2c: rcar: reset controller is mandatory for Gen3+
+ (bsc#1218260).
+- i2c: mark HostNotify target address as used (bsc#1218260).
+- i2c: rcar: bring hardware to known state when probing
+ (bsc#1218260).
+- btrfs: tree-checker: add type and sequence check for inline
+ backrefs (bsc#1218260).
+- sched: Move psi_account_irqtime() out of update_rq_clock_task()
+ hotpath (bsc#1218260).
+- ext4: avoid ptr null pointer dereference (bsc#1218260).
+- nilfs2: fix kernel bug on rename operation of broken directory
+ (bsc#1218260).
+- selftests/net: fix gro.c compilation failure due to non-existent
+ opt_ipproto_off (bsc#1218260).
+- mm/damon/core: merge regions aggressively when max_nr_regions
+ is unmet (bsc#1218260).
+- mm/shmem: disable PMD-sized page cache if needed (bsc#1218260).
+- misc: fastrpc: Restrict untrusted app to attach to privileged PD
+ (bsc#1218260).
+- misc: fastrpc: Fix ownership reassignment of remote heap
+ (bsc#1218260).
+- misc: fastrpc: Fix memory leak in audio daemon attach operation
+ (bsc#1218260).
+- misc: fastrpc: Copy the complete capability structure to user
+ (bsc#1218260).
+- misc: fastrpc: Avoid updating PD type for capability request
+ (bsc#1218260).
+- misc: fastrpc: Fix DSP capabilities request (bsc#1218260).
+- wireguard: send: annotate intentional data race in checking
+ empty queue (bsc#1218260).
+- wireguard: queueing: annotate intentional data race in cpu
+ round robin (bsc#1218260).
+- wireguard: allowedips: avoid unaligned 64-bit memory accesses
+ (bsc#1218260).
+- wireguard: selftests: use acpi=off instead of -no-acpi for
+ recent QEMU (bsc#1218260).
+- cpufreq: Allow drivers to advertise boost enabled (bsc#1218260).
+- cpufreq: ACPI: Mark boost policy as enabled when setting boost
+ (bsc#1218260).
+- ACPI: processor_idle: Fix invalid comparison with insertion
+ sort for latency (bsc#1218260).
+- libceph: fix race between delayed_work() and ceph_monc_stop()
+ (bsc#1218260).
+- pmdomain: qcom: rpmhpd: Skip retention level for Power Domains
+ (bsc#1218260).
+- Fix userfaultfd_api to return EINVAL as expected (bsc#1218260).
+- ALSA: hda/realtek: Limit mic boost on VAIO PRO PX (bsc#1218260).
+- ALSA: hda/realtek: Enable Mute LED on HP 250 G7 (bsc#1218260).
+- ALSA: hda/realtek: add quirk for Clevo V5[46]0TU (bsc#1218260).
+- tty: serial: ma35d1: Add a NULL check for of_node (bsc#1218260).
+- platform/x86: toshiba_acpi: Fix array out-of-bounds access
+ (bsc#1218260).
+- nvmem: core: only change name to fram for current attribute
+ (bsc#1218260).
+- nvmem: meson-efuse: Fix return value of nvmem callbacks
+ (bsc#1218260).
+- nvmem: rmem: Fix return value of rmem_read() (bsc#1218260).
+- arm64: dts: qcom: sc8280xp-x13s: fix touchscreen power on
+ (bsc#1218260).
+- arm64: dts: qcom: sa8775p: Correct IRQ number of EL2 non-secure
+ physical timer (bsc#1218260).
+- iio: trigger: Fix condition for own trigger (bsc#1218260).
+- ksmbd: discard write access to the directory open (bsc#1218260).
+- mm/filemap: make MAX_PAGECACHE_ORDER acceptable to xarray
+ (bsc#1218260).
+- mm/filemap: skip to create PMD-sized page cache if needed
+ (bsc#1218260).
+- mm: vmalloc: check if a hash-index is in cpu_possible_mask
+ (bsc#1218260).
+- s390/mm: Add NULL pointer check to crst_table_free()
+ base_crst_free() (bsc#1218260).
+- xhci: always resume roothubs if xHC was reset during resume
+ (bsc#1218260).
+- hpet: Support 32-bit userspace (bsc#1218260).
+- misc: microchip: pci1xxxx: Fix return value of nvmem callbacks
+ (bsc#1218260).
+- USB: core: Fix duplicate endpoint bug by clearing reserved
+ bits in the descriptor (bsc#1218260).
+- usb: gadget: configfs: Prevent OOB read/write in
+ usb_string_copy() (bsc#1218260).
+- usb: dwc3: pci: add support for the Intel Panther Lake
+ (bsc#1218260).
+- USB: Add USB_QUIRK_NO_SET_INTF quirk for START BP-850k
+ (bsc#1218260).
+- USB: serial: mos7840: fix crash on resume (bsc#1218260).
+- USB: serial: option: add Rolling RW350-GL variants
+ (bsc#1218260).
+- USB: serial: option: add Netprisma LCUK54 series modules
+ (bsc#1218260).
+- USB: serial: option: add support for Foxconn T99W651
+ (bsc#1218260).
+- USB: serial: option: add Fibocom FM350-GL (bsc#1218260).
+- USB: serial: option: add Telit FN912 rmnet compositions
+ (bsc#1218260).
+- USB: serial: option: add Telit generic core-dump composition
+ (bsc#1218260).
+- net: ks8851: Fix potential TX stall after interface reopen
+ (bsc#1218260).
+- net: ks8851: Fix deadlock with the SPI chip variant
+ (bsc#1218260).
+- tcp: avoid too many retransmit packets (bsc#1218260).
+- tcp: use signed arithmetic in tcp_rtx_probe0_timed_out()
+ (bsc#1218260).
+- Revert "sched/fair: Make sure to try to detach at least one
+ movable task" (bsc#1218260).
+- cifs: fix setting SecurityFlags to true (bsc#1218260).
+- octeontx2-af: fix issue with IPv4 match for RSS (bsc#1218260).
+- octeontx2-af: fix issue with IPv6 ext match for RSS
+ (bsc#1218260).
+- octeontx2-af: fix detection of IP layer (bsc#1218260).
+- octeontx2-af: fix a issue with cpt_lf_alloc mailbox
+ (bsc#1218260).
+- octeontx2-af: replace cpt slot with lf id on reg write
+ (bsc#1218260).
+- i40e: fix: remove needless retries of NVM update (bsc#1218260).
+- ARM: davinci: Convert comma to semicolon (bsc#1218260).
+- firmware: cs_dsp: Use strnlen() on name fields in V1 wmfw files
+ (bsc#1218260).
+- ASoC: SOF: Intel: hda: fix null deref on system suspend entry
+ (bsc#1218260).
+- firmware: cs_dsp: Prevent buffer overrun when processing V2
+ alg headers (bsc#1218260).
+- firmware: cs_dsp: Validate payload length before processing
+ block (bsc#1218260).
+- firmware: cs_dsp: Return error if block header overflows file
+ (bsc#1218260).
+- firmware: cs_dsp: Fix overflow checking of wmfw header
+ (bsc#1218260).
+- arm64: dts: qcom: sc8180x: Fix LLCC reg property again
+ (bsc#1218260).
+- s390: Mark psw in __load_psw_mask() as __unitialized
+ (bsc#1218260).
+- net, sunrpc: Remap EPERM in case of connection failure in
+ xs_tcp_setup_socket (bsc#1218260).
+- net/sched: Fix UAF when resolving a clash (bsc#1218260).
+- udp: Set SOCK_RCU_FREE earlier in udp_lib_get_port()
+ (bsc#1218260).
+- ethtool: netlink: do not return SQI value if link is down
+ (bsc#1218260).
+- ppp: reject claimed-as-LCP but actually malformed packets
+ (bsc#1218260).
+- net: ethernet: mtk-star-emac: set mac_managed_pm when probing
+ (bsc#1218260).
+- bpf: Fail bpf_timer_cancel when callback is being cancelled
+ (bsc#1218260).
+- bpf: replace bpf_timer_init with a generic helper (bsc#1218260).
+- bpf: make timer data struct more generic (bsc#1218260).
+- bpf: fix order of args in call to bpf_map_kvcalloc
+ (bsc#1218260).
+- net: ethernet: lantiq_etop: fix double free in detach
+ (bsc#1218260).
+- i40e: Fix XDP program unloading while removing the driver
+ (bsc#1218260).
+- net: fix rc7's __skb_datagram_iter() (bsc#1218260).
+- octeontx2-af: Fix incorrect value output on error path in
+ rvu_check_rsrc_availability() (bsc#1218260).
+- skmsg: Skip zero length skb in sk_msg_recvmsg (bsc#1218260).
+- net: phy: microchip: lan87xx: reinit PHY after cable test
+ (bsc#1218260).
+- bpf: Fix too early release of tcx_entry (bsc#1218260).
+- tcp: fix incorrect undo caused by DSACK of TLP retransmit
+ (bsc#1218260).
+- net: bcmasp: Fix error code in probe() (bsc#1218260).
+- vfs: don't mod negative dentry count when on shrinker list
+ (bsc#1218260).
+- fs/dcache: Re-use value stored to dentry->d_flags instead of
+ re-reading (bsc#1218260).
+- filelock: fix potential use-after-free in posix_lock_inode
+ (bsc#1218260).
+- dsa: lan9303: Fix mapping between DSA port number and PHY
+ address (bsc#1218260).
+- cachefiles: add missing lock protection when polling
+ (bsc#1218260).
+- cachefiles: cyclic allocation of msg_id to avoid reuse
+ (bsc#1218260).
+- cachefiles: wait for ondemand_object_worker to finish when
+ dropping object (bsc#1218260).
+- cachefiles: cancel all requests for the object that is being
+ dropped (bsc#1218260).
+- cachefiles: stop sending new request when dropping object
+ (bsc#1218260).
+- cachefiles: narrow the scope of triggering EPOLLIN events in
+ ondemand mode (bsc#1218260).
+- cachefiles: propagate errors from vfs_getxattr() to avoid
+ infinite loop (bsc#1218260).
+- vfio/pci: Init the count variable in collecting hot-reset
+ devices (bsc#1218260).
+- scsi: ufs: core: Fix ufshcd_abort_one racing issue
+ (bsc#1218260).
+- scsi: ufs: core: Fix ufshcd_clear_cmd racing issue
+ (bsc#1218260).
+- mm: prevent derefencing NULL ptr in pfn_section_valid()
+ (bsc#1218260).
+- Compiler Attributes: Add __uninitialized macro (bsc#1218260).
+- commit e4edbc0
+
+-------------------------------------------------------------------
kernel-source-longterm.changes: same change
kernel-syms-longterm.changes: same change
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kernel-longterm.spec ++++++
--- /var/tmp/diff_new_pack.rYnexh/_old 2024-07-22 17:14:49.577645038 +0200
+++ /var/tmp/diff_new_pack.rYnexh/_new 2024-07-22 17:14:49.581645193 +0200
@@ -18,8 +18,8 @@
%define srcversion 6.6
-%define patchversion 6.6.40
-%define git_commit b646f3c8ba6aa29fdd6eb96ae5742130273cf7f6
+%define patchversion 6.6.41
+%define git_commit e4edbc071417ac2a13cfeb8a3d0b7a6062c370a8
%define variant -longterm%{nil}
%define compress_modules zstd
%define compress_vmlinux xz
@@ -113,9 +113,9 @@
Summary: The Linux Kernel
License: GPL-2.0-only
Group: System/Kernel
-Version: 6.6.40
+Version: 6.6.41
%if 0%{?is_kotd}
-Release: <RELEASE>.gb646f3c
+Release: <RELEASE>.ge4edbc0
%else
Release: 0
%endif
++++++ kernel-source-longterm.spec ++++++
--- /var/tmp/diff_new_pack.rYnexh/_old 2024-07-22 17:14:49.613646436 +0200
+++ /var/tmp/diff_new_pack.rYnexh/_new 2024-07-22 17:14:49.613646436 +0200
@@ -17,8 +17,8 @@
%define srcversion 6.6
-%define patchversion 6.6.40
-%define git_commit b646f3c8ba6aa29fdd6eb96ae5742130273cf7f6
+%define patchversion 6.6.41
+%define git_commit e4edbc071417ac2a13cfeb8a3d0b7a6062c370a8
%define variant -longterm%{nil}
%include %_sourcedir/kernel-spec-macros
@@ -31,9 +31,9 @@
%endif
Name: kernel-source-longterm
-Version: 6.6.40
+Version: 6.6.41
%if 0%{?is_kotd}
-Release: <RELEASE>.gb646f3c
+Release: <RELEASE>.ge4edbc0
%else
Release: 0
%endif
++++++ kernel-syms-longterm.spec ++++++
--- /var/tmp/diff_new_pack.rYnexh/_old 2024-07-22 17:14:49.645647679 +0200
+++ /var/tmp/diff_new_pack.rYnexh/_new 2024-07-22 17:14:49.649647833 +0200
@@ -16,7 +16,7 @@
#
-%define git_commit b646f3c8ba6aa29fdd6eb96ae5742130273cf7f6
+%define git_commit e4edbc071417ac2a13cfeb8a3d0b7a6062c370a8
%define variant -longterm%{nil}
%include %_sourcedir/kernel-spec-macros
@@ -25,10 +25,10 @@
Summary: Kernel Symbol Versions (modversions)
License: GPL-2.0-only
Group: Development/Sources
-Version: 6.6.40
+Version: 6.6.41
%if %using_buildservice
%if 0%{?is_kotd}
-Release: <RELEASE>.gb646f3c
+Release: <RELEASE>.ge4edbc0
%else
Release: 0
%endif
++++++ patches.kernel.org.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/kernel-source-longterm/patches.kernel.org.tar.bz2 /work/SRC/openSUSE:Factory/.kernel-source-longterm.new.17339/patches.kernel.org.tar.bz2 differ: char 11, line 1
++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.rYnexh/_old 2024-07-22 17:14:50.269671909 +0200
+++ /var/tmp/diff_new_pack.rYnexh/_new 2024-07-22 17:14:50.273672064 +0200
@@ -8474,6 +8474,128 @@
patches.kernel.org/6.6.39-136-Linux-6.6.39.patch
patches.kernel.org/6.6.40-001-Revert-usb-xhci-prevent-potential-failure-in-…
patches.kernel.org/6.6.40-002-Linux-6.6.40.patch
+ patches.kernel.org/6.6.41-001-Compiler-Attributes-Add-__uninitialized-macro…
+ patches.kernel.org/6.6.41-002-mm-prevent-derefencing-NULL-ptr-in-pfn_sectio…
+ patches.kernel.org/6.6.41-003-scsi-ufs-core-Fix-ufshcd_clear_cmd-racing-iss…
+ patches.kernel.org/6.6.41-004-scsi-ufs-core-Fix-ufshcd_abort_one-racing-iss…
+ patches.kernel.org/6.6.41-005-vfio-pci-Init-the-count-variable-in-collectin…
+ patches.kernel.org/6.6.41-006-cachefiles-propagate-errors-from-vfs_getxattr…
+ patches.kernel.org/6.6.41-007-cachefiles-narrow-the-scope-of-triggering-EPO…
+ patches.kernel.org/6.6.41-008-cachefiles-stop-sending-new-request-when-drop…
+ patches.kernel.org/6.6.41-009-cachefiles-cancel-all-requests-for-the-object…
+ patches.kernel.org/6.6.41-010-cachefiles-wait-for-ondemand_object_worker-to…
+ patches.kernel.org/6.6.41-011-cachefiles-cyclic-allocation-of-msg_id-to-avo…
+ patches.kernel.org/6.6.41-012-cachefiles-add-missing-lock-protection-when-p…
+ patches.kernel.org/6.6.41-013-dsa-lan9303-Fix-mapping-between-DSA-port-numb…
+ patches.kernel.org/6.6.41-014-filelock-fix-potential-use-after-free-in-posi…
+ patches.kernel.org/6.6.41-015-fs-dcache-Re-use-value-stored-to-dentry-d_fla…
+ patches.kernel.org/6.6.41-016-vfs-don-t-mod-negative-dentry-count-when-on-s…
+ patches.kernel.org/6.6.41-017-net-bcmasp-Fix-error-code-in-probe.patch
+ patches.kernel.org/6.6.41-018-tcp-fix-incorrect-undo-caused-by-DSACK-of-TLP…
+ patches.kernel.org/6.6.41-019-bpf-Fix-too-early-release-of-tcx_entry.patch
+ patches.kernel.org/6.6.41-020-net-phy-microchip-lan87xx-reinit-PHY-after-ca…
+ patches.kernel.org/6.6.41-021-skmsg-Skip-zero-length-skb-in-sk_msg_recvmsg.…
+ patches.kernel.org/6.6.41-022-octeontx2-af-Fix-incorrect-value-output-on-er…
+ patches.kernel.org/6.6.41-023-net-fix-rc7-s-__skb_datagram_iter.patch
+ patches.kernel.org/6.6.41-024-i40e-Fix-XDP-program-unloading-while-removing…
+ patches.kernel.org/6.6.41-025-net-ethernet-lantiq_etop-fix-double-free-in-d…
+ patches.kernel.org/6.6.41-026-bpf-fix-order-of-args-in-call-to-bpf_map_kvca…
+ patches.kernel.org/6.6.41-027-bpf-make-timer-data-struct-more-generic.patch
+ patches.kernel.org/6.6.41-028-bpf-replace-bpf_timer_init-with-a-generic-hel…
+ patches.kernel.org/6.6.41-029-bpf-Fail-bpf_timer_cancel-when-callback-is-be…
+ patches.kernel.org/6.6.41-030-net-ethernet-mtk-star-emac-set-mac_managed_pm…
+ patches.kernel.org/6.6.41-031-ppp-reject-claimed-as-LCP-but-actually-malfor…
+ patches.kernel.org/6.6.41-032-ethtool-netlink-do-not-return-SQI-value-if-li…
+ patches.kernel.org/6.6.41-033-udp-Set-SOCK_RCU_FREE-earlier-in-udp_lib_get_…
+ patches.kernel.org/6.6.41-034-net-sched-Fix-UAF-when-resolving-a-clash.patch
+ patches.kernel.org/6.6.41-035-net-sunrpc-Remap-EPERM-in-case-of-connection-…
+ patches.kernel.org/6.6.41-036-s390-Mark-psw-in-__load_psw_mask-as-__unitial…
+ patches.kernel.org/6.6.41-037-arm64-dts-qcom-sc8180x-Fix-LLCC-reg-property-…
+ patches.kernel.org/6.6.41-038-firmware-cs_dsp-Fix-overflow-checking-of-wmfw…
+ patches.kernel.org/6.6.41-039-firmware-cs_dsp-Return-error-if-block-header-…
+ patches.kernel.org/6.6.41-040-firmware-cs_dsp-Validate-payload-length-befor…
+ patches.kernel.org/6.6.41-041-firmware-cs_dsp-Prevent-buffer-overrun-when-p…
+ patches.kernel.org/6.6.41-042-ASoC-SOF-Intel-hda-fix-null-deref-on-system-s…
+ patches.kernel.org/6.6.41-043-firmware-cs_dsp-Use-strnlen-on-name-fields-in…
+ patches.kernel.org/6.6.41-044-ARM-davinci-Convert-comma-to-semicolon.patch
+ patches.kernel.org/6.6.41-045-i40e-fix-remove-needless-retries-of-NVM-updat…
+ patches.kernel.org/6.6.41-046-octeontx2-af-replace-cpt-slot-with-lf-id-on-r…
+ patches.kernel.org/6.6.41-047-octeontx2-af-fix-a-issue-with-cpt_lf_alloc-ma…
+ patches.kernel.org/6.6.41-048-octeontx2-af-fix-detection-of-IP-layer.patch
+ patches.kernel.org/6.6.41-049-octeontx2-af-fix-issue-with-IPv6-ext-match-fo…
+ patches.kernel.org/6.6.41-050-octeontx2-af-fix-issue-with-IPv4-match-for-RS…
+ patches.kernel.org/6.6.41-051-cifs-fix-setting-SecurityFlags-to-true.patch
+ patches.kernel.org/6.6.41-052-Revert-sched-fair-Make-sure-to-try-to-detach-…
+ patches.kernel.org/6.6.41-053-tcp-use-signed-arithmetic-in-tcp_rtx_probe0_t…
+ patches.kernel.org/6.6.41-054-tcp-avoid-too-many-retransmit-packets.patch
+ patches.kernel.org/6.6.41-055-net-ks8851-Fix-deadlock-with-the-SPI-chip-var…
+ patches.kernel.org/6.6.41-056-net-ks8851-Fix-potential-TX-stall-after-inter…
+ patches.kernel.org/6.6.41-057-USB-serial-option-add-Telit-generic-core-dump…
+ patches.kernel.org/6.6.41-058-USB-serial-option-add-Telit-FN912-rmnet-compo…
+ patches.kernel.org/6.6.41-059-USB-serial-option-add-Fibocom-FM350-GL.patch
+ patches.kernel.org/6.6.41-060-USB-serial-option-add-support-for-Foxconn-T99…
+ patches.kernel.org/6.6.41-061-USB-serial-option-add-Netprisma-LCUK54-series…
+ patches.kernel.org/6.6.41-062-USB-serial-option-add-Rolling-RW350-GL-varian…
+ patches.kernel.org/6.6.41-063-USB-serial-mos7840-fix-crash-on-resume.patch
+ patches.kernel.org/6.6.41-064-USB-Add-USB_QUIRK_NO_SET_INTF-quirk-for-START…
+ patches.kernel.org/6.6.41-065-usb-dwc3-pci-add-support-for-the-Intel-Panthe…
+ patches.kernel.org/6.6.41-066-usb-gadget-configfs-Prevent-OOB-read-write-in…
+ patches.kernel.org/6.6.41-067-USB-core-Fix-duplicate-endpoint-bug-by-cleari…
+ patches.kernel.org/6.6.41-068-misc-microchip-pci1xxxx-Fix-return-value-of-n…
+ patches.kernel.org/6.6.41-069-hpet-Support-32-bit-userspace.patch
+ patches.kernel.org/6.6.41-070-xhci-always-resume-roothubs-if-xHC-was-reset-…
+ patches.kernel.org/6.6.41-071-s390-mm-Add-NULL-pointer-check-to-crst_table_…
+ patches.kernel.org/6.6.41-072-mm-vmalloc-check-if-a-hash-index-is-in-cpu_po…
+ patches.kernel.org/6.6.41-073-mm-filemap-skip-to-create-PMD-sized-page-cach…
+ patches.kernel.org/6.6.41-074-mm-filemap-make-MAX_PAGECACHE_ORDER-acceptabl…
+ patches.kernel.org/6.6.41-075-ksmbd-discard-write-access-to-the-directory-o…
+ patches.kernel.org/6.6.41-076-iio-trigger-Fix-condition-for-own-trigger.pat…
+ patches.kernel.org/6.6.41-077-arm64-dts-qcom-sa8775p-Correct-IRQ-number-of-…
+ patches.kernel.org/6.6.41-078-arm64-dts-qcom-sc8280xp-x13s-fix-touchscreen-…
+ patches.kernel.org/6.6.41-079-nvmem-rmem-Fix-return-value-of-rmem_read.patch
+ patches.kernel.org/6.6.41-080-nvmem-meson-efuse-Fix-return-value-of-nvmem-c…
+ patches.kernel.org/6.6.41-081-nvmem-core-only-change-name-to-fram-for-curre…
+ patches.kernel.org/6.6.41-082-platform-x86-toshiba_acpi-Fix-array-out-of-bo…
+ patches.kernel.org/6.6.41-083-tty-serial-ma35d1-Add-a-NULL-check-for-of_nod…
+ patches.kernel.org/6.6.41-084-ALSA-hda-realtek-add-quirk-for-Clevo-V5-46-0T…
+ patches.kernel.org/6.6.41-085-ALSA-hda-realtek-Enable-Mute-LED-on-HP-250-G7…
+ patches.kernel.org/6.6.41-086-ALSA-hda-realtek-Limit-mic-boost-on-VAIO-PRO-…
+ patches.kernel.org/6.6.41-087-Fix-userfaultfd_api-to-return-EINVAL-as-expec…
+ patches.kernel.org/6.6.41-088-pmdomain-qcom-rpmhpd-Skip-retention-level-for…
+ patches.kernel.org/6.6.41-089-libceph-fix-race-between-delayed_work-and-cep…
+ patches.kernel.org/6.6.41-090-ACPI-processor_idle-Fix-invalid-comparison-wi…
+ patches.kernel.org/6.6.41-091-cpufreq-ACPI-Mark-boost-policy-as-enabled-whe…
+ patches.kernel.org/6.6.41-092-cpufreq-Allow-drivers-to-advertise-boost-enab…
+ patches.kernel.org/6.6.41-093-wireguard-selftests-use-acpi-off-instead-of-n…
+ patches.kernel.org/6.6.41-094-wireguard-allowedips-avoid-unaligned-64-bit-m…
+ patches.kernel.org/6.6.41-095-wireguard-queueing-annotate-intentional-data-…
+ patches.kernel.org/6.6.41-096-wireguard-send-annotate-intentional-data-race…
+ patches.kernel.org/6.6.41-097-misc-fastrpc-Fix-DSP-capabilities-request.pat…
+ patches.kernel.org/6.6.41-098-misc-fastrpc-Avoid-updating-PD-type-for-capab…
+ patches.kernel.org/6.6.41-099-misc-fastrpc-Copy-the-complete-capability-str…
+ patches.kernel.org/6.6.41-100-misc-fastrpc-Fix-memory-leak-in-audio-daemon-…
+ patches.kernel.org/6.6.41-101-misc-fastrpc-Fix-ownership-reassignment-of-re…
+ patches.kernel.org/6.6.41-102-misc-fastrpc-Restrict-untrusted-app-to-attach…
+ patches.kernel.org/6.6.41-103-mm-shmem-disable-PMD-sized-page-cache-if-need…
+ patches.kernel.org/6.6.41-104-mm-damon-core-merge-regions-aggressively-when…
+ patches.kernel.org/6.6.41-105-selftests-net-fix-gro.c-compilation-failure-d…
+ patches.kernel.org/6.6.41-106-nilfs2-fix-kernel-bug-on-rename-operation-of-…
+ patches.kernel.org/6.6.41-107-ext4-avoid-ptr-null-pointer-dereference.patch
+ patches.kernel.org/6.6.41-108-sched-Move-psi_account_irqtime-out-of-update_…
+ patches.kernel.org/6.6.41-109-btrfs-tree-checker-add-type-and-sequence-chec…
+ patches.kernel.org/6.6.41-110-i2c-rcar-bring-hardware-to-known-state-when-p…
+ patches.kernel.org/6.6.41-111-i2c-mark-HostNotify-target-address-as-used.pa…
+ patches.kernel.org/6.6.41-112-i2c-rcar-reset-controller-is-mandatory-for-Ge…
+ patches.kernel.org/6.6.41-113-i2c-rcar-introduce-Gen4-devices.patch
+ patches.kernel.org/6.6.41-114-i2c-rcar-ensure-Gen3-reset-does-not-disturb-l…
+ patches.kernel.org/6.6.41-115-i2c-testunit-avoid-re-issued-work-after-read-…
+ patches.kernel.org/6.6.41-116-i2c-rcar-clear-NO_RXDMA-flag-after-resetting.…
+ patches.kernel.org/6.6.41-117-x86-entry-Rename-ignore_sysret.patch
+ patches.kernel.org/6.6.41-118-x86-entry-64-Remove-obsolete-comment-on-traci…
+ patches.kernel.org/6.6.41-119-x86-bhi-Avoid-warning-in-DB-handler-due-to-BH…
+ patches.kernel.org/6.6.41-120-kbuild-Make-ld-version.sh-more-robust-against…
+ patches.kernel.org/6.6.41-121-i2c-rcar-fix-error-code-in-probe.patch
+ patches.kernel.org/6.6.41-122-Linux-6.6.41.patch
########################################################
# Build fixes that apply to the vanilla kernel too.
++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.rYnexh/_old 2024-07-22 17:14:50.293672841 +0200
+++ /var/tmp/diff_new_pack.rYnexh/_new 2024-07-22 17:14:50.297672996 +0200
@@ -1,4 +1,4 @@
-2024-07-15 08:06:50 +0000
-GIT Revision: b646f3c8ba6aa29fdd6eb96ae5742130273cf7f6
+2024-07-18 12:14:41 +0000
+GIT Revision: e4edbc071417ac2a13cfeb8a3d0b7a6062c370a8
GIT Branch: slowroll
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cargo-auditable for openSUSE:Factory checked in at 2024-07-22 17:14:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cargo-auditable (Old)
and /work/SRC/openSUSE:Factory/.cargo-auditable.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cargo-auditable"
Mon Jul 22 17:14:23 2024 rev:4 rq:1188511 version:0.6.4~0
Changes:
--------
--- /work/SRC/openSUSE:Factory/cargo-auditable/cargo-auditable.changes 2024-03-17 22:10:41.080722083 +0100
+++ /work/SRC/openSUSE:Factory/.cargo-auditable.new.17339/cargo-auditable.changes 2024-07-22 17:14:40.649298354 +0200
@@ -1,0 +2,71 @@
+Fri Jul 19 03:11:26 UTC 2024 - William Brown <william.brown(a)suse.com>
+
+- Resolve build failure when backported to 15-SP3
+
+-------------------------------------------------------------------
+Fri Jul 19 02:02:31 UTC 2024 - William Brown <william.brown(a)suse.com>
+
+- Depend on provides of rust to allow older compiler version usage
+
+-------------------------------------------------------------------
+Tue May 28 04:48:14 UTC 2024 - william.brown(a)suse.com
+
+- Update to version 0.6.4~0:
+ * Release cargo-auditable v0.6.4
+ * Correctly attribute changelog file addition in changelog
+ * Add changelog for auditable-extract
+ * Verify various feature combinations in CI
+ * Upgrade wasmparser to remove dependencies with `unsafe`
+ * Add LoongArch support
+ * cargo fmt
+ * Move doc headers to README.md and point rustdoc to them, so that we have nice crates.io pages
+ * Expand on the note about WebAssembly parsing
+ * Populate changelogs
+ * Resume bragging about all dependencies being safe, now that there is a caveat below
+ * drop fuzz Cargo.lock to always fuzz against latest versions
+ * Bump `cargo auditable` version
+ * Mention WASM support in README
+ * Revert "Be super duper extra sure both MinGW and MSVC are tested on CI"
+ * Be super duper extra sure both MinGW and MSVC are tested on CI
+ * Add wasm32 targets to CI for more platforms
+ * Don't pass --target twice in tests
+ * Install WASM toolchain in CI
+ * cargo fmt
+ * Add WASM end-to-end test
+ * cargo fmt
+ * Update documentation to mention the WASM feature
+ * cargo fmt
+ * Plumb WASM parsing feature through the whole stack
+ * Make WASM parsing an optional, non-default feature
+ * Add a fuzzing harness for WASM parsing
+ * Rewritten WASM parsing to avoid heap allocations
+ * Initial WASM extraction support
+ * Nicer assertion
+ * Drop obsolete comment
+ * Clarify that embedding the compiler version has shipped.
+ * Fixed section name for WASM
+ * Unified and more robust platform detection. Fixed wasm build process
+ * Initial WASM support
+ * More robust platform detection for picking the binary format
+ * Fix Windows CI to run both -msvc and -gnu
+ * Use the correct link.exe flag for preserving the specified symbol even if it is unused
+ * Fix Windows
+ * Fix tests on Rust 1.77
+ * Placate clippy
+ * Oopps, I meant components field
+ * Also remove the dependencies field if empty
+ * Use serde_json with order preservation feature to get a more compressible JSON after workarounds
+ * Work around cyclonedx-bom limitations to produce minified JSON
+ * Also record the dependency kind
+ * cyclonedx-bom: also record PURL
+ * Also write the dependency tree
+ * Clear the serial number in the minimal CycloneDX variant
+ * Prototype impl of auditable2cdx
+ * Fill in auditable2cdx dependencies
+ * Initial auditable2cdx boilerplace
+ * add #![forbid(unsafe_code)]
+ * Initial implementation of auditable-to-cyclonedx conversion
+ * Add the necessary dependencies to auditable-cyclonedx
+ * Initial dummy package for auditable-cyclonedx
+
+-------------------------------------------------------------------
Old:
----
cargo-auditable-0.6.2~0.obscpio
cargo-auditable-0.6.2~0.tar.zst
New:
----
cargo-auditable-0.6.4~0.tar.zst
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cargo-auditable.spec ++++++
--- /var/tmp/diff_new_pack.CmGa5h/_old 2024-07-22 17:14:41.761341533 +0200
+++ /var/tmp/diff_new_pack.CmGa5h/_new 2024-07-22 17:14:41.769341844 +0200
@@ -21,7 +21,7 @@
%define __cargo_common_opts %{?_smp_mflags}
Name: cargo-auditable
-Version: 0.6.2~0
+Version: 0.6.4~0
Release: 0
Summary: A tool to embed auditing information in ELF sections of rust binaries
# If you know the license, put it's SPDX string here.
@@ -37,7 +37,7 @@
# BuildRequires: cargo-packaging
BuildRequires: cargo
BuildRequires: zstd
-Requires: cargo
+Requires: rust+cargo
%description
Know the exact crate versions used to build your Rust executable. Audit binaries for known bugs or
++++++ _service ++++++
--- /var/tmp/diff_new_pack.CmGa5h/_old 2024-07-22 17:14:42.005351008 +0200
+++ /var/tmp/diff_new_pack.CmGa5h/_new 2024-07-22 17:14:42.065353339 +0200
@@ -3,8 +3,8 @@
<param name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
<param name="versionformat">@PARENT_TAG@~@TAG_OFFSET@</param>
<param name="scm">git</param>
- <param name="revision">v0.6.2</param>
- <param name="match-tag">*</param>
+ <param name="revision">v0.6.4</param>
+ <param name="match-tag">v*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="versionrewrite-replacement">\1</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.CmGa5h/_old 2024-07-22 17:14:42.273361415 +0200
+++ /var/tmp/diff_new_pack.CmGa5h/_new 2024-07-22 17:14:42.341364056 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
- <param name="changesrevision">f56bb45509a8447dbb62331aa868e4a3b83806c2</param></service></servicedata>
+ <param name="changesrevision">a0ed9cb5b98a0c927fa8d78aed04065144b136e7</param></service></servicedata>
(No newline at EOF)
++++++ cargo-auditable-0.6.2~0.tar.zst -> cargo-auditable-0.6.4~0.tar.zst ++++++
++++ 2159 lines of diff (skipped)
++++++ cargo-auditable.obsinfo ++++++
--- /var/tmp/diff_new_pack.CmGa5h/_old 2024-07-22 17:14:42.657376326 +0200
+++ /var/tmp/diff_new_pack.CmGa5h/_new 2024-07-22 17:14:42.705378190 +0200
@@ -1,5 +1,5 @@
name: cargo-auditable
-version: 0.6.2~0
-mtime: 1708367749
-commit: f56bb45509a8447dbb62331aa868e4a3b83806c2
+version: 0.6.4~0
+mtime: 1715183073
+commit: a0ed9cb5b98a0c927fa8d78aed04065144b136e7
++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/cargo-auditable/vendor.tar.zst /work/SRC/openSUSE:Factory/.cargo-auditable.new.17339/vendor.tar.zst differ: char 7, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cargo-packaging for openSUSE:Factory checked in at 2024-07-22 17:14:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cargo-packaging (Old)
and /work/SRC/openSUSE:Factory/.cargo-packaging.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cargo-packaging"
Mon Jul 22 17:14:22 2024 rev:14 rq:1188510 version:1.2.0+5
Changes:
--------
--- /work/SRC/openSUSE:Factory/cargo-packaging/cargo-packaging.changes 2024-04-05 20:25:27.121343521 +0200
+++ /work/SRC/openSUSE:Factory/.cargo-packaging.new.17339/cargo-packaging.changes 2024-07-22 17:14:39.577256727 +0200
@@ -1,0 +2,10 @@
+Fri Jul 19 03:18:37 UTC 2024 - William Brown <william.brown(a)suse.com>
+
+- Resolve build failure when backported to 15-SP3
+
+-------------------------------------------------------------------
+Fri Jul 19 02:01:33 UTC 2024 - William Brown <william.brown(a)suse.com>
+
+- Depend on provides of rust to allow older compiler version usage
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cargo-packaging.spec ++++++
--- /var/tmp/diff_new_pack.o5jeJc/_old 2024-07-22 17:14:40.105277230 +0200
+++ /var/tmp/diff_new_pack.o5jeJc/_new 2024-07-22 17:14:40.105277230 +0200
@@ -25,8 +25,8 @@
URL: https://github.com/Firstyear/cargo-packaging
Source0: %{name}-%{version}.tar.xz
Source1: vendor.tar.xz
-Requires: cargo
Requires: cargo-auditable
+Requires: rust+cargo
Requires: zstd
BuildRequires: cargo
BuildRequires: zstd
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package docker-buildx for openSUSE:Factory checked in at 2024-07-22 17:14:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/docker-buildx (Old)
and /work/SRC/openSUSE:Factory/.docker-buildx.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "docker-buildx"
Mon Jul 22 17:14:20 2024 rev:21 rq:1188476 version:0.16.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/docker-buildx/docker-buildx.changes 2024-07-15 19:45:53.788228285 +0200
+++ /work/SRC/openSUSE:Factory/.docker-buildx.new.17339/docker-buildx.changes 2024-07-22 17:14:37.105160736 +0200
@@ -1,0 +2,9 @@
+Thu Jul 18 18:54:02 UTC 2024 - opensuse_buildservice(a)ojkastl.de
+
+- Update to version 0.16.1:
+ * clarify the appropriate place to use the debug flag when
+ viewing warnings
+ * test: bake print
+ * bake: check printer before printing warnings
+
+-------------------------------------------------------------------
Old:
----
buildx-0.16.0.tar.gz
New:
----
buildx-0.16.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ docker-buildx.spec ++++++
--- /var/tmp/diff_new_pack.Otsu49/_old 2024-07-22 17:14:39.285245388 +0200
+++ /var/tmp/diff_new_pack.Otsu49/_new 2024-07-22 17:14:39.289245543 +0200
@@ -22,7 +22,7 @@
%define binary_name buildx
Name: docker-buildx
-Version: 0.16.0
+Version: 0.16.1
Release: 0
Summary: Docker CLI plugin for extended build capabilities with BuildKit
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Otsu49/_old 2024-07-22 17:14:39.317246630 +0200
+++ /var/tmp/diff_new_pack.Otsu49/_new 2024-07-22 17:14:39.321246786 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/docker/buildx</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.16.0</param>
+ <param name="revision">v0.16.1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
@@ -16,7 +16,7 @@
<param name="compression">gz</param>
</service>
<service name="go_modules" mode="manual">
- <param name="archive">buildx-0.16.0.tar.gz</param>
+ <param name="archive">buildx-0.16.1.tar.gz</param>
</service>
</services>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Otsu49/_old 2024-07-22 17:14:39.341247563 +0200
+++ /var/tmp/diff_new_pack.Otsu49/_new 2024-07-22 17:14:39.345247718 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/docker/buildx</param>
- <param name="changesrevision">10c9ff901c1c255b58969dd2ade4789acbbab3bb</param></service></servicedata>
+ <param name="changesrevision">34c195271a3f6dc64814db71438dc50dd41d7e3e</param></service></servicedata>
(No newline at EOF)
++++++ buildx-0.16.0.tar.gz -> buildx-0.16.1.tar.gz ++++++
/work/SRC/openSUSE:Factory/docker-buildx/buildx-0.16.0.tar.gz /work/SRC/openSUSE:Factory/.docker-buildx.new.17339/buildx-0.16.1.tar.gz differ: char 12, line 1
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/docker-buildx/vendor.tar.gz /work/SRC/openSUSE:Factory/.docker-buildx.new.17339/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package live555 for openSUSE:Factory checked in at 2024-07-22 17:14:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/live555 (Old)
and /work/SRC/openSUSE:Factory/.live555.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "live555"
Mon Jul 22 17:14:18 2024 rev:41 rq:1188462 version:2024.06.26
Changes:
--------
--- /work/SRC/openSUSE:Factory/live555/live555.changes 2024-03-03 20:19:32.662314621 +0100
+++ /work/SRC/openSUSE:Factory/.live555.new.17339/live555.changes 2024-07-22 17:14:35.501098450 +0200
@@ -1,0 +2,50 @@
+Thu Jul 18 14:19:57 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2024-06-26:
+ * Updated the "OnDemandServerMediaSubsession" implementation to
+ output an error message if the "sink->startPlaying()" call failed
+ (e.g., due to its source not being compatible with the sink).
+ This makes some common errors (e.g, a proper 'framer' not
+ being used) easier to detect.
+- update to 2024-05-30:
+ * Fixed a mistake that caused the config file
+ "config.raspberrypi" to not appear in the distribution.
+- update to 2024-05-15:
+ * Added a new config file "config.raspberrypi" that is known to
+ work for building the code on/for a Raspberry Pi 5.
+- update to 2024-05-05:
+ * Updated "QuickTimeFileSink" to add support for recording H.265
+ video streams. (This is not fully working yet; it appears to
+ have some bugs.)
+- update to 2024-04-19:
+ * Updated "MPEG2TransportStreamFramer" to ignore big jumps (2x or
+ more) in the estimate for the duration of each Transport
+ packet.
+ This is likely caused by an unexpected jump in the PCR (not
+ indicated by "discontinuity_indicator").
+- update to 2024-03-08:
+ * Changed "ServerTLSState::setup()" (in "TLSState.cpp") to call
+ "SSL_CTX_use_certificate_chain_file()" instead of
+ "SSL_CTX_use_certificate_file()", to allow the server operator to
+ specify a chain of certificates, rather than just one.
+- update to 2024.02.28:
+ * Updated the code for "dateHeader()" (in "RTSPCommon.cpp") to
+ avoid using "strftime()", because that can produce a localized
+ date string that violates the RTSP specification
+ (which uses section 3.3.1 of RFC 2068 (the HTTP/1.1
+ specification) to define the "Date:" header).
+- update to 2024.02.23:
+ * Updated the code for "dateHeader()" (in "RTSPCommon.cpp") to use
+ "NULL" instead of "nullptr"; the latter was causing compilation
+ problems for someone.
+- update to 2024.02.15:
+ * Updated the RTCP implementation so that reception stats for a
+ SSRC are no longer deleted, even if a SSRC is reaped due to RTCP
+ inactivity (no RTCP "SR" reports received recently).
+
+-------------------------------------------------------------------
+Thu Jul 18 14:17:02 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2024.
+
+-------------------------------------------------------------------
Old:
----
live.2023.11.30.tar.gz
New:
----
live.2024.06.26.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ live555.spec ++++++
--- /var/tmp/diff_new_pack.MPTQLL/_old 2024-07-22 17:14:36.257127807 +0200
+++ /var/tmp/diff_new_pack.MPTQLL/_new 2024-07-22 17:14:36.257127807 +0200
@@ -20,7 +20,7 @@
%define lmdmaj 112
Name: live555
-Version: 2023.11.30
+Version: 2024.06.26
Release: 0
Summary: LIVE555 Streaming Media
License: LGPL-2.1-only
++++++ live.2023.11.30.tar.gz -> live.2024.06.26.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp new/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp
--- old/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -20,6 +20,11 @@
#include "BasicUsageEnvironment.hh"
#include <stdio.h>
+////////// library version constants //////////
+
+extern char const* const BasicUsageEnvironmentLibraryVersionStr = BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING;
+extern int const BasicUsageEnvironmentLibraryVersionInt = BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT;
+
////////// BasicUsageEnvironment //////////
#if defined(__WIN32__) || defined(_WIN32)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh new/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh
--- old/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh 2023-11-30 09:22:23.000000000 +0100
+++ new/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh 2024-06-26 07:46:23.000000000 +0200
@@ -14,12 +14,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
**********/
// Version information for the "BasicUsageEnvironment" library
-// Copyright (c) 1996-2023 Live Networks, Inc. All rights reserved.
+// Copyright (c) 1996-2024 Live Networks, Inc. All rights reserved.
#ifndef _BASICUSAGEENVIRONMENT_VERSION_HH
#define _BASICUSAGEENVIRONMENT_VERSION_HH
-#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING "2023.11.30"
-#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT 1701302400
+#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING "2024.06.26"
+#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT 1719360000
+
+extern char const* const BasicUsageEnvironmentLibraryVersionStr;
+extern int const BasicUsageEnvironmentLibraryVersionInt;
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/UsageEnvironment/UsageEnvironment.cpp new/live/UsageEnvironment/UsageEnvironment.cpp
--- old/live/UsageEnvironment/UsageEnvironment.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/UsageEnvironment/UsageEnvironment.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -19,6 +19,13 @@
#include "UsageEnvironment.hh"
+////////// library version constants //////////
+
+extern char const* const UsageEnvironmentLibraryVersionStr = USAGEENVIRONMENT_LIBRARY_VERSION_STRING;
+extern int const UsageEnvironmentLibraryVersionInt = USAGEENVIRONMENT_LIBRARY_VERSION_INT;
+
+////////// UsageEnvironment //////////
+
Boolean UsageEnvironment::reclaim() {
// We delete ourselves only if we have no remainining state:
if (liveMediaPriv == NULL && groupsockPriv == NULL) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/UsageEnvironment/include/UsageEnvironment_version.hh new/live/UsageEnvironment/include/UsageEnvironment_version.hh
--- old/live/UsageEnvironment/include/UsageEnvironment_version.hh 2023-11-30 09:22:23.000000000 +0100
+++ new/live/UsageEnvironment/include/UsageEnvironment_version.hh 2024-06-26 07:46:23.000000000 +0200
@@ -14,12 +14,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
**********/
// Version information for the "UsageEnvironment" library
-// Copyright (c) 1996-2023 Live Networks, Inc. All rights reserved.
+// Copyright (c) 1996-2024 Live Networks, Inc. All rights reserved.
#ifndef _USAGEENVIRONMENT_VERSION_HH
#define _USAGEENVIRONMENT_VERSION_HH
-#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING "2023.11.30"
-#define USAGEENVIRONMENT_LIBRARY_VERSION_INT 1701302400
+#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING "2024.06.26"
+#define USAGEENVIRONMENT_LIBRARY_VERSION_INT 1719360000
+
+extern char const* const UsageEnvironmentLibraryVersionStr;
+extern int const UsageEnvironmentLibraryVersionInt;
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/config.linux-with-shared-libraries new/live/config.linux-with-shared-libraries
--- old/live/config.linux-with-shared-libraries 2023-11-30 09:22:51.000000000 +0100
+++ new/live/config.linux-with-shared-libraries 2024-06-26 07:46:35.000000000 +0200
@@ -3,24 +3,24 @@
# At least one interface changes, or is removed => CURRENT += 1; REVISION = 0; AGE = 0
# One or more interfaces were added, but no existing interfaces were changed or removed => CURRENT += 1; REVISION = 0; AGE += 1
-libliveMedia_VERSION_CURRENT=112
-libliveMedia_VERSION_REVISION=0
-libliveMedia_VERSION_AGE=0
+libliveMedia_VERSION_CURRENT=113
+libliveMedia_VERSION_REVISION=3
+libliveMedia_VERSION_AGE=1
libliveMedia_LIB_SUFFIX=so.$(shell expr $(libliveMedia_VERSION_CURRENT) - $(libliveMedia_VERSION_AGE)).$(libliveMedia_VERSION_AGE).$(libliveMedia_VERSION_REVISION)
-libBasicUsageEnvironment_VERSION_CURRENT=2
-libBasicUsageEnvironment_VERSION_REVISION=4
-libBasicUsageEnvironment_VERSION_AGE=0
+libBasicUsageEnvironment_VERSION_CURRENT=3
+libBasicUsageEnvironment_VERSION_REVISION=0
+libBasicUsageEnvironment_VERSION_AGE=1
libBasicUsageEnvironment_LIB_SUFFIX=so.$(shell expr $(libBasicUsageEnvironment_VERSION_CURRENT) - $(libBasicUsageEnvironment_VERSION_AGE)).$(libBasicUsageEnvironment_VERSION_AGE).$(libBasicUsageEnvironment_VERSION_REVISION)
-libUsageEnvironment_VERSION_CURRENT=4
+libUsageEnvironment_VERSION_CURRENT=5
libUsageEnvironment_VERSION_REVISION=0
-libUsageEnvironment_VERSION_AGE=1
+libUsageEnvironment_VERSION_AGE=2
libUsageEnvironment_LIB_SUFFIX=so.$(shell expr $(libUsageEnvironment_VERSION_CURRENT) - $(libUsageEnvironment_VERSION_AGE)).$(libUsageEnvironment_VERSION_AGE).$(libUsageEnvironment_VERSION_REVISION)
-libgroupsock_VERSION_CURRENT=31
-libgroupsock_VERSION_REVISION=13
-libgroupsock_VERSION_AGE=1
+libgroupsock_VERSION_CURRENT=32
+libgroupsock_VERSION_REVISION=0
+libgroupsock_VERSION_AGE=2
libgroupsock_LIB_SUFFIX=so.$(shell expr $(libgroupsock_VERSION_CURRENT) - $(libgroupsock_VERSION_AGE)).$(libgroupsock_VERSION_AGE).$(libgroupsock_VERSION_REVISION)
#####
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/config.raspberrypi new/live/config.raspberrypi
--- old/live/config.raspberrypi 1970-01-01 01:00:00.000000000 +0100
+++ new/live/config.raspberrypi 2024-06-26 07:46:35.000000000 +0200
@@ -0,0 +1,17 @@
+COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DNO_STD_LIB=1
+C = c
+C_COMPILER = cc
+C_FLAGS = $(COMPILE_OPTS) $(CPPFLAGS) $(CFLAGS)
+CPP = cpp
+CPLUSPLUS_COMPILER = c++
+CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 $(CPPFLAGS) $(CXXFLAGS)
+OBJ = o
+LINK = c++ -o
+LINK_OPTS = -L. $(LDFLAGS)
+CONSOLE_LINK_OPTS = $(LINK_OPTS)
+LIBRARY_LINK = ar cr
+LIBRARY_LINK_OPTS =
+LIB_SUFFIX = a
+LIBS_FOR_CONSOLE_APPLICATION =
+LIBS_FOR_GUI_APPLICATION =
+EXE =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/groupsock/Groupsock.cpp new/live/groupsock/Groupsock.cpp
--- old/live/groupsock/Groupsock.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/groupsock/Groupsock.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -25,6 +25,11 @@
#endif
#include <stdio.h>
+////////// library version constants //////////
+
+extern char const* const groupsockLibraryVersionStr = GROUPSOCK_LIBRARY_VERSION_STRING;
+extern int const groupsockLibraryVersionInt = GROUPSOCK_LIBRARY_VERSION_INT;
+
///////// OutputSocket //////////
OutputSocket::OutputSocket(UsageEnvironment& env, int family)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/groupsock/include/groupsock_version.hh new/live/groupsock/include/groupsock_version.hh
--- old/live/groupsock/include/groupsock_version.hh 2023-11-30 09:22:23.000000000 +0100
+++ new/live/groupsock/include/groupsock_version.hh 2024-06-26 07:46:23.000000000 +0200
@@ -14,12 +14,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
**********/
// Version information for the "groupsock" library
-// Copyright (c) 1996-2023 Live Networks, Inc. All rights reserved.
+// Copyright (c) 1996-2024 Live Networks, Inc. All rights reserved.
#ifndef _GROUPSOCK_VERSION_HH
#define _GROUPSOCK_VERSION_HH
-#define GROUPSOCK_LIBRARY_VERSION_STRING "2023.11.30"
-#define GROUPSOCK_LIBRARY_VERSION_INT 1701302400
+#define GROUPSOCK_LIBRARY_VERSION_STRING "2024.06.26"
+#define GROUPSOCK_LIBRARY_VERSION_INT 1719360000
+
+extern char const* const groupsockLibraryVersionStr;
+extern int const groupsockLibraryVersionInt;
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/MPEG2TransportStreamFramer.cpp new/live/liveMedia/MPEG2TransportStreamFramer.cpp
--- old/live/liveMedia/MPEG2TransportStreamFramer.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/MPEG2TransportStreamFramer.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -257,7 +257,8 @@
if (fTSPacketDurationEstimate == 0.0) { // we've just started
fTSPacketDurationEstimate = durationPerPacket;
- } else if (discontinuity_indicator == 0 && durationPerPacket >= 0.0) {
+ } else if (discontinuity_indicator == 0 && durationPerPacket >= 0.0
+ && durationPerPacket < 2*fTSPacketDurationEstimate) {
fTSPacketDurationEstimate
= durationPerPacket*NEW_DURATION_WEIGHT
+ fTSPacketDurationEstimate*(1-NEW_DURATION_WEIGHT);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/Media.cpp new/live/liveMedia/Media.cpp
--- old/live/liveMedia/Media.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/Media.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -21,6 +21,11 @@
#include "Media.hh"
#include "HashTable.hh"
+////////// library version constants //////////
+
+extern char const* const liveMediaLibraryVersionStr = LIVEMEDIA_LIBRARY_VERSION_STRING;
+extern int const liveMediaLibraryVersionInt = LIVEMEDIA_LIBRARY_VERSION_INT;
+
////////// Medium //////////
Medium::Medium(UsageEnvironment& env)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/OnDemandServerMediaSubsession.cpp new/live/liveMedia/OnDemandServerMediaSubsession.cpp
--- old/live/liveMedia/OnDemandServerMediaSubsession.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/OnDemandServerMediaSubsession.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -571,13 +571,17 @@
}
if (!fAreCurrentlyPlaying && fMediaSource != NULL) {
- if (fRTPSink != NULL) {
- fRTPSink->startPlaying(*fMediaSource, afterPlayingStreamState, this);
- fAreCurrentlyPlaying = True;
- } else if (fUDPSink != NULL) {
- fUDPSink->startPlaying(*fMediaSource, afterPlayingStreamState, this);
- fAreCurrentlyPlaying = True;
+ MediaSink* sink;
+ if (fRTPSink != NULL) { sink = fRTPSink; }
+ else if (fUDPSink != NULL) { sink = fUDPSink; }
+ else return;
+
+ if (!sink->startPlaying(*fMediaSource, afterPlayingStreamState, this)) {
+ fMediaSource->envir() << "sink->startPlaying() failed: "
+ << fMediaSource->envir().getResultMsg() << "\n";
+ return;
}
+ fAreCurrentlyPlaying = True;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/QuickTimeFileSink.cpp new/live/liveMedia/QuickTimeFileSink.cpp
--- old/live/liveMedia/QuickTimeFileSink.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/QuickTimeFileSink.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -26,13 +26,15 @@
#include "H263plusVideoRTPSource.hh" // for the special header
#include "MPEG4GenericRTPSource.hh" //for "samplingFrequencyFromAudioSpecificConfig()"
#include "MPEG4LATMAudioRTPSource.hh" // for "parseGeneralConfigStr()"
+#include "H264or5VideoStreamFramer.hh" // for "removeH264or5EmulationBytes()"
#include "Base64.hh"
#include <ctype.h>
#define fourChar(x,y,z,w) ( ((x)<<24)|((y)<<16)|((z)<<8)|(w) )
-#define H264_IDR_FRAME 0x65 //bit 8 == 0, bits 7-6 (ref) == 3, bits 5-0 (type) == 5
+#define H264_IDR_FRAME 0x65 //bit 8 == 0, bits 7-6 (ref) == 3, bits 5-1 (type) == 5
+#define isIDRFrame(firstByte) (firstByte == H264_IDR_FRAME || ((firstByte&0x7E)>>1) == 19 || ((firstByte&0x7E)>>1) == 20)
////////// SubsessionIOState, ChunkDescriptor ///////////
// A structure used to represent the I/O state of each input 'subsession':
@@ -653,6 +655,10 @@
fQTMediaDataAtomCreator = &QuickTimeFileSink::addAtom_avc1;
fQTTimeScale = 600;
fQTTimeUnitsPerSample = fQTTimeScale/fOurSink.fMovieFPS;
+ } else if (strcmp(fOurSubsession.codecName(), "H265") == 0) {
+ fQTMediaDataAtomCreator = &QuickTimeFileSink::addAtom_hvc1;
+ fQTTimeScale = 600;
+ fQTTimeUnitsPerSample = fQTTimeScale/fOurSink.fMovieFPS;
} else if (strcmp(fOurSubsession.codecName(), "MP4V-ES") == 0) {
fQTMediaDataAtomCreator = &QuickTimeFileSink::addAtom_mp4v;
fQTTimeScale = 600;
@@ -801,7 +807,10 @@
struct timeval const& presentationTime = buffer.presentationTime();
int64_t const destFileOffset = TellFile64(fOurSink.fOutFid);
unsigned sampleNumberOfFrameStart = fQTTotNumSamples + 1;
- Boolean avcHack = fQTMediaDataAtomCreator == &QuickTimeFileSink::addAtom_avc1;
+ Boolean h264or5Hack =
+ fQTMediaDataAtomCreator == &QuickTimeFileSink::addAtom_avc1 ||
+ fQTMediaDataAtomCreator == &QuickTimeFileSink::addAtom_hvc1;
+
// If we're not syncing streams, or this subsession is not video, then
// just give this frame a fixed duration:
@@ -809,7 +818,7 @@
|| fQTcomponentSubtype != fourChar('v','i','d','e')) {
unsigned const frameDuration = fQTTimeUnitsPerSample*fQTSamplesPerFrame;
unsigned frameSizeToUse = frameSize;
- if (avcHack) frameSizeToUse += 4; // H.264/AVC gets the frame size prefix
+ if (h264or5Hack) frameSizeToUse += 4; // H.264/5 gets the frame size prefix
fQTTotNumSamples += useFrame1(frameSizeToUse, presentationTime, frameDuration, destFileOffset);
} else {
@@ -825,7 +834,7 @@
unsigned frameDuration
= (unsigned)((2*duration*fQTTimeScale+1)/2); // round
unsigned frameSizeToUse = fPrevFrameState.frameSize;
- if (avcHack) frameSizeToUse += 4; // H.264/AVC gets the frame size prefix
+ if (h264or5Hack) frameSizeToUse += 4; // H.264/5 gets the frame size prefix
unsigned numSamples
= useFrame1(frameSizeToUse, ppt, frameDuration, fPrevFrameState.destFileOffset);
@@ -833,7 +842,7 @@
sampleNumberOfFrameStart = fQTTotNumSamples + 1;
}
- if (avcHack && (*frameSource == H264_IDR_FRAME)) {
+ if (h264or5Hack && isIDRFrame(*frameSource)) {
SyncFrame* newSyncFrame = new SyncFrame(fQTTotNumSamples + 1);
if (fTailSyncFrame == NULL) {
fHeadSyncFrame = newSyncFrame;
@@ -849,7 +858,7 @@
fPrevFrameState.destFileOffset = destFileOffset;
}
- if (avcHack) fOurSink.addWord(frameSize);
+ if (h264or5Hack) fOurSink.addWord(frameSize);
// Write the data into the file:
fwrite(frameSource, 1, frameSize, fOurSink.fOutFid);
@@ -1119,7 +1128,7 @@
// if audio is in sync, wait for the next IDR frame to start
unsigned char* const frameSource = fBuffer->dataStart();
- if (*frameSource != H264_IDR_FRAME) return False;
+ if (!isIDRFrame(*frameSource)) return False;
}
// But now we are
fHaveBeenSynced = True;
@@ -1888,45 +1897,165 @@
addAtomEnd;
addAtom(avcC);
-// Begin by Base-64 decoding the "sprop" parameter sets strings:
+ // Begin by Base-64 decoding the "sprop" parameter sets strings:
char* psets = strDup(fCurrentIOState->fOurSubsession.fmtp_spropparametersets());
if (psets == NULL) return 0;
+ char const* spsBase64 = psets;
size_t comma_pos = strcspn(psets, ",");
psets[comma_pos] = '\0';
- char const* sps_b64 = psets;
- char const* pps_b64 = &psets[comma_pos+1];
- unsigned sps_count;
- unsigned char* sps_data = base64Decode(sps_b64, sps_count, false);
- unsigned pps_count;
- unsigned char* pps_data = base64Decode(pps_b64, pps_count, false);
-// Then add the decoded data:
+ char const* ppsBase64 = &psets[comma_pos+1];
+
+ unsigned spsSize;
+ unsigned char* sps = base64Decode(spsBase64, spsSize, false);
+
+ unsigned ppsSize;
+ unsigned char* pps = base64Decode(ppsBase64, ppsSize, false);
+
+ // We use some of the data from the "SPS". Remove any 'emulation bytes' from it first:
+ if (spsSize == 0) return 0;
+ u_int8_t* spsWEB = new u_int8_t[spsSize]; // "WEB" means "Without Emulation Bytes"
+ unsigned spsWEBSize = removeH264or5EmulationBytes(spsWEB, spsSize, sps, spsSize);
+ if (spsWEBSize < 4) { // Bad SPS size
+ delete[] spsWEB;
+ return 0;
+ }
+
+ // Then add the decoded data:
size += addByte(0x01); // configuration version
- size += addByte(sps_data[1]); // profile
- size += addByte(sps_data[2]); // profile compat
- size += addByte(sps_data[3]); // level
+ size += addByte(spsWEB[1]); // profile
+ size += addByte(spsWEB[2]); // profile compat
+ size += addByte(spsWEB[3]); // level
size += addByte(0xff); /* 0b11111100 | lengthsize = 0x11 */
- size += addByte(0xe0 | (sps_count > 0 ? 1 : 0) );
- if (sps_count > 0) {
- size += addHalfWord(sps_count);
- for (unsigned i = 0; i < sps_count; i++) {
- size += addByte(sps_data[i]);
+ size += addByte(0xe0 | (spsSize > 0 ? 1 : 0) );
+ if (spsSize > 0) {
+ size += addHalfWord(spsSize);
+ for (unsigned i = 0; i < spsSize; i++) {
+ size += addByte(sps[i]);
}
}
- size += addByte(pps_count > 0 ? 1 : 0);
- if (pps_count > 0) {
- size += addHalfWord(pps_count);
- for (unsigned i = 0; i < pps_count; i++) {
- size += addByte(pps_data[i]);
+ size += addByte(ppsSize > 0 ? 1 : 0);
+ if (ppsSize > 0) {
+ size += addHalfWord(ppsSize);
+ for (unsigned i = 0; i < ppsSize; i++) {
+ size += addByte(pps[i]);
}
}
-// Finally, delete the data that we allocated:
- delete[] pps_data; delete[] sps_data;
+ // Finally, delete the data that we allocated:
+ delete[] spsWEB;
+ delete[] pps; delete[] sps;
delete[] psets;
addAtomEnd;
+addAtom(hvc1);
+// General sample description fields:
+ size += addWord(0x00000000); // Reserved
+ size += addWord(0x00000001); // Reserved+Data reference index
+// Video sample description fields:
+ size += addWord(0x00000000); // Version+Revision level
+ size += add4ByteString("appl"); // Vendor
+ size += addWord(0x00000000); // Temporal quality
+ size += addWord(0x00000000); // Spatial quality
+ unsigned const widthAndHeight = (fMovieWidth<<16)|fMovieHeight;
+ size += addWord(widthAndHeight); // Width+height
+ size += addWord(0x00480000); // Horizontal resolution
+ size += addWord(0x00480000); // Vertical resolution
+ size += addWord(0x00000000); // Data size
+ size += addWord(0x00010548); // Frame count+Compressor name (start)
+ // "H.265"
+ size += addWord(0x2e323635); // Compressor name (continued)
+ size += addZeroWords(6); // Compressor name (continued - zero)
+ size += addWord(0x00000018); // Compressor name (final)+Depth
+ size += addHalfWord(0xffff); // Color table id
+ size += addAtom_hvcC();
+addAtomEnd;
+
+addAtom(hvcC);
+ // Begin by Base-64 decoding the "sprop" parameter sets strings:
+ char const* vpsBase64 = strDup(fCurrentIOState->fOurSubsession.fmtp_spropvps());
+ char const* spsBase64 = strDup(fCurrentIOState->fOurSubsession.fmtp_spropsps());
+ char const* ppsBase64 = strDup(fCurrentIOState->fOurSubsession.fmtp_sproppps());
+ if (vpsBase64 == NULL || spsBase64 == NULL || ppsBase64 == NULL) return 0;
+
+ unsigned vpsSize;
+ unsigned char* vps = base64Decode(vpsBase64, vpsSize, false);
+
+ unsigned spsSize;
+ unsigned char* sps = base64Decode(spsBase64, spsSize, false);
+
+ unsigned ppsSize;
+ unsigned char* pps = base64Decode(ppsBase64, ppsSize, false);
+
+ // We use some of the data from the "VPS". Remove any 'emulation bytes' from it first:
+ if (vpsSize == 0) return 0;
+ u_int8_t* vpsWEB = new u_int8_t[vpsSize]; // "WEB" means "Without Emulation Bytes"
+ unsigned vpsWEBSize = removeH264or5EmulationBytes(vpsWEB, vpsSize, vps, vpsSize);
+ if (vpsWEBSize < 6/*'profile_tier_level' offset*/ + 12/*num 'profile_tier_level' bytes*/) {
+ // Bad VPS size
+ delete[] vpsWEB;
+ return 0;
+ }
+
+ // Then add the decoded data:
+ size += addByte(0x01); // configurationVersion = 1
+
+ u_int8_t const* profileTierLevelHeaderBytes = &vpsWEB[6];
+ size += addByte(profileTierLevelHeaderBytes[0]);
+ // general_profile_space + general_tier_flag + general_profile_idc
+
+ u_int8_t const* general_profile_compatibility_flags = &profileTierLevelHeaderBytes[1];
+ for (unsigned i = 0; i < 4; ++i) size += addByte(general_profile_compatibility_flags[i]);
+ // general_profile_compatibility_flags
+
+ u_int8_t const* general_constraint_indicator_flags = &profileTierLevelHeaderBytes[5];
+ for (unsigned i = 0; i < 6; ++i) size += addByte(general_constraint_indicator_flags[i]);
+ // general_constraint_indicator_flags
+
+ size += addByte(profileTierLevelHeaderBytes[11]); // general_level_idc
+ size += addHalfWord(0xF000); // min_spatial_segmentation_idc = 0 ???
+ size += addByte(0xFC); // parallelismType = 0 ???
+ size += addByte(0xFD); // chroma_format_idc = 1 ???
+ size += addByte(0xF8); // bit_depth_luma_minus8 = 0 ???
+ size += addByte(0xF8); // bit_depth_chroma_minus8 = 0 ???
+ size += addHalfWord(0x0000); // avgFrameRate = 0
+ size += addByte(0x0F);
+ // constantFrameRate = 0; numTemporalLayers = 1; temporalIdNested = 1; lengthSizeMinusOne = 3 ???
+ size += addByte(1 + (spsSize > 0) + (ppsSize > 0)); // numOfArrays
+
+ if (vpsSize > 0) {
+ size += addByte(0x20); // array_completeness = 0; NAL_unit_type = VPS
+ size += addHalfWord(1); // numNalus
+ size += addHalfWord(vpsSize);
+ for (unsigned i = 0; i < vpsSize; i++) {
+ size += addByte(vps[i]);
+ }
+ }
+
+ if (spsSize > 0) {
+ size += addByte(0x21); // array_completeness = 0; NAL_unit_type = SPS
+ size += addHalfWord(1); // numNalus
+ size += addHalfWord(spsSize);
+ for (unsigned i = 0; i < spsSize; i++) {
+ size += addByte(sps[i]);
+ }
+ }
+
+ if (ppsSize > 0) {
+ size += addByte(0x22); // array_completeness = 0; NAL_unit_type = PPS
+ size += addHalfWord(1); // numNalus
+ size += addHalfWord(ppsSize);
+ for (unsigned i = 0; i < ppsSize; i++) {
+ size += addByte(pps[i]);
+ }
+ }
+
+// Finally, delete the data that we allocated:
+ delete[] vpsWEB;
+ delete[] vps; delete[] pps; delete[] sps;
+addAtomEnd;
+
addAtom(mp4v);
// General sample description fields:
size += addWord(0x00000000); // Reserved
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/RTCP.cpp new/live/liveMedia/RTCP.cpp
--- old/live/liveMedia/RTCP.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/RTCP.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -102,7 +102,7 @@
#ifdef DEBUG
fprintf(stderr, "reap: removing SSRC 0x%x\n", oldSSRC);
#endif
- fOurRTCPInstance.removeSSRC(oldSSRC, True);
+ fOurRTCPInstance.removeSSRC(oldSSRC, False/*keep stats around*/);
}
} while (foundOldMember);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/RTSPClient.cpp new/live/liveMedia/RTSPClient.cpp
--- old/live/liveMedia/RTSPClient.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/RTSPClient.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -419,7 +419,6 @@
// Set the "User-Agent:" header to use in each request:
char const* const libName = "LIVE555 Streaming Media v";
- char const* const libVersionStr = LIVEMEDIA_LIBRARY_VERSION_STRING;
char const* libPrefix; char const* libSuffix;
if (applicationName == NULL || applicationName[0] == '\0') {
applicationName = libPrefix = libSuffix = "";
@@ -428,9 +427,9 @@
libSuffix = ")";
}
unsigned userAgentNameSize
- = strlen(applicationName) + strlen(libPrefix) + strlen(libName) + strlen(libVersionStr) + strlen(libSuffix) + 1;
+ = strlen(applicationName) + strlen(libPrefix) + strlen(libName) + strlen(liveMediaLibraryVersionStr) + strlen(libSuffix) + 1;
char* userAgentName = new char[userAgentNameSize];
- sprintf(userAgentName, "%s%s%s%s%s", applicationName, libPrefix, libName, libVersionStr, libSuffix);
+ sprintf(userAgentName, "%s%s%s%s%s", applicationName, libPrefix, libName, liveMediaLibraryVersionStr, libSuffix);
setUserAgentString(userAgentName);
delete[] userAgentName;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/RTSPCommon.cpp new/live/liveMedia/RTSPCommon.cpp
--- old/live/liveMedia/RTSPCommon.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/RTSPCommon.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -23,7 +23,7 @@
#include <string.h>
#include <stdio.h>
#include <ctype.h> // for "isxdigit()
-#include <time.h> // for "strftime()" and "gmtime()"
+#include <time.h> // for "gmtime()"
static void decodeURL(char* url) {
// Replace (in place) any %<hex><hex> sequences with the appropriate 8-bit character.
@@ -361,13 +361,19 @@
time_tm = tm{};
}
#else
- if (gmtime_r(&tt, &time_tm) == nullptr) {
+ if (gmtime_r(&tt, &time_tm) == NULL) {
time_tm = tm();
}
#endif
- strftime(buf, sizeof buf, "Date: %a, %b %d %Y %H:%M:%S GMT\r\n", &time_tm);
+ static const char* day[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+ static const char* month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+ snprintf(buf, sizeof buf, "Date: %s, %s %02d %04d %02d:%02d:%02d GMT\r\n",
+ day[time_tm.tm_wday], month[time_tm.tm_mon], time_tm.tm_mday,
+ 1900 + time_tm.tm_year,
+ time_tm.tm_hour, time_tm.tm_min, time_tm.tm_sec);
#else
- // WinCE apparently doesn't have "time()", "strftime()", or "gmtime()",
+ // WinCE apparently doesn't have "time()", or "gmtime()",
// so generate the "Date:" header a different, WinCE-specific way.
// (Thanks to Pierre l'Hussiez for this code)
// RSF: But where is the "Date: " string? This code doesn't look quite right...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/RTSPCommon.cpp.new new/live/liveMedia/RTSPCommon.cpp.new
--- old/live/liveMedia/RTSPCommon.cpp.new 1970-01-01 01:00:00.000000000 +0100
+++ new/live/liveMedia/RTSPCommon.cpp.new 2024-06-26 07:46:23.000000000 +0200
@@ -0,0 +1,396 @@
+/**********
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**********/
+// "liveMedia"
+// Copyright (c) 1996-2024 Live Networks, Inc. All rights reserved.
+// Common routines used by both RTSP clients and servers
+// Implementation
+
+#include "RTSPCommon.hh"
+#include "Locale.hh"
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h> // for "isxdigit()
+#include <time.h> // for "gmtime()"
+
+static void decodeURL(char* url) {
+ // Replace (in place) any %<hex><hex> sequences with the appropriate 8-bit character.
+ char* cursor = url;
+ while (*cursor) {
+ if ((cursor[0] == '%') &&
+ cursor[1] && isxdigit(cursor[1]) &&
+ cursor[2] && isxdigit(cursor[2])) {
+ // We saw a % followed by 2 hex digits, so we copy the literal hex value into the URL, then advance the cursor past it:
+ char hex[3];
+ hex[0] = cursor[1];
+ hex[1] = cursor[2];
+ hex[2] = '\0';
+ *url++ = (char)strtol(hex, NULL, 16);
+ cursor += 3;
+ } else {
+ // Common case: This is a normal character or a bogus % expression, so just copy it
+ *url++ = *cursor++;
+ }
+ }
+
+ *url = '\0';
+}
+
+Boolean parseRTSPRequestString(char const* reqStr, unsigned reqStrSize,
+ char* resultCmdName,
+ unsigned resultCmdNameMaxSize,
+ char* resultURLPreSuffix,
+ unsigned resultURLPreSuffixMaxSize,
+ char* resultURLSuffix,
+ unsigned resultURLSuffixMaxSize,
+ char* resultCSeq,
+ unsigned resultCSeqMaxSize,
+ char* resultSessionIdStr,
+ unsigned resultSessionIdStrMaxSize,
+ unsigned& contentLength, Boolean& urlIsRTSPS) {
+ // This parser is currently rather dumb; it should be made smarter #####
+ urlIsRTSPS = False; // by default
+
+ // "Be liberal in what you accept": Skip over any whitespace at the start of the request:
+ unsigned i;
+ for (i = 0; i < reqStrSize; ++i) {
+ char c = reqStr[i];
+ if (!(c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '\0')) break;
+ }
+ if (i == reqStrSize) return False; // The request consisted of nothing but whitespace!
+
+ // Then read everything up to the next space (or tab) as the command name:
+ Boolean parseSucceeded = False;
+ unsigned i1 = 0;
+ for (; i1 < resultCmdNameMaxSize-1 && i < reqStrSize; ++i,++i1) {
+ char c = reqStr[i];
+ if (c == ' ' || c == '\t') {
+ parseSucceeded = True;
+ break;
+ }
+
+ resultCmdName[i1] = c;
+ }
+ resultCmdName[i1] = '\0';
+ if (!parseSucceeded) return False;
+
+ // Skip over the prefix of any "rtsp://" or "rtsp:/" (or "rtsps://" or "rtsps:/")
+ // URL that follows:
+ unsigned j = i+1;
+ while (j < reqStrSize && (reqStr[j] == ' ' || reqStr[j] == '\t')) ++j; // skip over any additional white space
+ for (; (int)j < (int)(reqStrSize-8); ++j) {
+ if ((reqStr[j] == 'r' || reqStr[j] == 'R')
+ && (reqStr[j+1] == 't' || reqStr[j+1] == 'T')
+ && (reqStr[j+2] == 's' || reqStr[j+2] == 'S')
+ && (reqStr[j+3] == 'p' || reqStr[j+3] == 'P')) {
+ if (reqStr[j+4] == 's' || reqStr[j+4] == 'S') {
+ urlIsRTSPS = True;
+ ++j;
+ }
+ if (reqStr[j+4] == ':' && reqStr[j+5] == '/') {
+ j += 6;
+ if (reqStr[j] == '/') {
+ // This is a "rtsp(s)://" URL; skip over the host:port part that follows:
+ ++j;
+ while (j < reqStrSize && reqStr[j] != '/' && reqStr[j] != ' ') ++j;
+ } else {
+ // This is a "rtsp(s):/" URL; back up to the "/":
+ --j;
+ }
+ i = j;
+ break;
+ }
+ }
+ }
+
+ // Look for the URL suffix (before the following "RTSP/"):
+ parseSucceeded = False;
+ for (unsigned k = i+1; (int)k < (int)(reqStrSize-5); ++k) {
+ if (reqStr[k] == 'R' && reqStr[k+1] == 'T' &&
+ reqStr[k+2] == 'S' && reqStr[k+3] == 'P' && reqStr[k+4] == '/') {
+ while (--k >= i && reqStr[k] == ' ') {} // go back over all spaces before "RTSP/"
+ unsigned k1 = k;
+ while (k1 > i && reqStr[k1] != '/') --k1;
+
+ // ASSERT: At this point
+ // i: first space or slash after "host" or "host:port"
+ // k: last non-space before "RTSP/"
+ // k1: last slash in the range [i,k]
+
+ // The URL suffix comes from [k1+1,k]
+ // Copy "resultURLSuffix":
+ unsigned n = 0, k2 = k1+1;
+ if (k2 <= k) {
+ if (k - k1 + 1 > resultURLSuffixMaxSize) return False; // there's no room
+ while (k2 <= k) resultURLSuffix[n++] = reqStr[k2++];
+ }
+ resultURLSuffix[n] = '\0';
+
+ // The URL 'pre-suffix' comes from [i+1,k1-1]
+ // Copy "resultURLPreSuffix":
+ n = 0; k2 = i+1;
+ if (k2+1 <= k1) {
+ if (k1 - i > resultURLPreSuffixMaxSize) return False; // there's no room
+ while (k2 <= k1-1) resultURLPreSuffix[n++] = reqStr[k2++];
+ }
+ resultURLPreSuffix[n] = '\0';
+ decodeURL(resultURLPreSuffix);
+
+ i = k + 7; // to go past " RTSP/"
+ parseSucceeded = True;
+ break;
+ }
+ }
+ if (!parseSucceeded) return False;
+
+ // Look for "CSeq:" (mandatory, case insensitive), skip whitespace,
+ // then read everything up to the next \r or \n as 'CSeq':
+ parseSucceeded = False;
+ for (j = i; (int)j < (int)(reqStrSize-5); ++j) {
+ if (_strncasecmp("CSeq:", &reqStr[j], 5) == 0) {
+ j += 5;
+ while (j < reqStrSize && (reqStr[j] == ' ' || reqStr[j] == '\t')) ++j;
+ unsigned n;
+ for (n = 0; n < resultCSeqMaxSize-1 && j < reqStrSize; ++n,++j) {
+ char c = reqStr[j];
+ if (c == '\r' || c == '\n') {
+ parseSucceeded = True;
+ break;
+ }
+
+ resultCSeq[n] = c;
+ }
+ resultCSeq[n] = '\0';
+ break;
+ }
+ }
+ if (!parseSucceeded) return False;
+
+ // Look for "Session:" (optional, case insensitive), skip whitespace,
+ // then read everything up to the next \r or \n as 'Session':
+ resultSessionIdStr[0] = '\0'; // default value (empty string)
+ for (j = i; (int)j < (int)(reqStrSize-8); ++j) {
+ if (_strncasecmp("Session:", &reqStr[j], 8) == 0) {
+ j += 8;
+ while (j < reqStrSize && (reqStr[j] == ' ' || reqStr[j] == '\t')) ++j;
+ unsigned n;
+ for (n = 0; n < resultSessionIdStrMaxSize-1 && j < reqStrSize; ++n,++j) {
+ char c = reqStr[j];
+ if (c == '\r' || c == '\n') {
+ break;
+ }
+
+ resultSessionIdStr[n] = c;
+ }
+ resultSessionIdStr[n] = '\0';
+ break;
+ }
+ }
+
+ // Also: Look for "Content-Length:" (optional, case insensitive)
+ contentLength = 0; // default value
+ for (j = i; (int)j < (int)(reqStrSize-15); ++j) {
+ if (_strncasecmp("Content-Length:", &(reqStr[j]), 15) == 0) {
+ j += 15;
+ while (j < reqStrSize && (reqStr[j] == ' ' || reqStr[j] == '\t')) ++j;
+ unsigned num;
+ if (sscanf(&reqStr[j], "%u", &num) == 1) {
+ contentLength = num;
+ }
+ }
+ }
+ return True;
+}
+
+Boolean parseRangeParam(char const* paramStr,
+ double& rangeStart, double& rangeEnd,
+ char*& absStartTime, char*& absEndTime,
+ Boolean& startTimeIsNow) {
+ delete[] absStartTime; delete[] absEndTime;
+ absStartTime = absEndTime = NULL; // by default, unless "paramStr" is a "clock=..." string
+ startTimeIsNow = False; // by default
+ double start, end;
+ int numCharsMatched1 = 0, numCharsMatched2 = 0, numCharsMatched3 = 0, numCharsMatched4 = 0;
+ int startHour = 0, startMin = 0, endHour = 0, endMin = 0;
+ double startSec = 0.0, endSec = 0.0;
+ Locale l("C", Numeric);
+ if (sscanf(paramStr, "npt = %d:%d:%lf - %d:%d:%lf", &startHour, &startMin, &startSec, &endHour, &endMin, &endSec) == 6) {
+ rangeStart = startHour*3600 + startMin*60 + startSec;
+ rangeEnd = endHour*3600 + endMin*60 + endSec;
+ } else if (sscanf(paramStr, "npt =%lf - %d:%d:%lf", &start, &endHour, &endMin, &endSec) == 4) {
+ rangeStart = start;
+ rangeEnd = endHour*3600 + endMin*60 + endSec;
+ } else if (sscanf(paramStr, "npt = %d:%d:%lf -", &startHour, &startMin, &startSec) == 3) {
+ rangeStart = startHour*3600 + startMin*60 + startSec;
+ rangeEnd = 0.0;
+ } else if (sscanf(paramStr, "npt = %lf - %lf", &start, &end) == 2) {
+ rangeStart = start;
+ rangeEnd = end;
+ } else if (sscanf(paramStr, "npt = %n%lf -", &numCharsMatched1, &start) == 1) {
+ if (paramStr[numCharsMatched1] == '-') {
+ // special case for "npt = -<endtime>", which matches here:
+ rangeStart = 0.0; startTimeIsNow = True;
+ rangeEnd = -start;
+ } else {
+ rangeStart = start;
+ rangeEnd = 0.0;
+ }
+ } else if (sscanf(paramStr, "npt = now - %lf", &end) == 1) {
+ rangeStart = 0.0; startTimeIsNow = True;
+ rangeEnd = end;
+ } else if (sscanf(paramStr, "npt = now -%n", &numCharsMatched2) == 0 && numCharsMatched2 > 0) {
+ rangeStart = 0.0; startTimeIsNow = True;
+ rangeEnd = 0.0;
+ } else if (sscanf(paramStr, "clock = %n", &numCharsMatched3) == 0 && numCharsMatched3 > 0) {
+ rangeStart = rangeEnd = 0.0;
+
+ char const* utcTimes = ¶mStr[numCharsMatched3];
+ size_t len = strlen(utcTimes) + 1;
+ char* as = new char[len];
+ char* ae = new char[len];
+ int sscanfResult = sscanf(utcTimes, "%[^-]-%[^\r\n]", as, ae);
+ if (sscanfResult == 2) {
+ absStartTime = as;
+ absEndTime = ae;
+ } else if (sscanfResult == 1) {
+ absStartTime = as;
+ delete[] ae;
+ } else {
+ delete[] as; delete[] ae;
+ return False;
+ }
+ } else if (sscanf(paramStr, "smtpe = %n", &numCharsMatched4) == 0 && numCharsMatched4 > 0) {
+ // We accept "smtpe=" parameters, but currently do not interpret them.
+ } else {
+ return False; // The header is malformed
+ }
+
+ return True;
+}
+
+Boolean parseRangeHeader(char const* buf,
+ double& rangeStart, double& rangeEnd,
+ char*& absStartTime, char*& absEndTime,
+ Boolean& startTimeIsNow) {
+ // First, find "Range:"
+ while (1) {
+ if (*buf == '\0') return False; // not found
+ if (_strncasecmp(buf, "Range: ", 7) == 0) break;
+ ++buf;
+ }
+
+ char const* fields = buf + 7;
+ while (*fields == ' ') ++fields;
+ return parseRangeParam(fields, rangeStart, rangeEnd, absStartTime, absEndTime, startTimeIsNow);
+}
+
+Boolean parseScaleHeader(char const* buf, float& scale) {
+ // Initialize the result parameter to a default value:
+ scale = 1.0;
+
+ // First, find "Scale:"
+ while (1) {
+ if (*buf == '\0') return False; // not found
+ if (_strncasecmp(buf, "Scale:", 6) == 0) break;
+ ++buf;
+ }
+
+ char const* fields = buf + 6;
+ while (*fields == ' ') ++fields;
+ float sc;
+ if (sscanf(fields, "%f", &sc) == 1) {
+ scale = sc;
+ } else {
+ return False; // The header is malformed
+ }
+
+ return True;
+}
+
+// Used to implement "RTSPOptionIsSupported()":
+static Boolean isSeparator(char c) { return c == ' ' || c == ',' || c == ';' || c == ':'; }
+
+Boolean RTSPOptionIsSupported(char const* commandName, char const* optionsResponseString) {
+ do {
+ if (commandName == NULL || optionsResponseString == NULL) break;
+
+ unsigned const commandNameLen = strlen(commandName);
+ if (commandNameLen == 0) break;
+
+ // "optionsResponseString" is assumed to be a list of command names, separated by " " and/or ",", ";", or ":"
+ // Scan through these, looking for "commandName".
+ while (1) {
+ // Skip over separators:
+ while (*optionsResponseString != '\0' && isSeparator(*optionsResponseString)) ++optionsResponseString;
+ if (*optionsResponseString == '\0') break;
+
+ // At this point, "optionsResponseString" begins with a command name (with perhaps a separator afterwads).
+ if (strncmp(commandName, optionsResponseString, commandNameLen) == 0) {
+ // We have at least a partial match here.
+ optionsResponseString += commandNameLen;
+ if (*optionsResponseString == '\0' || isSeparator(*optionsResponseString)) return True;
+ }
+
+ // No match. Skip over the rest of the command name:
+ while (*optionsResponseString != '\0' && !isSeparator(*optionsResponseString)) ++optionsResponseString;
+ }
+ } while (0);
+
+ return False;
+}
+
+char const* dateHeader() {
+ static char buf[200];
+#if !defined(_WIN32_WCE)
+ time_t tt = time(NULL);
+ tm time_tm;
+#ifdef _WIN32
+ if (gmtime_s(&time_tm, &tt) != 0) {
+ time_tm = tm{};
+ }
+#else
+ if (gmtime_r(&tt, &time_tm) == NULL) {
+ time_tm = tm();
+ }
+#endif
+ static const char* day[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+ static const char* month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+ snprintf(buf, sizeof buf, "Date: %s, %s %02d %04d %02d:%02d:%02d GMT\r\n",
+ day[time_tm.tm_wday], month[time_tm.tm_mon], time_tm.tm_mday,
+ 1900 + time_tm.tm_year,
+ time_tm.tm_hour, time_tm.tm_min, time_tm.tm_sec);
+#else
+ // WinCE apparently doesn't have "time()", or "gmtime()",
+ // so generate the "Date:" header a different, WinCE-specific way.
+ // (Thanks to Pierre l'Hussiez for this code)
+ // RSF: But where is the "Date: " string? This code doesn't look quite right...
+ SYSTEMTIME SystemTime;
+ GetSystemTime(&SystemTime);
+ WCHAR dateFormat[] = L"ddd, MMM dd yyyy";
+ WCHAR timeFormat[] = L"HH:mm:ss GMT\r\n";
+ WCHAR inBuf[200];
+ DWORD locale = LOCALE_NEUTRAL;
+
+ int ret = GetDateFormat(locale, 0, &SystemTime,
+ (LPTSTR)dateFormat, (LPTSTR)inBuf, sizeof inBuf);
+ inBuf[ret - 1] = ' ';
+ ret = GetTimeFormat(locale, 0, &SystemTime,
+ (LPTSTR)timeFormat,
+ (LPTSTR)inBuf + ret, (sizeof inBuf) - ret);
+ wcstombs(buf, inBuf, wcslen(inBuf));
+#endif
+ return buf;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/SIPClient.cpp new/live/liveMedia/SIPClient.cpp
--- old/live/liveMedia/SIPClient.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/SIPClient.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -107,7 +107,6 @@
// Set the "User-Agent:" header to use in each request:
char const* const libName = "LIVE555 Streaming Media v";
- char const* const libVersionStr = LIVEMEDIA_LIBRARY_VERSION_STRING;
char const* libPrefix; char const* libSuffix;
if (applicationName == NULL || applicationName[0] == '\0') {
applicationName = libPrefix = libSuffix = "";
@@ -116,10 +115,10 @@
libSuffix = ")";
}
unsigned userAgentNameSize
- = fApplicationNameSize + strlen(libPrefix) + strlen(libName) + strlen(libVersionStr) + strlen(libSuffix) + 1;
+ = fApplicationNameSize + strlen(libPrefix) + strlen(libName) + strlen(liveMediaLibraryVersionStr) + strlen(libSuffix) + 1;
char* userAgentName = new char[userAgentNameSize];
sprintf(userAgentName, "%s%s%s%s%s",
- applicationName, libPrefix, libName, libVersionStr, libSuffix);
+ applicationName, libPrefix, libName, liveMediaLibraryVersionStr, libSuffix);
setUserAgentString(userAgentName);
delete[] userAgentName;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/ServerMediaSession.cpp new/live/liveMedia/ServerMediaSession.cpp
--- old/live/liveMedia/ServerMediaSession.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/ServerMediaSession.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -56,7 +56,6 @@
}
static char const* const libNameStr = "LIVE555 Streaming Media v";
-char const* const libVersionStr = LIVEMEDIA_LIBRARY_VERSION_STRING;
ServerMediaSession::ServerMediaSession(UsageEnvironment& env,
char const* streamName,
@@ -71,8 +70,8 @@
char* libNamePlusVersionStr = NULL; // by default
if (info == NULL || description == NULL) {
- libNamePlusVersionStr = new char[strlen(libNameStr) + strlen(libVersionStr) + 1];
- sprintf(libNamePlusVersionStr, "%s%s", libNameStr, libVersionStr);
+ libNamePlusVersionStr = new char[strlen(libNameStr) + strlen(liveMediaLibraryVersionStr) + 1];
+ sprintf(libNamePlusVersionStr, "%s%s", libNameStr, liveMediaLibraryVersionStr);
}
fInfoSDPString = strDup(info == NULL ? libNamePlusVersionStr : info);
fDescriptionSDPString = strDup(description == NULL ? libNamePlusVersionStr : description);
@@ -288,7 +287,7 @@
+ 20 + 6 + 20 + 3/*IP4 or IP6*/ + ipAddressStrSize
+ strlen(fDescriptionSDPString)
+ strlen(fInfoSDPString)
- + strlen(libNameStr) + strlen(libVersionStr)
+ + strlen(libNameStr) + strlen(liveMediaLibraryVersionStr)
+ strlen(sourceFilterLine)
+ strlen(rangeLine)
+ strlen(fDescriptionSDPString)
@@ -306,7 +305,7 @@
ipAddressStr.val(), // o= <address>
fDescriptionSDPString, // s= <description>
fInfoSDPString, // i= <info>
- libNameStr, libVersionStr, // a=tool:
+ libNameStr, liveMediaLibraryVersionStr, // a=tool:
sourceFilterLine, // a=source-filter: incl (if a SSM session)
rangeLine, // a=range: line
fDescriptionSDPString, // a=x-qt-text-nam: line
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/TLSState.cpp new/live/liveMedia/TLSState.cpp
--- old/live/liveMedia/TLSState.cpp 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/TLSState.cpp 2024-06-26 07:46:23.000000000 +0200
@@ -228,7 +228,7 @@
if (SSL_CTX_set_ecdh_auto(fCtx, 1) != 1) break;
- if (SSL_CTX_use_certificate_file(fCtx, fCertificateFileName, SSL_FILETYPE_PEM) != 1) break;
+ if (SSL_CTX_use_certificate_chain_file(fCtx, fCertificateFileName) != 1) break;
if (SSL_CTX_use_PrivateKey_file(fCtx, fPrivateKeyFileName, SSL_FILETYPE_PEM) != 1) break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/include/QuickTimeFileSink.hh new/live/liveMedia/include/QuickTimeFileSink.hh
--- old/live/liveMedia/include/QuickTimeFileSink.hh 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/include/QuickTimeFileSink.hh 2024-06-26 07:46:23.000000000 +0200
@@ -151,6 +151,8 @@
_atom(h263);
_atom(avc1);
_atom(avcC);
+ _atom(hvc1);
+ _atom(hvcC);
_atom(mp4v);
_atom(rtp);
_atom(tims);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/live/liveMedia/include/liveMedia_version.hh new/live/liveMedia/include/liveMedia_version.hh
--- old/live/liveMedia/include/liveMedia_version.hh 2023-11-30 09:22:23.000000000 +0100
+++ new/live/liveMedia/include/liveMedia_version.hh 2024-06-26 07:46:23.000000000 +0200
@@ -14,12 +14,15 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
**********/
// Version information for the "liveMedia" library
-// Copyright (c) 1996-2023 Live Networks, Inc. All rights reserved.
+// Copyright (c) 1996-2024 Live Networks, Inc. All rights reserved.
#ifndef _LIVEMEDIA_VERSION_HH
#define _LIVEMEDIA_VERSION_HH
-#define LIVEMEDIA_LIBRARY_VERSION_STRING "2023.11.30"
-#define LIVEMEDIA_LIBRARY_VERSION_INT 1701302400
+#define LIVEMEDIA_LIBRARY_VERSION_STRING "2024.06.26"
+#define LIVEMEDIA_LIBRARY_VERSION_INT 1719360000
+
+extern char const* const liveMediaLibraryVersionStr;
+extern int const liveMediaLibraryVersionInt;
#endif
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-kiwi for openSUSE:Factory checked in at 2024-07-22 17:14:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-kiwi (Old)
and /work/SRC/openSUSE:Factory/.python-kiwi.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-kiwi"
Mon Jul 22 17:14:15 2024 rev:117 rq:1188893 version:10.0.25
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-kiwi/python-kiwi.changes 2024-07-05 19:49:23.970446357 +0200
+++ /work/SRC/openSUSE:Factory/.python-kiwi.new.17339/python-kiwi.changes 2024-07-22 17:14:32.444975758 +0200
@@ -1,0 +2,122 @@
+Sun Jul 14 11:17:33 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Bump version: 10.0.24 → 10.0.25
+
+-------------------------------------------------------------------
+Fri Jul 12 12:58:24 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Fix mocking of test_process_result_bundle_as_rpm
+
+-------------------------------------------------------------------
+Fri Jul 12 12:43:23 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Fixed logging behavior of Compress::get_format
+
+ The get_format() method allows to check which compression format
+ a given input stream has. This is done by calling the supported
+ compression tools in a row and let them check if they can deal
+ with the provided data or not. As a result error messages are
+ logged for streams that some tool doesn't understand. However,
+ those error messages are no errors and only the result of the
+ checking. This information in the kiwi log file is confusing
+ and several users already complained when they see information
+ like:
+
+ EXEC: Failed with stderr: /usr/bin/xz: ...: File format not recognized
+
+ This commit changes how the compression tooling is called in a
+ way that no exception is raised (which leads to the above error message)
+ but the result returncode is used to decide on the success or
+ error of the respective compression tooling.
+
+-------------------------------------------------------------------
+Fri Jul 12 10:18:24 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Allow to set custom ISO Application ID
+
+ Add new <type ... application_id="..."/> attribute to be set in
+ the ISO header main block. The application ID was used as identifier
+ in the legacy initrd code from former kiwi versions. Because of
+ this there is still the compat layer which sets an App ID as MBR
+ identifier string unless the new application_id overwrites it.
+ This Fixes #1810
+
+-------------------------------------------------------------------
+Fri Jul 12 09:43:09 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Bump version: 10.0.23 → 10.0.24
+
+-------------------------------------------------------------------
+Thu Jul 11 16:47:22 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Added integration test for SUSE agama installer
+
+ This integration test builds a self-install ISO image which
+ drops the SUSE Agama installer into a ramdisk for performing
+ an interactive installation procedure to test Agama
+
+-------------------------------------------------------------------
+Thu Jul 11 14:33:16 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Add --set-type-attr and --set-release-version
+
+ Allow to set/overwrite type section attributes via the cmdline.
+ Allow to set/add the release-version element via the cmdline.
+ This Fixes #2478 and Fixes #2588
+
+-------------------------------------------------------------------
+Wed Jul 10 16:58:57 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Update integration test for eficsm
+
+ Update the type of the Secure profile of the live image integration
+ test as well as the type of the simple-disk test to make use of the
+ eficsm="false" attribute to switch off CSM mode and test an EFI only
+ layout.
+
+-------------------------------------------------------------------
+Wed Jul 10 16:32:30 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Add new eficsm type attribute
+
+ Allow to produce EFI/UEFI images without hybrid CSM
+ capabilities. This Fixes #2407
+
+-------------------------------------------------------------------
+Wed Jul 10 11:26:45 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Wait for loop device detach to complete
+
+ Detaching a loop device via 'losetup -d' is an async operation.
+ Once the command returns the loop can still be associated with
+ the block special. Therefore this commit waits until the block
+ device got released or a timeout is hit. This Fixes #2580
+
+-------------------------------------------------------------------
+Tue Jul 09 09:40:49 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Update requires for kiwi-systemdeps-disk-images
+
+ On Tumbleweed several changes caused tools like strings
+ or the codepage for mtools to be missing in a standard
+ installation. For building disk images especially EFI
+ capable ones with vendor information kiwi needs the above
+ tool. This commit adds the packages providing them on
+ Tumbleweed to the meta systemdeps for disk images.
+ This Fixes #2585
+
+-------------------------------------------------------------------
+Mon Jul 08 09:17:49 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Supplements are not understood by Debian/Ubuntu
+
+-------------------------------------------------------------------
+Thu Jul 04 16:16:44 CEST 2024 - Marcus Schäfer <marcus.schaefer(a)gmail.com>
+
+- Split out bash completion into a sub-package
+
+ Per review of the SUSE packaging team we should split out
+ the bash completion into its own sub-package to give users
+ better control over the completion feature.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-kiwi.spec ++++++
--- /var/tmp/diff_new_pack.3bOjdI/_old 2024-07-22 17:14:33.893033917 +0200
+++ /var/tmp/diff_new_pack.3bOjdI/_new 2024-07-22 17:14:33.897034078 +0200
@@ -52,7 +52,7 @@
%endif
Name: python-kiwi
-Version: 10.0.23
+Version: 10.0.25
Provides: kiwi-schema = 8.1
Release: 0
Url: https://github.com/OSInside/kiwi
@@ -334,6 +334,10 @@
Requires: kiwi-systemdeps-filesystems = %{version}-%{release}
Requires: kiwi-systemdeps-bootloaders = %{version}-%{release}
Requires: kiwi-systemdeps-iso-media = %{version}-%{release}
+%if 0%{?suse_version} >= 1650
+Requires: binutils
+Requires: glibc-gconv-modules-extra
+%endif
%if 0%{?suse_version}
Requires: gptfdisk
%else
@@ -412,7 +416,6 @@
Requires: file
Requires: sed
Requires: bash
-Recommends: bash-completion
Requires: python%{python3_pkgversion} >= 3.9
%if 0%{?ubuntu} || 0%{?debian}
Requires: python%{python3_pkgversion}-yaml
@@ -655,6 +658,19 @@
%description -n kiwi-man-pages
Provides manual pages to describe the kiwi commands
+%package -n kiwi-bash-completion
+Summary: Bash Completion for kiwi-ng
+Requires: bash-completion
+Requires: python%{python3_pkgversion}-kiwi = %{version}
+%if ! (0%{?debian} || 0%{?ubuntu})
+Supplements: (%{name} and bash-completion)
+%endif
+BuildArch: noarch
+
+%description -n kiwi-bash-completion
+Bash command line completion support for python-kiwi - completion
+of subcommands, parameters and keywords for the kiwi-ng command.
+
%prep
%setup -q -n kiwi-%{version}
@@ -764,11 +780,13 @@
%{_bindir}/kiwi-ng
%{_bindir}/kiwi-ng-3*
%{python3_sitelib}/kiwi*
-%{_usr}/share/bash-completion/completions/kiwi-ng
%{_usr}/share/kiwi/xsl_to_v74/
%{_defaultdocdir}/python-kiwi/LICENSE
%{_defaultdocdir}/python-kiwi/README
+%files -n kiwi-bash-completion
+%{_usr}/share/bash-completion/completions/kiwi-ng
+
%files -n kiwi-man-pages
%config %_sysconfdir/kiwi.yml
%doc %{_mandir}/man8/*
++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.3bOjdI/_old 2024-07-22 17:14:33.925035203 +0200
+++ /var/tmp/diff_new_pack.3bOjdI/_new 2024-07-22 17:14:33.929035363 +0200
@@ -3,7 +3,7 @@
pkgname=('python-kiwi' 'kiwi-man-pages' 'dracut-kiwi-lib' 'dracut-kiwi-oem-repart' 'dracut-kiwi-oem-dump' 'dracut-kiwi-live' 'dracut-kiwi-overlay')
arch=(x86_64)
-pkgver=10.0.23
+pkgver=10.0.25
pkgrel=0
pkgdesc="KIWI - Appliance Builder Next Generation"
url="https://github.com/SUSE/kiwi/tarball/master"
@@ -12,7 +12,7 @@
provides=(kiwi-ng kiwi)
source=("${pkgname}.tar.gz")
changelog="${pkgname}.changes"
-md5sums=('dbea32cd584296db7d9b0a2bf8fa3654')
+md5sums=('34e5270b2aaf925e0cc8a9e1816e169c')
build() {
++++++ python-kiwi.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/.bumpversion.cfg new/kiwi-10.0.25/.bumpversion.cfg
--- old/kiwi-10.0.23/.bumpversion.cfg 2024-07-04 12:57:58.582599600 +0200
+++ new/kiwi-10.0.25/.bumpversion.cfg 2024-07-14 11:17:33.562450600 +0200
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 10.0.23
+current_version = 10.0.25
commit = True
tag = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/PKG-INFO new/kiwi-10.0.25/PKG-INFO
--- old/kiwi-10.0.23/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/kiwi-10.0.25/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: kiwi
-Version: 10.0.23
+Version: 10.0.25
Summary: KIWI - Appliance Builder
Home-page: https://osinside.github.io/kiwi/
License: GPL-3.0-or-later
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/doc/source/commands/system_build.rst new/kiwi-10.0.25/doc/source/commands/system_build.rst
--- old/kiwi-10.0.23/doc/source/commands/system_build.rst 2024-05-02 09:12:27.044463600 +0200
+++ new/kiwi-10.0.25/doc/source/commands/system_build.rst 2024-07-11 21:06:57.573307500 +0200
@@ -28,6 +28,8 @@
[--set-container-derived-from=<uri>]
[--set-container-tag=<name>]
[--add-container-label=<label>...]
+ [--set-type-attr=<attribute=value>...]
+ [--set-release-version=<version>]
[--signing-key=<key-file>...]
kiwi-ng system build help
@@ -195,6 +197,16 @@
The setting is only effective if the container configuration
provides the initial tag value.
+--set-type-attr=<attribute=value>
+
+ Overwrite/set the attribute with the provided value in the selected
+ build type section. Example: `--set-type-attr volid=some`
+
+--set-release-version=<version>
+
+ Overwrite/set the release-version element in the selected
+ build type preferences section
+
--signing-key=<key-file>
Set the key file to be trusted and imported into the package
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/doc/source/commands/system_prepare.rst new/kiwi-10.0.25/doc/source/commands/system_prepare.rst
--- old/kiwi-10.0.23/doc/source/commands/system_prepare.rst 2024-05-02 09:12:27.044463600 +0200
+++ new/kiwi-10.0.25/doc/source/commands/system_prepare.rst 2024-07-11 21:06:57.573307500 +0200
@@ -26,6 +26,8 @@
[--set-container-derived-from=<uri>]
[--set-container-tag=<name>]
[--add-container-label=<label>...]
+ [--set-type-attr=<attribute=value>...]
+ [--set-release-version=<version>]
[--signing-key=<key-file>...]
kiwi-ng system prepare help
@@ -196,6 +198,16 @@
The setting applies only if the container configuration
provides an initial tag value.
+--set-type-attr=<attribute=value>
+
+ Overwrite/set the attribute with the provided value in the selected
+ build type section. Example: `--set-type-attr volid=some`
+
+--set-release-version=<version>
+
+ Overwrite/set the release-version element in the selected
+ build type preferences section
+
--signing-key=<key-file>
Set the key file to be trusted and imported into the package
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/doc/source/conf.py new/kiwi-10.0.25/doc/source/conf.py
--- old/kiwi-10.0.23/doc/source/conf.py 2024-07-04 12:57:58.582599600 +0200
+++ new/kiwi-10.0.25/doc/source/conf.py 2024-07-14 11:17:33.562450600 +0200
@@ -139,7 +139,7 @@
# built documents.
#
# The short X.Y version.
-version = '10.0.23'
+version = '10.0.25'
# The full version, including alpha/beta/rc tags.
release = version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/doc/source/image_description/elements.rst new/kiwi-10.0.25/doc/source/image_description/elements.rst
--- old/kiwi-10.0.23/doc/source/image_description/elements.rst 2024-06-03 09:21:45.397441600 +0200
+++ new/kiwi-10.0.25/doc/source/image_description/elements.rst 2024-07-13 13:48:12.457693300 +0200
@@ -384,6 +384,11 @@
specifies the size in MB. If not set the boot partition
size is set to 200 MB
+eficsm="true|false":
+ For images with an EFI layout, specify if the legacy
+ CSM (BIOS) mode should be supported or not. By default
+ CSM mode is enabled.
+
efipartsize="nonNegativeInteger":
For images with an EFI fat partition this attribute
specifies the size in MB. If not set the EFI partition
@@ -483,14 +488,32 @@
filesystem="btrfs|ext2|ext3|ext4|squashfs|xfs":
The root filesystem
-firmware="efi|uefi":
- Specifies the boot firmware of the appliance, supported
- options are: `bios`, `ec2`, `efi`, `uefi`, `ofw` and `opal`.
- This attribute is used to differentiate the image according to the
- firmware which boots up the system. It mostly impacts the disk
- layout and the partition table type. By default `bios` is used on x86,
+firmware="efi|uefi|bios|ec2|ofw|opal":
+ Specifies the boot firmware of the appliance. This attribute is
+ used to differentiate the image according to the firmware which
+ boots up the system. It mostly impacts the disk layout and the
+ partition table type. By default `bios` is used on x86,
`ofw` on PowerPC and `efi` on ARM.
+ * `efi`
+ Standard EFI layout
+
+ * `uefi`
+ Standard EFI layout for secure boot
+
+ * `bios`
+ Standard BIOS layout for x86
+
+ * `ec2`
+ Standard BIOS layout for x86 using Xen grub modules for old
+ style Xen boot in Amazon EC2
+
+ * `ofw`
+ Standard PPC layout
+
+ * `opal`
+ Standard openPOWER PPC64 layout. kexec based boot process
+
force_mbr="true|false":
Boolean parameter to force the usage of a MBR partition
table even if the system would default to GPT. This is occasionally
@@ -920,6 +943,11 @@
For the ISO type only, specifies the volume ID (volume name or label)
to be written into the master block. There is space for 32 characters.
+application_id="string":
+ For the ISO/(oem install ISO) type only, specifies the Application
+ ID to be written into the master block. There is space for
+ 128 characters.
+
vhdfixedtag="GUID_string":
For the VHD disk format, specifies the GUID
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/bootloader/install/grub2.py new/kiwi-10.0.25/kiwi/bootloader/install/grub2.py
--- old/kiwi-10.0.23/kiwi/bootloader/install/grub2.py 2024-06-18 08:42:06.351156000 +0200
+++ new/kiwi-10.0.25/kiwi/bootloader/install/grub2.py 2024-07-13 13:48:12.457693300 +0200
@@ -131,6 +131,13 @@
'No grub boot code installation on %s', self.arch
)
return False
+ elif self.firmware.efi_mode() and not self.firmware.legacy_bios_mode():
+ # In EFI mode without CSM, no install
+ # of grub2 boot code makes sense
+ log.info(
+ 'No grub boot code installation in EFI only mode'
+ )
+ return False
return True
def install(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/builder/install.py new/kiwi-10.0.25/kiwi/builder/install.py
--- old/kiwi-10.0.23/kiwi/builder/install.py 2024-05-02 09:12:27.060463700 +0200
+++ new/kiwi-10.0.25/kiwi/builder/install.py 2024-07-13 13:48:12.457693300 +0200
@@ -159,8 +159,10 @@
'meta_data': {
'volume_id': self.iso_volume_id,
'mbr_id': self.mbrid.get_id(),
+ 'application_id': self.xml_state.build_type.get_application_id(),
'efi_mode': self.firmware.efi_mode(),
- 'ofw_mode': self.firmware.ofw_mode()
+ 'ofw_mode': self.firmware.ofw_mode(),
+ 'legacy_bios_mode': self.firmware.legacy_bios_mode()
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/builder/live.py new/kiwi-10.0.25/kiwi/builder/live.py
--- old/kiwi-10.0.23/kiwi/builder/live.py 2024-05-02 09:12:27.060463700 +0200
+++ new/kiwi-10.0.25/kiwi/builder/live.py 2024-07-13 13:48:12.457693300 +0200
@@ -140,7 +140,9 @@
'preparer': Defaults.get_preparer(),
'volume_id': self.volume_id,
'mbr_id': self.mbrid.get_id(),
- 'efi_mode': self.firmware.efi_mode()
+ 'application_id': self.xml_state.build_type.get_application_id(),
+ 'efi_mode': self.firmware.efi_mode(),
+ 'legacy_bios_mode': self.firmware.legacy_bios_mode()
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/defaults.py new/kiwi-10.0.25/kiwi/defaults.py
--- old/kiwi-10.0.23/kiwi/defaults.py 2024-05-17 15:49:01.269136700 +0200
+++ new/kiwi-10.0.25/kiwi/defaults.py 2024-07-13 13:48:12.457693300 +0200
@@ -1261,7 +1261,7 @@
:rtype: dict
"""
return {
- 'x86_64': ['efi', 'uefi', 'bios', 'ec2hvm', 'ec2'],
+ 'x86_64': ['efi', 'uefi', 'bios', 'ec2'],
'i586': ['bios'],
'i686': ['bios'],
'ix86': ['bios'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/firmware.py new/kiwi-10.0.25/kiwi/firmware.py
--- old/kiwi-10.0.23/kiwi/firmware.py 2024-04-18 14:53:58.594938500 +0200
+++ new/kiwi-10.0.25/kiwi/firmware.py 2024-07-13 13:48:12.461693300 +0200
@@ -42,6 +42,8 @@
self.firmware = xml_state.build_type.get_firmware()
self.efipart_mbytes = xml_state.build_type.get_efipartsize()
self.efi_partition_table = xml_state.build_type.get_efiparttable()
+ self.efi_csm = True if xml_state.build_type.get_eficsm() is None \
+ else xml_state.build_type.get_eficsm()
if not self.firmware:
self.firmware = Defaults.get_default_firmware(self.arch)
@@ -75,7 +77,7 @@
else:
return 'msdos'
- def legacy_bios_mode(self):
+ def legacy_bios_mode(self) -> bool:
"""
Check if the legacy boot from BIOS systems should be activated
@@ -84,14 +86,16 @@
:rtype: bool
"""
if self.get_partition_table_type() == 'gpt':
- if self.arch == 'x86_64' or re.match('i.86', self.arch):
+ if (self.arch == 'x86_64' or re.match('i.86', self.arch)) and \
+ (self.firmware == 'efi' or self.firmware == 'uefi') and \
+ self.efi_csm:
return True
else:
return False
else:
return False
- def efi_mode(self):
+ def efi_mode(self) -> str:
"""
Check if EFI mode is requested
@@ -101,6 +105,7 @@
"""
if self.firmware in Defaults.get_efi_capable_firmware_names():
return self.firmware
+ return ''
def ec2_mode(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/iso_tools/base.py new/kiwi-10.0.25/kiwi/iso_tools/base.py
--- old/kiwi-10.0.23/kiwi/iso_tools/base.py 2024-05-02 09:12:27.064463600 +0200
+++ new/kiwi-10.0.25/kiwi/iso_tools/base.py 2024-07-13 13:48:12.461693300 +0200
@@ -19,7 +19,7 @@
import shutil
import logging
from typing import (
- Dict, List
+ Dict, List, Union
)
# project
@@ -61,7 +61,7 @@
raise NotImplementedError
def init_iso_creation_parameters(
- self, custom_args: Dict[str, str] = None
+ self, custom_args: Dict[str, Union[str, bool]] = None
) -> None:
"""
Create a set of standard parameters for the main loader
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/iso_tools/xorriso.py new/kiwi-10.0.25/kiwi/iso_tools/xorriso.py
--- old/kiwi-10.0.23/kiwi/iso_tools/xorriso.py 2024-06-20 11:18:36.731071700 +0200
+++ new/kiwi-10.0.25/kiwi/iso_tools/xorriso.py 2024-07-13 13:48:12.461693300 +0200
@@ -18,7 +18,7 @@
import os
import logging
from typing import (
- Dict, List, Optional
+ Dict, List, Optional, Union
)
# project
@@ -66,36 +66,41 @@
raise KiwiIsoToolError('xorriso tool not found')
def init_iso_creation_parameters(
- self, custom_args: Optional[Dict[str, str]] = None
+ self, custom_args: Optional[Dict[str, Union[str, bool]]] = None
) -> None:
"""
Create a set of standard parameters
:param list custom_args: custom ISO meta data
"""
+ legacy_bios_mode = True
if custom_args:
- if 'mbr_id' in custom_args:
+ application_id = \
+ custom_args.get('application_id') or custom_args.get('mbr_id')
+ if application_id:
self.iso_parameters += [
- '-application_id', custom_args['mbr_id']
+ '-application_id', format(application_id)
]
if 'publisher' in custom_args:
self.iso_parameters += [
- '-publisher', custom_args['publisher']
+ '-publisher', format(custom_args['publisher'])
]
if 'preparer' in custom_args:
self.iso_parameters += [
- '-preparer_id', custom_args['preparer']
+ '-preparer_id', format(custom_args['preparer'])
]
if 'volume_id' in custom_args:
self.iso_parameters += [
- '-volid', custom_args['volume_id']
+ '-volid', format(custom_args['volume_id'])
]
+ if 'legacy_bios_mode' in custom_args:
+ legacy_bios_mode = bool(custom_args['legacy_bios_mode'])
catalog_file = self.boot_path + '/boot.catalog'
self.iso_parameters += [
'-joliet', 'on', '-padding', '0'
]
- if Defaults.is_x86_arch(self.arch):
+ if Defaults.is_x86_arch(self.arch) and legacy_bios_mode:
mbr_file = os.sep.join(
[
self.source_dir, self.boot_path, 'loader',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/schema/kiwi.rnc new/kiwi-10.0.25/kiwi/schema/kiwi.rnc
--- old/kiwi-10.0.23/kiwi/schema/kiwi.rnc 2024-07-04 11:43:52.210901500 +0200
+++ new/kiwi-10.0.25/kiwi/schema/kiwi.rnc 2024-07-13 13:48:12.461693300 +0200
@@ -26,6 +26,7 @@
safe-posix-name = xsd:token {pattern = "[a-zA-Z0-9_\-\.]+"}
safe-posix-short-name = xsd:token {pattern = "[a-zA-Z0-9_\-\.]{1,32}"}
+safe-posix-long-name = xsd:token {pattern = "[a-zA-Z0-9_\-\.]{1,128}"}
locale-name = xsd:token {pattern = "(POSIX|[a-z]{2,3}_[A-Z]{2})(,[a-z]{2,3}_[A-Z]{2})*"}
mac-address-type = xsd:token {pattern = "([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}"}
size-type = xsd:token {pattern = "(\d*|image)"}
@@ -1583,6 +1584,15 @@
sch:param [ name = "attr" value = "efipartsize" ]
sch:param [ name = "types" value = "oem" ]
]
+ k.type.eficsm.attribute =
+ ## For images with an EFI layout, specify if the legacy
+ ## CSM (BIOS) mode should be supported or not. By default
+ ## CSM mode is enabled
+ attribute eficsm { xsd:boolean }
+ >> sch:pattern [ id = "eficsm" is-a = "image_type"
+ sch:param [ name = "attr" value = "eficsm" ]
+ sch:param [ name = "types" value = "oem iso" ]
+ ]
k.type.efifatimagesize.attribute =
## For ISO images (live and install) the EFI boot requires
## an embedded FAT image. This attribute specifies the size
@@ -2139,6 +2149,15 @@
sch:param [ name = "attr" value = "volid" ]
sch:param [ name = "types" value = "iso oem" ]
]
+ k.type.application_id.attribute =
+ ## for the iso/(oem install iso) type only:
+ ## Specifies the Application ID to be written
+ ## into the master block. There is space for 128 characters.
+ attribute application_id { safe-posix-long-name }
+ >> sch:pattern [ id = "application_id" is-a = "image_type"
+ sch:param [ name = "attr" value = "application_id" ]
+ sch:param [ name = "types" value = "iso oem" ]
+ ]
k.type.wwid_wait_timeout.attribute =
## Specifies the wait period in seconds after launching
## the multipath daemon to wait until all presented devices
@@ -2235,6 +2254,7 @@
k.type.bootpartsize.attribute? &
k.type.efipartsize.attribute? &
k.type.efifatimagesize.attribute? &
+ k.type.eficsm.attribute? &
k.type.efiparttable.attribute? &
k.type.dosparttable_extended_layout.attribute? &
k.type.bootprofile.attribute? &
@@ -2300,6 +2320,7 @@
k.type.vga.attribute? &
k.type.vhdfixedtag.attribute? &
k.type.volid.attribute? &
+ k.type.application_id.attribute? &
k.type.wwid_wait_timeout.attribute? &
k.type.derived_from.attribute? &
k.type.delta_root.attribute? &
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/schema/kiwi.rng new/kiwi-10.0.25/kiwi/schema/kiwi.rng
--- old/kiwi-10.0.23/kiwi/schema/kiwi.rng 2024-07-04 11:43:52.214901400 +0200
+++ new/kiwi-10.0.25/kiwi/schema/kiwi.rng 2024-07-13 13:48:12.461693300 +0200
@@ -31,6 +31,11 @@
<param name="pattern">[a-zA-Z0-9_\-\.]{1,32}</param>
</data>
</define>
+ <define name="safe-posix-long-name">
+ <data type="token">
+ <param name="pattern">[a-zA-Z0-9_\-\.]{1,128}</param>
+ </data>
+ </define>
<define name="locale-name">
<data type="token">
<param name="pattern">(POSIX|[a-z]{2,3}_[A-Z]{2})(,[a-z]{2,3}_[A-Z]{2})*</param>
@@ -2293,6 +2298,18 @@
<sch:param name="types" value="oem"/>
</sch:pattern>
</define>
+ <define name="k.type.eficsm.attribute">
+ <attribute name="eficsm">
+ <a:documentation>For images with an EFI layout, specify if the legacy
+CSM (BIOS) mode should be supported or not. By default
+CSM mode is enabled</a:documentation>
+ <data type="boolean"/>
+ </attribute>
+ <sch:pattern id="eficsm" is-a="image_type">
+ <sch:param name="attr" value="eficsm"/>
+ <sch:param name="types" value="oem iso"/>
+ </sch:pattern>
+ </define>
<define name="k.type.efifatimagesize.attribute">
<attribute name="efifatimagesize">
<a:documentation>For ISO images (live and install) the EFI boot requires
@@ -3052,6 +3069,18 @@
<sch:param name="types" value="iso oem"/>
</sch:pattern>
</define>
+ <define name="k.type.application_id.attribute">
+ <attribute name="application_id">
+ <a:documentation>for the iso/(oem install iso) type only:
+Specifies the Application ID to be written
+into the master block. There is space for 128 characters.</a:documentation>
+ <ref name="safe-posix-long-name"/>
+ </attribute>
+ <sch:pattern id="application_id" is-a="image_type">
+ <sch:param name="attr" value="application_id"/>
+ <sch:param name="types" value="iso oem"/>
+ </sch:pattern>
+ </define>
<define name="k.type.wwid_wait_timeout.attribute">
<attribute name="wwid_wait_timeout">
<a:documentation>Specifies the wait period in seconds after launching
@@ -3193,6 +3222,9 @@
<ref name="k.type.efifatimagesize.attribute"/>
</optional>
<optional>
+ <ref name="k.type.eficsm.attribute"/>
+ </optional>
+ <optional>
<ref name="k.type.efiparttable.attribute"/>
</optional>
<optional>
@@ -3386,6 +3418,9 @@
<ref name="k.type.volid.attribute"/>
</optional>
<optional>
+ <ref name="k.type.application_id.attribute"/>
+ </optional>
+ <optional>
<ref name="k.type.wwid_wait_timeout.attribute"/>
</optional>
<optional>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/storage/loop_device.py new/kiwi-10.0.25/kiwi/storage/loop_device.py
--- old/kiwi-10.0.23/kiwi/storage/loop_device.py 2024-06-24 09:01:40.274911000 +0200
+++ new/kiwi-10.0.25/kiwi/storage/loop_device.py 2024-07-11 20:38:03.794079000 +0200
@@ -17,6 +17,8 @@
#
import os
import logging
+import time
+import pathlib
# project
from kiwi.command import Command
@@ -108,9 +110,22 @@
try:
Command.run(['losetup', '-d', self.node_name])
# loop detach is an async operation, re-use of the device
- # should not be done before the kernel event queue has
- # settled after detaching
- Command.run(['udevadm', 'settle'])
+ # should not be done before the block device has been released
+ loop_released = False
+ sys_block_loop = pathlib.Path(
+ '/sys/devices/virtual/block/{0}/loop'.format(
+ os.path.basename(self.node_name)
+ )
+ )
+ for busy in range(0, 100):
+ if not sys_block_loop.is_block_device():
+ loop_released = True
+ break
+ time.sleep(0.1)
+ if not loop_released:
+ raise KiwiCommandError(
+ f'Loop device {self.node_name} still attached'
+ )
except (KiwiCommandError, KiwiCommandNotFound) as issue:
log.error(
'loop cleanup on {0} failed with: {1}'.format(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/tasks/base.py new/kiwi-10.0.25/kiwi/tasks/base.py
--- old/kiwi-10.0.23/kiwi/tasks/base.py 2024-05-02 09:12:27.080463600 +0200
+++ new/kiwi-10.0.25/kiwi/tasks/base.py 2024-07-11 21:06:57.577307500 +0200
@@ -236,6 +236,21 @@
"""
return self._ntuple_token(option, 10)
+ def attr_token(
+ self, option: str
+ ) -> List[Union[bool, str, List[str], None]]:
+ """
+ Helper method for commandline options of the
+ form --option attribute=value
+
+ :param str option: attribute=value string
+
+ :return: common option value representation
+
+ :rtype: list
+ """
+ return self._ntuple_token(option, 2, '=')
+
def run_checks(self, checks: Dict[str, List[str]]) -> None:
"""
This method runs the given runtime checks excluding the ones disabled
@@ -264,7 +279,7 @@
return token
def _ntuple_token(
- self, option: str, tuple_count: int
+ self, option: str, tuple_count: int, separator: str = ','
) -> List[Union[bool, str, List[str], None]]:
"""
Helper method for commandline options of the form --option a,b,c,d,e,f
@@ -279,7 +294,7 @@
:rtype: list
"""
- tokens = option.split(',', tuple_count - 1) if option else []
+ tokens = option.split(separator, tuple_count - 1) if option else []
return [
self._pop_token(tokens) if len(tokens) else None for _ in range(
0, tuple_count
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/tasks/system_build.py new/kiwi-10.0.25/kiwi/tasks/system_build.py
--- old/kiwi-10.0.23/kiwi/tasks/system_build.py 2024-05-02 09:12:27.080463600 +0200
+++ new/kiwi-10.0.25/kiwi/tasks/system_build.py 2024-07-11 21:06:57.577307500 +0200
@@ -32,6 +32,8 @@
[--set-container-derived-from=<uri>]
[--set-container-tag=<name>]
[--add-container-label=<label>...]
+ [--set-type-attr=<attribute=value>...]
+ [--set-release-version=<version>]
[--signing-key=<key-file>...]
kiwi-ng system build help
@@ -104,6 +106,12 @@
password connected to the set-repo specification. If the provided
value describes a filename in the filesystem, the first line of that
file is read and used as credentials information.
+ --set-type-attr=<attribute=value>
+ overwrite/set the attribute with the provided value in the selected
+ build type section
+ --set-release-version=<version>
+ overwrite/set the release-version element in the selected
+ build type preferences section
--signing-key=<key-file>
includes the key-file as a trusted key for package manager validations
--target-dir=<directory>
@@ -173,6 +181,32 @@
)
self.run_checks(build_checks)
+ if self.command_args['--set-type-attr']:
+ for set_type_attr in self.command_args['--set-type-attr']:
+ (attribute, value) = self.attr_token(set_type_attr)
+ log.info(f'--> Set <type ... {attribute}="{value}" .../>')
+ try:
+ eval(
+ f'self.xml_state.build_type.set_{attribute}("{value}")'
+ )
+ except AttributeError as issue:
+ log.error(f'Failed to set type attribute: {issue}')
+ return
+
+ if self.command_args['--set-release-version']:
+ release_version = self.command_args['--set-release-version']
+ log.info(f'--> Set <release-version> = {release_version}')
+ section_overwrite = False
+ for preferences in self.xml_state.get_preferences_sections():
+ section = preferences.get_release_version()
+ if section:
+ section[0] = release_version
+ section_overwrite = True
+ break
+ if not section_overwrite:
+ preferences = self.xml_state.get_preferences_sections()[0]
+ preferences.add_release_version(release_version)
+
if self.command_args['--ignore-repos']:
self.xml_state.delete_repository_sections()
elif self.command_args['--ignore-repos-used-for-build']:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/tasks/system_prepare.py new/kiwi-10.0.25/kiwi/tasks/system_prepare.py
--- old/kiwi-10.0.23/kiwi/tasks/system_prepare.py 2024-05-02 09:12:27.080463600 +0200
+++ new/kiwi-10.0.25/kiwi/tasks/system_prepare.py 2024-07-11 21:06:57.577307500 +0200
@@ -32,6 +32,8 @@
[--set-container-derived-from=<uri>]
[--set-container-tag=<name>]
[--add-container-label=<label>...]
+ [--set-type-attr=<attribute=value>...]
+ [--set-release-version=<version>]
[--signing-key=<key-file>...]
kiwi-ng system prepare help
@@ -104,6 +106,12 @@
password connected to the set-repo specification. If the provided
value describes a filename in the filesystem, the first line of that
file is read and used as credentials information.
+ --set-type-attr=<attribute=value>
+ overwrite/set the attribute with the provided value in the selected
+ build type section
+ --set-release-version=<version>
+ overwrite/set the release-version element in the selected
+ build type preferences section
--signing-key=<key-file>
includes the key-file as a trusted key for package manager validations
"""
@@ -160,6 +168,32 @@
)
self.run_checks(prepare_checks)
+ if self.command_args['--set-type-attr']:
+ for set_type_attr in self.command_args['--set-type-attr']:
+ (attribute, value) = self.attr_token(set_type_attr)
+ log.info(f'--> Set <type ... {attribute}="{value}" .../>')
+ try:
+ eval(
+ f'self.xml_state.build_type.set_{attribute}("{value}")'
+ )
+ except AttributeError as issue:
+ log.error(f'Failed to set type attribute: {issue}')
+ return
+
+ if self.command_args['--set-release-version']:
+ release_version = self.command_args['--set-release-version']
+ log.info(f'--> Set <release-version> = {release_version}')
+ section_overwrite = False
+ for preferences in self.xml_state.get_preferences_sections():
+ section = preferences.get_release_version()
+ if section:
+ section[0] = release_version
+ section_overwrite = True
+ break
+ if not section_overwrite:
+ preferences = self.xml_state.get_preferences_sections()[0]
+ preferences.add_release_version(release_version)
+
if self.command_args['--ignore-repos']:
self.xml_state.delete_repository_sections()
elif self.command_args['--ignore-repos-used-for-build']:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/utils/compress.py new/kiwi-10.0.25/kiwi/utils/compress.py
--- old/kiwi-10.0.23/kiwi/utils/compress.py 2024-04-18 14:53:58.606938600 +0200
+++ new/kiwi-10.0.25/kiwi/utils/compress.py 2024-07-13 13:48:12.461693300 +0200
@@ -129,17 +129,9 @@
:rtype: Optional[str]
"""
for zipper in self.supported_zipper:
- cmd = [zipper, '-l', self.source_filename]
- try:
- Command.run(cmd)
+ result = Command.run(
+ [zipper, '-l', self.source_filename], raise_on_error=False
+ )
+ if result.returncode == 0:
return zipper
- except Exception as exc:
- log.debug(
- 'Error running "{cmd:s}", got a {exc_t:s}: {exc:s}'
- .format(
- cmd=' '.join(cmd),
- exc_t=type(exc).__name__,
- exc=str(exc)
- )
- )
return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/version.py new/kiwi-10.0.25/kiwi/version.py
--- old/kiwi-10.0.23/kiwi/version.py 2024-07-04 12:57:58.582599600 +0200
+++ new/kiwi-10.0.25/kiwi/version.py 2024-07-14 11:17:33.562450600 +0200
@@ -18,5 +18,5 @@
"""
Global version information used in kiwi and the package
"""
-__version__ = '10.0.23'
+__version__ = '10.0.25'
__githash__ = '$Format:%H$'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/kiwi/xml_parse.py new/kiwi-10.0.25/kiwi/xml_parse.py
--- old/kiwi-10.0.23/kiwi/xml_parse.py 2024-07-04 11:43:52.214901400 +0200
+++ new/kiwi-10.0.25/kiwi/xml_parse.py 2024-07-13 13:48:12.465693500 +0200
@@ -3067,7 +3067,7 @@
"""The Image Type of the Logical Extend"""
subclass = None
superclass = None
- def __init__(self, boot=None, bootfilesystem=None, firmware=None, bootkernel=None, bootpartition=None, bootpartsize=None, efipartsize=None, efifatimagesize=None, efiparttable=None, dosparttable_extended_layout=None, bootprofile=None, btrfs_quota_groups=None, btrfs_root_is_snapshot=None, btrfs_root_is_subvolume=None, btrfs_set_default_volume=None, btrfs_root_is_readonly_snapshot=None, compressed=None, devicepersistency=None, editbootconfig=None, editbootinstall=None, filesystem=None, flags=None, format=None, formatoptions=None, fsmountoptions=None, fscreateoptions=None, squashfscompression=None, gcelicense=None, hybridpersistent=None, hybridpersistent_filesystem=None, gpt_hybrid_mbr=None, force_mbr=None, initrd_system=None, image=None, metadata_path=None, installboot=None, install_continue_on_timeout=None, installprovidefailsafe=None, installiso=None, installstick=None, installpxe=None, mediacheck=None, kernelcmdline=None, luks=None, luks_version=None, luksOS=None, luks_randomize
=None, luks_pbkdf=None, mdraid=None, overlayroot=None, overlayroot_write_partition=None, overlayroot_readonly_partsize=None, verity_blocks=None, embed_verity_metadata=None, standalone_integrity=None, embed_integrity_metadata=None, integrity_legacy_hmac=None, integrity_metadata_key_description=None, integrity_keyfile=None, primary=None, ramonly=None, rootfs_label=None, spare_part=None, spare_part_mountpoint=None, spare_part_fs=None, spare_part_fs_attributes=None, spare_part_is_last=None, target_blocksize=None, target_removable=None, selinux_policy=None, vga=None, vhdfixedtag=None, volid=None, wwid_wait_timeout=None, derived_from=None, delta_root=None, ensure_empty_tmpdirs=None, xen_server=None, publisher=None, disk_start_sector=None, root_clone=None, boot_clone=None, bundle_format=None, bootloader=None, containerconfig=None, machine=None, oemconfig=None, size=None, systemdisk=None, partitions=None, vagrantconfig=None, installmedia=None, luksformat=None):
+ def __init__(self, boot=None, bootfilesystem=None, firmware=None, bootkernel=None, bootpartition=None, bootpartsize=None, efipartsize=None, efifatimagesize=None, eficsm=None, efiparttable=None, dosparttable_extended_layout=None, bootprofile=None, btrfs_quota_groups=None, btrfs_root_is_snapshot=None, btrfs_root_is_subvolume=None, btrfs_set_default_volume=None, btrfs_root_is_readonly_snapshot=None, compressed=None, devicepersistency=None, editbootconfig=None, editbootinstall=None, filesystem=None, flags=None, format=None, formatoptions=None, fsmountoptions=None, fscreateoptions=None, squashfscompression=None, gcelicense=None, hybridpersistent=None, hybridpersistent_filesystem=None, gpt_hybrid_mbr=None, force_mbr=None, initrd_system=None, image=None, metadata_path=None, installboot=None, install_continue_on_timeout=None, installprovidefailsafe=None, installiso=None, installstick=None, installpxe=None, mediacheck=None, kernelcmdline=None, luks=None, luks_version=None, luksOS=None, l
uks_randomize=None, luks_pbkdf=None, mdraid=None, overlayroot=None, overlayroot_write_partition=None, overlayroot_readonly_partsize=None, verity_blocks=None, embed_verity_metadata=None, standalone_integrity=None, embed_integrity_metadata=None, integrity_legacy_hmac=None, integrity_metadata_key_description=None, integrity_keyfile=None, primary=None, ramonly=None, rootfs_label=None, spare_part=None, spare_part_mountpoint=None, spare_part_fs=None, spare_part_fs_attributes=None, spare_part_is_last=None, target_blocksize=None, target_removable=None, selinux_policy=None, vga=None, vhdfixedtag=None, volid=None, application_id=None, wwid_wait_timeout=None, derived_from=None, delta_root=None, ensure_empty_tmpdirs=None, xen_server=None, publisher=None, disk_start_sector=None, root_clone=None, boot_clone=None, bundle_format=None, bootloader=None, containerconfig=None, machine=None, oemconfig=None, size=None, systemdisk=None, partitions=None, vagrantconfig=None, installmedia=None, luksformat=No
ne):
self.original_tagname_ = None
self.boot = _cast(None, boot)
self.bootfilesystem = _cast(None, bootfilesystem)
@@ -3077,6 +3077,7 @@
self.bootpartsize = _cast(int, bootpartsize)
self.efipartsize = _cast(int, efipartsize)
self.efifatimagesize = _cast(int, efifatimagesize)
+ self.eficsm = _cast(bool, eficsm)
self.efiparttable = _cast(None, efiparttable)
self.dosparttable_extended_layout = _cast(bool, dosparttable_extended_layout)
self.bootprofile = _cast(None, bootprofile)
@@ -3142,6 +3143,7 @@
self.vga = _cast(None, vga)
self.vhdfixedtag = _cast(None, vhdfixedtag)
self.volid = _cast(None, volid)
+ self.application_id = _cast(None, application_id)
self.wwid_wait_timeout = _cast(int, wwid_wait_timeout)
self.derived_from = _cast(None, derived_from)
self.delta_root = _cast(bool, delta_root)
@@ -3269,6 +3271,8 @@
def set_efipartsize(self, efipartsize): self.efipartsize = efipartsize
def get_efifatimagesize(self): return self.efifatimagesize
def set_efifatimagesize(self, efifatimagesize): self.efifatimagesize = efifatimagesize
+ def get_eficsm(self): return self.eficsm
+ def set_eficsm(self, eficsm): self.eficsm = eficsm
def get_efiparttable(self): return self.efiparttable
def set_efiparttable(self, efiparttable): self.efiparttable = efiparttable
def get_dosparttable_extended_layout(self): return self.dosparttable_extended_layout
@@ -3399,6 +3403,8 @@
def set_vhdfixedtag(self, vhdfixedtag): self.vhdfixedtag = vhdfixedtag
def get_volid(self): return self.volid
def set_volid(self, volid): self.volid = volid
+ def get_application_id(self): return self.application_id
+ def set_application_id(self, application_id): self.application_id = application_id
def get_wwid_wait_timeout(self): return self.wwid_wait_timeout
def set_wwid_wait_timeout(self, wwid_wait_timeout): self.wwid_wait_timeout = wwid_wait_timeout
def get_derived_from(self): return self.derived_from
@@ -3454,6 +3460,13 @@
self.validate_safe_posix_short_name_patterns_, value):
warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_safe_posix_short_name_patterns_, ))
validate_safe_posix_short_name_patterns_ = [['^[a-zA-Z0-9_\\-\\.]{1,32}$']]
+ def validate_safe_posix_long_name(self, value):
+ # Validate type safe-posix-long-name, a restriction on xs:token.
+ if value is not None and Validate_simpletypes_:
+ if not self.gds_validate_simple_patterns(
+ self.validate_safe_posix_long_name_patterns_, value):
+ warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_safe_posix_long_name_patterns_, ))
+ validate_safe_posix_long_name_patterns_ = [['^[a-zA-Z0-9_\\-\\.]{1,128}$']]
def validate_number_type(self, value):
# Validate type number-type, a restriction on xs:token.
if value is not None and Validate_simpletypes_:
@@ -3523,6 +3536,9 @@
if self.efifatimagesize is not None and 'efifatimagesize' not in already_processed:
already_processed.add('efifatimagesize')
outfile.write(' efifatimagesize="%s"' % self.gds_format_integer(self.efifatimagesize, input_name='efifatimagesize'))
+ if self.eficsm is not None and 'eficsm' not in already_processed:
+ already_processed.add('eficsm')
+ outfile.write(' eficsm="%s"' % self.gds_format_boolean(self.eficsm, input_name='eficsm'))
if self.efiparttable is not None and 'efiparttable' not in already_processed:
already_processed.add('efiparttable')
outfile.write(' efiparttable=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.efiparttable), input_name='efiparttable')), ))
@@ -3718,6 +3734,9 @@
if self.volid is not None and 'volid' not in already_processed:
already_processed.add('volid')
outfile.write(' volid=%s' % (quote_attrib(self.volid), ))
+ if self.application_id is not None and 'application_id' not in already_processed:
+ already_processed.add('application_id')
+ outfile.write(' application_id=%s' % (quote_attrib(self.application_id), ))
if self.wwid_wait_timeout is not None and 'wwid_wait_timeout' not in already_processed:
already_processed.add('wwid_wait_timeout')
outfile.write(' wwid_wait_timeout="%s"' % self.gds_format_integer(self.wwid_wait_timeout, input_name='wwid_wait_timeout'))
@@ -3835,6 +3854,15 @@
raise_parse_error(node, 'Bad integer attribute: %s' % exp)
if self.efifatimagesize < 0:
raise_parse_error(node, 'Invalid NonNegativeInteger')
+ value = find_attr_value_('eficsm', node)
+ if value is not None and 'eficsm' not in already_processed:
+ already_processed.add('eficsm')
+ if value in ('true', '1'):
+ self.eficsm = True
+ elif value in ('false', '0'):
+ self.eficsm = False
+ else:
+ raise_parse_error(node, 'Bad boolean attribute')
value = find_attr_value_('efiparttable', node)
if value is not None and 'efiparttable' not in already_processed:
already_processed.add('efiparttable')
@@ -4266,6 +4294,12 @@
self.volid = value
self.volid = ' '.join(self.volid.split())
self.validate_safe_posix_short_name(self.volid) # validate type safe-posix-short-name
+ value = find_attr_value_('application_id', node)
+ if value is not None and 'application_id' not in already_processed:
+ already_processed.add('application_id')
+ self.application_id = value
+ self.application_id = ' '.join(self.application_id.split())
+ self.validate_safe_posix_long_name(self.application_id) # validate type safe-posix-long-name
value = find_attr_value_('wwid_wait_timeout', node)
if value is not None and 'wwid_wait_timeout' not in already_processed:
already_processed.add('wwid_wait_timeout')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/package/python-kiwi-spec-template new/kiwi-10.0.25/package/python-kiwi-spec-template
--- old/kiwi-10.0.23/package/python-kiwi-spec-template 2024-07-04 11:43:52.214901400 +0200
+++ new/kiwi-10.0.25/package/python-kiwi-spec-template 2024-07-11 20:38:03.794079000 +0200
@@ -334,6 +334,10 @@
Requires: kiwi-systemdeps-filesystems = %{version}-%{release}
Requires: kiwi-systemdeps-bootloaders = %{version}-%{release}
Requires: kiwi-systemdeps-iso-media = %{version}-%{release}
+%if 0%{?suse_version} >= 1650
+Requires: binutils
+Requires: glibc-gconv-modules-extra
+%endif
%if 0%{?suse_version}
Requires: gptfdisk
%else
@@ -412,7 +416,6 @@
Requires: file
Requires: sed
Requires: bash
-Recommends: bash-completion
Requires: python%{python3_pkgversion} >= 3.9
%if 0%{?ubuntu} || 0%{?debian}
Requires: python%{python3_pkgversion}-yaml
@@ -655,6 +658,19 @@
%description -n kiwi-man-pages
Provides manual pages to describe the kiwi commands
+%package -n kiwi-bash-completion
+Summary: Bash Completion for kiwi-ng
+Requires: bash-completion
+Requires: python%{python3_pkgversion}-kiwi = %{version}
+%if ! (0%{?debian} || 0%{?ubuntu})
+Supplements: (%{name} and bash-completion)
+%endif
+BuildArch: noarch
+
+%description -n kiwi-bash-completion
+Bash command line completion support for python-kiwi - completion
+of subcommands, parameters and keywords for the kiwi-ng command.
+
%prep
%setup -q -n kiwi-%{version}
@@ -764,11 +780,13 @@
%{_bindir}/kiwi-ng
%{_bindir}/kiwi-ng-3*
%{python3_sitelib}/kiwi*
-%{_usr}/share/bash-completion/completions/kiwi-ng
%{_usr}/share/kiwi/xsl_to_v74/
%{_defaultdocdir}/python-kiwi/LICENSE
%{_defaultdocdir}/python-kiwi/README
+%files -n kiwi-bash-completion
+%{_usr}/share/bash-completion/completions/kiwi-ng
+
%files -n kiwi-man-pages
%config %_sysconfdir/kiwi.yml
%doc %{_mandir}/man8/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/pyproject.toml new/kiwi-10.0.25/pyproject.toml
--- old/kiwi-10.0.23/pyproject.toml 2024-07-04 12:57:58.582599600 +0200
+++ new/kiwi-10.0.25/pyproject.toml 2024-07-14 11:17:33.562450600 +0200
@@ -1,6 +1,6 @@
[tool.poetry]
name = "kiwi"
-version = "10.0.23"
+version = "10.0.25"
description = "KIWI - Appliance Builder"
license = "GPL-3.0-or-later"
readme = "README.rst"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/bootloader/config/grub2_test.py new/kiwi-10.0.25/test/unit/bootloader/config/grub2_test.py
--- old/kiwi-10.0.23/test/unit/bootloader/config/grub2_test.py 2024-06-17 10:30:43.155229800 +0200
+++ new/kiwi-10.0.25/test/unit/bootloader/config/grub2_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -79,7 +79,7 @@
return_value=None
)
self.firmware.efi_mode = Mock(
- return_value=None
+ return_value=''
)
mock_firmware.return_value = self.firmware
@@ -1381,7 +1381,7 @@
Defaults.set_platform_name('x86_64')
mock_get_boot_path.return_value = '/boot'
self.firmware.efi_mode = Mock(
- return_value=None
+ return_value=''
)
self.bootloader.xen_guest = True
self.os_exists['root_dir/boot/grub2/fonts/unicode.pf2'] = False
@@ -1417,7 +1417,7 @@
mock_get_boot_path.return_value = '/boot'
self.bootloader.arch = 'ppc64le'
self.firmware.efi_mode = Mock(
- return_value=None
+ return_value=''
)
self.bootloader.xen_guest = False
self.os_exists['root_dir/boot/grub2/fonts/unicode.pf2'] = False
@@ -1448,7 +1448,7 @@
mock_get_boot_path.return_value = '/boot'
self.bootloader.arch = 's390x'
self.firmware.efi_mode = Mock(
- return_value=None
+ return_value=''
)
self.bootloader.xen_guest = False
self.os_exists['root_dir/boot/grub2/fonts/unicode.pf2'] = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/bootloader/install/grub2_test.py new/kiwi-10.0.25/test/unit/bootloader/install/grub2_test.py
--- old/kiwi-10.0.23/test/unit/bootloader/install/grub2_test.py 2024-06-18 08:42:06.351156000 +0200
+++ new/kiwi-10.0.25/test/unit/bootloader/install/grub2_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -141,6 +141,17 @@
)
assert self.bootloader.install_required() is False
+ def test_install_required_efi_no_csm(self):
+ self.bootloader.arch = 'x86_64'
+ self.bootloader.firmware = mock.Mock()
+ self.bootloader.firmware.efi_mode = mock.Mock(
+ return_value='efi'
+ )
+ self.bootloader.firmware.legacy_bios_mode = mock.Mock(
+ return_value=False
+ )
+ assert self.bootloader.install_required() is False
+
def test_install_required_arm64(self):
self.bootloader.arch = 'arm64'
assert self.bootloader.install_required() is False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/builder/live_test.py new/kiwi-10.0.25/test/unit/builder/live_test.py
--- old/kiwi-10.0.23/test/unit/builder/live_test.py 2024-05-02 09:12:27.108463500 +0200
+++ new/kiwi-10.0.25/test/unit/builder/live_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -18,6 +18,9 @@
Defaults.set_platform_name('x86_64')
self.firmware = Mock()
+ self.firmware.legacy_bios_mode = Mock(
+ return_value=True
+ )
self.firmware.efi_mode = Mock(
return_value='uefi'
)
@@ -77,6 +80,9 @@
self.xml_state.get_fs_create_option_list = Mock(
return_value=['-O', 'option']
)
+ self.xml_state.build_type.get_application_id = Mock(
+ return_value='0xffffffff'
+ )
self.xml_state.build_type.get_flags = Mock(
return_value=None
)
@@ -350,12 +356,14 @@
custom_args={
'meta_data': {
'mbr_id': '0xffffffff',
+ 'application_id': '0xffffffff',
'preparer': 'KIWI - https://github.com/OSInside/kiwi',
'publisher': 'Custom publisher',
'volume_id': 'volid',
'efi_mode': 'uefi',
'efi_loader': 'kiwi-tmpfile',
- 'udf': True
+ 'udf': True,
+ 'legacy_bios_mode': True
}
},
device_provider=mock_DeviceProvider.return_value,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/cli_test.py new/kiwi-10.0.25/test/unit/cli_test.py
--- old/kiwi-10.0.23/test/unit/cli_test.py 2024-05-02 09:12:27.108463500 +0200
+++ new/kiwi-10.0.25/test/unit/cli_test.py 2024-07-11 21:06:57.577307500 +0200
@@ -48,6 +48,8 @@
self.command_args = {
'--add-repo': [],
'--add-repo-credentials': [],
+ '--set-type-attr': [],
+ '--set-release-version': None,
'--allow-existing-root': False,
'--description': 'description',
'--help': False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/firmware_test.py new/kiwi-10.0.25/test/unit/firmware_test.py
--- old/kiwi-10.0.23/test/unit/firmware_test.py 2024-05-02 09:12:27.108463500 +0200
+++ new/kiwi-10.0.25/test/unit/firmware_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -87,7 +87,7 @@
assert self.firmware_bios.ec2_mode() is None
def test_efi_mode(self):
- assert self.firmware_bios.efi_mode() is None
+ assert self.firmware_bios.efi_mode() == ''
assert self.firmware_efi.efi_mode() == 'efi'
def test_bios_mode(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/iso_tools/xorriso_test.py new/kiwi-10.0.25/test/unit/iso_tools/xorriso_test.py
--- old/kiwi-10.0.23/test/unit/iso_tools/xorriso_test.py 2024-05-02 09:12:27.108463500 +0200
+++ new/kiwi-10.0.25/test/unit/iso_tools/xorriso_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -45,7 +45,8 @@
'publisher': 'org',
'preparer': 'preparer',
'volume_id': 'vol_id',
- 'efi_mode': 'uefi'
+ 'efi_mode': 'uefi',
+ 'legacy_bios_mode': True
}
)
assert 'No hybrid MBR file found' in self._caplog.text
@@ -59,7 +60,8 @@
'publisher': 'org',
'preparer': 'preparer',
'volume_id': 'vol_id',
- 'efi_mode': 'uefi'
+ 'efi_mode': 'uefi',
+ 'legacy_bios_mode': True
}
)
assert self.iso_tool.iso_parameters == [
@@ -85,6 +87,31 @@
'-boot_image', 'any', 'load_size=2048'
]
+ @patch('os.path.exists')
+ def test_init_iso_creation_parameters_efi_custom_app_id(
+ self, mock_os_path_exists
+ ):
+ mock_os_path_exists.return_value = True
+ self.iso_tool.init_iso_creation_parameters(
+ {
+ 'mbr_id': 'app_id',
+ 'application_id': 'some_other_app_id',
+ 'publisher': 'org',
+ 'preparer': 'preparer',
+ 'volume_id': 'vol_id',
+ 'efi_mode': 'uefi',
+ 'legacy_bios_mode': True
+ }
+ )
+ assert self.iso_tool.iso_parameters == [
+ '-application_id', 'some_other_app_id',
+ '-publisher', 'org',
+ '-preparer_id', 'preparer',
+ '-volid', 'vol_id',
+ '-joliet', 'on',
+ '-padding', '0'
+ ]
+
def test_add_efi_loader_parameters(self):
self.iso_tool.add_efi_loader_parameters('target_dir/efi-loader')
assert self.iso_tool.iso_loaders == [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/storage/loop_device_test.py new/kiwi-10.0.25/test/unit/storage/loop_device_test.py
--- old/kiwi-10.0.23/test/unit/storage/loop_device_test.py 2024-06-24 09:01:40.274911000 +0200
+++ new/kiwi-10.0.25/test/unit/storage/loop_device_test.py 2024-07-11 20:38:03.798079300 +0200
@@ -70,17 +70,56 @@
@patch('kiwi.storage.loop_device.Command.run')
@patch('os.path.exists')
- def test_context_manager_exit(self, mock_os_path_exists, mock_command_run):
+ @patch('pathlib.Path.is_block_device')
+ @patch('time.sleep')
+ def test_context_manager_exit_loop_released(
+ self, mock_time_sleep, mock_is_block_device,
+ mock_os_path_exists, mock_command_run
+ ):
+ is_block_device = [False, True]
mock_os_path_exists.return_value = True
+ mock_command_run.side_effect = KiwiCommandError('error')
- def side_effect(params):
+ def Command_run(params):
# raise on first command which is 'losetup -f ...'
- # and raise on last command which is 'udevadm settle' to trigger
- # the logging error
- if params[1] == '-f' or params[1] == 'settle':
+ if params[1] == '-f':
raise KiwiCommandError('issue')
- mock_command_run.side_effect = side_effect
+ def Path_is_block_device():
+ return is_block_device.pop()
+
+ mock_is_block_device.side_effect = Path_is_block_device
+ mock_command_run.side_effect = Command_run
+
+ with self._caplog.at_level(logging.ERROR):
+ with LoopDevice('loop-file', 20) as loop_provider:
+ loop_provider.node_name = '/dev/loop0'
+ with raises(KiwiCommandError):
+ loop_provider.create(overwrite=False)
+ assert len(mock_is_block_device.call_args_list) == 2
+ assert mock_command_run.call_args_list == [
+ call(['losetup', '-f', '--show', 'loop-file']),
+ call(['losetup', '-d', '/dev/loop0'])
+ ]
+
+ @patch('kiwi.storage.loop_device.Command.run')
+ @patch('os.path.exists')
+ @patch('pathlib.Path.is_block_device')
+ @patch('time.sleep')
+ def test_context_manager_exit_loop_not_released(
+ self, mock_time_sleep, mock_is_block_device,
+ mock_os_path_exists, mock_command_run
+ ):
+ mock_os_path_exists.return_value = True
+ mock_command_run.side_effect = KiwiCommandError('error')
+ mock_is_block_device.return_value = True
+
+ def Command_run(params):
+ # raise on first command which is 'losetup -f ...'
+ if params[1] == '-f':
+ raise KiwiCommandError('issue')
+
+ mock_command_run.side_effect = Command_run
with self._caplog.at_level(logging.ERROR):
with LoopDevice('loop-file', 20) as loop_provider:
@@ -89,6 +128,5 @@
loop_provider.create(overwrite=False)
assert mock_command_run.call_args_list == [
call(['losetup', '-f', '--show', 'loop-file']),
- call(['losetup', '-d', '/dev/loop0']),
- call(['udevadm', 'settle'])
+ call(['losetup', '-d', '/dev/loop0'])
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/tasks/base_test.py new/kiwi-10.0.25/test/unit/tasks/base_test.py
--- old/kiwi-10.0.23/test/unit/tasks/base_test.py 2024-05-02 09:12:27.124463600 +0200
+++ new/kiwi-10.0.25/test/unit/tasks/base_test.py 2024-07-11 21:06:57.577307500 +0200
@@ -142,6 +142,9 @@
None, None, None
]
+ def test_attr_token(self):
+ assert self.task.attr_token('a=b') == ['a', 'b']
+
@patch('kiwi.tasks.base.RuntimeChecker')
def test_load_xml_description(self, mock_runtime_checker):
self.task.load_xml_description('../data/description')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/tasks/result_bundle_test.py new/kiwi-10.0.25/test/unit/tasks/result_bundle_test.py
--- old/kiwi-10.0.23/test/unit/tasks/result_bundle_test.py 2024-05-02 09:12:27.124463600 +0200
+++ new/kiwi-10.0.25/test/unit/tasks/result_bundle_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -191,14 +191,23 @@
@patch('os.path.islink')
@patch('os.symlink')
@patch('os.readlink')
+ @patch('os.path.realpath')
+ @patch('os.path.abspath')
def test_process_result_bundle_as_rpm(
- self, mock_os_readlink, mock_os_symlink, mock_os_path_islink,
- mock_iglob, mock_unlink, mock_chdir, mock_exists, mock_checksum,
- mock_compress, mock_path_wipe, mock_path_which, mock_path_create,
- mock_command, mock_load, mock_Privileges_check_for_root_permissions
+ self, mock_os_path_abspath, mock_os_path_realpath, mock_os_readlink,
+ mock_os_symlink, mock_os_path_islink, mock_iglob, mock_unlink,
+ mock_chdir, mock_exists, mock_checksum, mock_compress,
+ mock_path_wipe, mock_path_which, mock_path_create, mock_command,
+ mock_load, mock_Privileges_check_for_root_permissions
):
+ abs_path = ['bundle-dir', 'target-dir']
+
+ def side_effect(path):
+ return abs_path.pop()
+
checksum = Mock()
compress = Mock()
+ mock_os_path_abspath.side_effect = side_effect
mock_path_which.return_value = 'zsyncmake'
compress.xz.return_value = 'compressed_filename'
mock_compress.return_value = compress
@@ -216,14 +225,14 @@
with patch('builtins.open', m_open, create=True):
self.task.process()
- mock_path_wipe.assert_called_once_with(self.abs_bundle_dir)
+ mock_path_wipe.assert_called_once_with('bundle-dir')
mock_Privileges_check_for_root_permissions.assert_called_once_with()
assert mock_command.call_args_list == [
call(
[
'cp', 'test-image-1.2.3',
os.sep.join(
- [self.abs_bundle_dir, 'test-image-1.2.3-Build_42']
+ ['bundle-dir', 'test-image-1.2.3-Build_42']
)
]
),
@@ -231,23 +240,21 @@
[
'file',
os.sep.join(
- [self.abs_bundle_dir, 'test-image-1.2.3-Build_42']
+ ['bundle-dir', 'test-image-1.2.3-Build_42']
)
]
),
call(
[
'rpmbuild', '--nodeps', '--nocheck', '--rmspec', '-bb',
- os.sep.join([self.abs_bundle_dir, 'test-image.spec'])
+ os.sep.join(['bundle-dir', 'test-image.spec'])
]
),
call(
['bash', '-c', 'mv noarch/*.rpm . && rmdir noarch']
)
]
- mock_chdir.assert_called_once_with(
- self.abs_bundle_dir
- )
+ mock_chdir.assert_called_once_with('bundle-dir')
assert mock_unlink.called
@patch('kiwi.tasks.result_bundle.Result.load')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/tasks/system_build_test.py new/kiwi-10.0.25/test/unit/tasks/system_build_test.py
--- old/kiwi-10.0.23/test/unit/tasks/system_build_test.py 2024-05-02 09:12:27.124463600 +0200
+++ new/kiwi-10.0.25/test/unit/tasks/system_build_test.py 2024-07-11 21:06:57.577307500 +0200
@@ -74,6 +74,8 @@
self.task.command_args = {}
self.task.command_args['help'] = False
self.task.command_args['build'] = False
+ self.task.command_args['--set-type-attr'] = ['volid=some']
+ self.task.command_args['--set-release-version'] = '99'
self.task.command_args['--allow-existing-root'] = True
self.task.command_args['--description'] = '../data/description'
self.task.command_args['--target-dir'] = 'some-target'
@@ -254,6 +256,35 @@
'new_tag'
)
+ @patch('kiwi.logger.Logger.set_logfile')
+ @patch('kiwi.tasks.system_build.SystemPrepare')
+ def test_process_system_build_invalid_type_attribute(
+ self, mock_SystemPrepare, mock_log
+ ):
+ self._init_command_args()
+ self.task.command_args['--set-type-attr'] = [
+ 'bogus=value'
+ ]
+ with self._caplog.at_level(logging.ERROR):
+ self.task.process()
+ assert 'Failed to set type attribute' in self._caplog.text
+
+ @patch('kiwi.xml_state.XMLState.get_repositories_signing_keys')
+ @patch('kiwi.xml_state.XMLState.get_preferences_sections')
+ @patch('kiwi.logger.Logger.set_logfile')
+ @patch('kiwi.tasks.system_build.SystemPrepare')
+ def test_process_system_build_release_version_no_overwrite(
+ self, mock_SystemPrepare, mock_logger,
+ mock_get_preferences_sections, mock_get_repositories_signing_keys
+ ):
+ preferences = MagicMock()
+ preferences.get_release_version.return_value = None
+ mock_get_preferences_sections.return_value = [preferences]
+ self._init_command_args()
+ self.task.command_args['--set-release-version'] = '42'
+ self.task.process()
+ preferences.add_release_version.assert_called_once_with('42')
+
@patch('kiwi.xml_state.XMLState.add_container_config_label')
@patch('kiwi.logger.Logger.set_logfile')
@patch('kiwi.tasks.system_build.SystemPrepare')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/tasks/system_prepare_test.py new/kiwi-10.0.25/test/unit/tasks/system_prepare_test.py
--- old/kiwi-10.0.23/test/unit/tasks/system_prepare_test.py 2024-05-02 09:12:27.128463500 +0200
+++ new/kiwi-10.0.25/test/unit/tasks/system_prepare_test.py 2024-07-11 21:06:57.577307500 +0200
@@ -71,6 +71,8 @@
self.task.command_args['prepare'] = False
self.task.command_args['--description'] = '../data/description'
self.task.command_args['--root'] = '../data/root-dir'
+ self.task.command_args['--set-type-attr'] = ['volid=some']
+ self.task.command_args['--set-release-version'] = '99'
self.task.command_args['--allow-existing-root'] = False
self.task.command_args['--set-repo'] = None
self.task.command_args['--set-repo-credentials'] = None
@@ -249,6 +251,35 @@
manager.__enter__.return_value, ['vim']
)
+ @patch('kiwi.logger.Logger.set_logfile')
+ @patch('kiwi.tasks.system_prepare.SystemPrepare')
+ def test_process_system_build_invalid_type_attribute(
+ self, mock_SystemPrepare, mock_log
+ ):
+ self._init_command_args()
+ self.task.command_args['--set-type-attr'] = [
+ 'bogus=value'
+ ]
+ with self._caplog.at_level(logging.ERROR):
+ self.task.process()
+ assert 'Failed to set type attribute' in self._caplog.text
+
+ @patch('kiwi.xml_state.XMLState.get_repositories_signing_keys')
+ @patch('kiwi.xml_state.XMLState.get_preferences_sections')
+ @patch('kiwi.logger.Logger.set_logfile')
+ @patch('kiwi.tasks.system_prepare.SystemPrepare')
+ def test_process_system_build_release_version_no_overwrite(
+ self, mock_SystemPrepare, mock_logger,
+ mock_get_preferences_sections, mock_get_repositories_signing_keys
+ ):
+ preferences = MagicMock()
+ preferences.get_release_version.return_value = None
+ mock_get_preferences_sections.return_value = [preferences]
+ self._init_command_args()
+ self.task.command_args['--set-release-version'] = '42'
+ self.task.process()
+ preferences.add_release_version.assert_called_once_with('42')
+
@patch('kiwi.xml_state.XMLState.set_container_config_tag')
@patch('kiwi.tasks.system_prepare.SystemPrepare')
def test_process_system_prepare_set_container_tag(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.0.23/test/unit/utils/compress_test.py new/kiwi-10.0.25/test/unit/utils/compress_test.py
--- old/kiwi-10.0.23/test/unit/utils/compress_test.py 2024-05-02 09:12:27.128463500 +0200
+++ new/kiwi-10.0.25/test/unit/utils/compress_test.py 2024-07-13 13:48:12.465693500 +0200
@@ -105,14 +105,14 @@
@patch('kiwi.command.Command.run')
def test_get_format_invalid_format(self, mock_run):
- mock_run.side_effect = ValueError("nothing")
+ result = Mock()
+ result.returncode = 1
+ mock_run.return_value = result
invalid = Compress("../data/gz_data.gz")
invalid.supported_zipper = ["mock_zip"]
with self._caplog.at_level(logging.DEBUG):
assert invalid.get_format() is None
mock_run.assert_called_once_with(
- ['mock_zip', '-l', '../data/gz_data.gz']
+ ['mock_zip', '-l', '../data/gz_data.gz'], raise_on_error=False
)
- assert 'Error running "mock_zip -l ../data/gz_data.gz", got a'
- ' ValueError: nothing' in self._caplog.text
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cronie for openSUSE:Factory checked in at 2024-07-22 17:14:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cronie (Old)
and /work/SRC/openSUSE:Factory/.cronie.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cronie"
Mon Jul 22 17:14:12 2024 rev:94 rq:1188846 version:unknown
Changes:
--------
--- /work/SRC/openSUSE:Factory/cronie/cronie.changes 2024-05-01 14:55:50.496579028 +0200
+++ /work/SRC/openSUSE:Factory/.cronie.new.17339/cronie.changes 2024-07-22 17:14:27.732786499 +0200
@@ -1,0 +2,6 @@
+Tue Jul 9 10:02:29 UTC 2024 - Johannes Segitz <jsegitz(a)suse.com>
+
+- Improve permissions checks in run-cron. Just check if the permission
+ matches completely. Otherwise e.g. setgid directories causes failures
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ run-crons ++++++
--- /var/tmp/diff_new_pack.5IpvW3/_old 2024-07-22 17:14:29.564860082 +0200
+++ /var/tmp/diff_new_pack.5IpvW3/_new 2024-07-22 17:14:29.568860243 +0200
@@ -104,22 +104,15 @@
SECURE_PERMISSIONS="${SECURE_DIR_PERMISSIONS:-755}"
for CRONDIR in /etc/cron.{hourly,daily,weekly,monthly} ; do
test -d $CRONDIR || continue
- # this is racy but better than nothing
+ # these checks are racy but better than nothing
if [ ! "$ENFORCE_ROOT_OWNER_GROUP_DIR" = "no" ] && [ ! -O $CRONDIR -o ! -G $CRONDIR ]; then
echo "wrong owner/group for $CRONDIR, skipping" | logger
continue
fi
ACTUAL_PERMISSIONS=$(stat -c %a $CRONDIR)
- # to have this default to false would be better, but would require a more
- # complicated logic in the loop
- PERMISSIONS_ARE_SECURE=true
- for (( i=0; i<${#ACTUAL_PERMISSIONS}; i++ )); do
- if [ "${ACTUAL_PERMISSIONS:$i:1}" -gt "${SECURE_PERMISSIONS:$i:1}" ]; then
- PERMISSIONS_ARE_SECURE=false
- fi
- done
- if [ ! "$PERMISSIONS_ARE_SECURE" = true ]; then
- echo "wrong permissions $ACTUAL_PERMISSIONS for $CRONDIR, expecting $SECURE_PERMISSIONS. Skipping" | logger
+
+ if [ ! "${ACTUAL_PERMISSIONS}" = "${SECURE_PERMISSIONS}" ]; then
+ echo "wrong permissions $ACTUAL_PERMISSIONS for $CRONDIR, expecting $SECURE_PERMISSIONS (see SECURE_DIR_PERMISSIONS in /etc/sysconfig/cron). Skipping" | logger
continue
fi
1
0