From ec0df619abd99cfff16ccf1cafb64736cc4edde3a76f000a821465120033028d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 30 Mar 2021 09:16:14 +0000 Subject: [PATCH 1/9] require the exact version of librpmbuild in the rpm-build package [bnc#1180965] OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=573 --- rpm.changes | 7 ++++++- rpm.spec | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rpm.changes b/rpm.changes index f94780d..2a035bb 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de + +- require the exact version of librpmbuild in the rpm-build + package [bnc#1180965] + ------------------------------------------------------------------- Mon Feb 22 12:57:44 UTC 2021 - Martin Liška @@ -11,7 +17,6 @@ Mon Feb 8 09:38:33 UTC 2021 - Andreas Schwab - auto-config-update-aarch64-ppc64le.diff: update grep regex ------------------------------------------------------------------- -Thu Jan 14 15:40:39 UTC 2021 - Matej Cepl - Add explicit requirement on python-rpm-macros to avoid widespread breakage by package mistakenly ignoring their requirement of diff --git a/rpm.spec b/rpm.spec index 345eba9..a7d26d5 100644 --- a/rpm.spec +++ b/rpm.spec @@ -171,6 +171,7 @@ need an intimate knowledge of RPM packages in order to function. %package build Summary: Tools and Scripts to create rpm packages Group: System/Packages +Requires: librpmbuild%{librpmsover} = %{version} Requires: rpm = %{version} Provides: rpm:%_bindir/rpmbuild Provides: rpmbuild From c835eac6bb6e9f4fe985d791160cdaf2ff40796e344ad7ced96fe4a23a4cf3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 30 Mar 2021 09:36:55 +0000 Subject: [PATCH 2/9] - reformat dwarf5.diff OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=574 --- dwarf5.diff | 274 +++++++++++++++++++++++++--------------------------- rpm.changes | 1 + rpm.spec | 3 +- 3 files changed, 135 insertions(+), 143 deletions(-) diff --git a/dwarf5.diff b/dwarf5.diff index 5397608..ca33d73 100644 --- a/dwarf5.diff +++ b/dwarf5.diff @@ -5,11 +5,9 @@ a834fccf3c94f78ad6a1b35ae352b1ede183dde4 86408cd826c32229817071bd008d9856cda4aca5 0d1003bc723ba30bfe325bb51aeafe7dbfed6a5c -diff --git a/tools/debugedit.c b/tools/debugedit.c -index 6bea88551..b0849efd8 100644 ---- a/tools/debugedit.c -+++ b/tools/debugedit.c -@@ -103,6 +103,8 @@ static bool need_string_replacement = false; +--- ./tools/debugedit.c.orig 2021-03-30 09:34:25.206392109 +0000 ++++ ./tools/debugedit.c 2021-03-30 09:34:40.186365656 +0000 +@@ -103,6 +103,8 @@ static bool need_string_replacement = fa /* Whether we need to do any updates of the string indexes (DW_FORM_strp) in debug_info for string indexes. */ static bool need_strp_update = false; @@ -106,7 +104,7 @@ index 6bea88551..b0849efd8 100644 { NULL, NULL, NULL, 0, 0, 0 } }; -@@ -542,10 +555,11 @@ setup_relbuf (DSO *dso, debug_section *sec, int *reltype) +@@ -542,10 +555,11 @@ setup_relbuf (DSO *dso, debug_section *s /* Relocations against section symbols are uninteresting in REL. */ if (dso->shdr[i].sh_type == SHT_REL && sym.st_value == 0) continue; @@ -152,7 +150,7 @@ index 6bea88551..b0849efd8 100644 t->attr[t->nattr].attr = attr; t->attr[t->nattr++].form = form; -@@ -1022,17 +1053,20 @@ string_find_entry (struct strings *strings, size_t old_idx) +@@ -1022,17 +1053,20 @@ string_find_entry (struct strings *strin a replacement file string has been recorded for it, otherwise returns false. */ static bool @@ -177,7 +175,7 @@ index 6bea88551..b0849efd8 100644 const char *file = skip_dir_prefix (old_str, base_dir); if (file == NULL) { -@@ -1076,15 +1110,18 @@ record_file_string_entry_idx (struct strings *strings, size_t old_idx) +@@ -1076,15 +1110,18 @@ record_file_string_entry_idx (struct str base_dir with dest_dir, just records the existing string associated with the index. */ static void @@ -200,7 +198,7 @@ index 6bea88551..b0849efd8 100644 Strent *strent = strtab_add_len (strings->str_tab, str, strlen (str) + 1); if (strent == NULL) -@@ -1217,13 +1254,28 @@ get_line_table (DSO *dso, size_t off, struct line_table **table) +@@ -1217,13 +1254,28 @@ get_line_table (DSO *dso, size_t off, st /* version */ t->version = read_16 (ptr); @@ -434,7 +432,7 @@ index 6bea88551..b0849efd8 100644 /* dir table: */ value = 1; -@@ -1622,6 +1787,296 @@ read_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir) +@@ -1622,6 +1787,296 @@ read_dwarf2_line (DSO *dso, uint32_t off read_uleb128 (ptr); } @@ -731,7 +729,7 @@ index 6bea88551..b0849efd8 100644 dso->lines.debug_lines_len += 4 + table->unit_length + table->size_diff; return table->replace_dirs || table->replace_files; } -@@ -1639,6 +2094,40 @@ find_new_list_offs (struct debug_lines *lines, size_t idx) +@@ -1639,6 +2094,40 @@ find_new_list_offs (struct debug_lines * return table->new_idx; } @@ -772,7 +770,7 @@ index 6bea88551..b0849efd8 100644 /* This scans the attributes of one DIE described by the given abbrev_tag. PTR points to the data in the debug_info. It will be advanced till all abbrev data is consumed. In phase zero data is collected, in phase one -@@ -1657,7 +2146,6 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase) +@@ -1657,7 +2146,6 @@ edit_attributes (DSO *dso, unsigned char for (i = 0; i < t->nattr; ++i) { uint32_t form = t->attr[i].form; @@ -780,7 +778,7 @@ index 6bea88551..b0849efd8 100644 while (1) { /* Whether we already handled a string as file for this -@@ -1743,38 +2231,24 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase) +@@ -1743,38 +2231,24 @@ edit_attributes (DSO *dso, unsigned char } } } @@ -833,7 +831,7 @@ index 6bea88551..b0849efd8 100644 /* DW_AT_name is the primary file for this compile unit. If starting with / it is a full path name. Note that we don't handle DW_FORM_string in this -@@ -1784,11 +2258,14 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase) +@@ -1784,11 +2258,14 @@ edit_attributes (DSO *dso, unsigned char /* In phase zero we will look for a comp_dir to use. */ if (phase == 0) { @@ -852,7 +850,7 @@ index 6bea88551..b0849efd8 100644 if (*name == '/' && comp_dir == NULL) { char *enddir = strrchr (name, '/'); -@@ -1809,107 +2286,37 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase) +@@ -1809,107 +2286,37 @@ edit_attributes (DSO *dso, unsigned char pass (1) stores it (the new index). */ if (dest_dir && phase == 0) { @@ -931,13 +929,10 @@ index 6bea88551..b0849efd8 100644 - do_write_32_relocated (ptr, new_idx); - } - ptr += 4; -+ edit_strp (dso, false /* line_strp */, ptr, phase, handled_strp); - break; +- break; - case DW_FORM_string: - ptr = (unsigned char *) strchr ((char *)ptr, '\0') + 1; -+ case DW_FORM_line_strp: -+ edit_strp (dso, true /* line_strp */, ptr, phase, handled_strp); - break; +- break; - case DW_FORM_indirect: - form = read_uleb128 (ptr); - continue; @@ -947,11 +942,14 @@ index 6bea88551..b0849efd8 100644 - case DW_FORM_block2: - len = read_16 (ptr); - form = DW_FORM_block1; -- break; ++ edit_strp (dso, false /* line_strp */, ptr, phase, handled_strp); + break; - case DW_FORM_block4: - len = read_32 (ptr); - form = DW_FORM_block1; -- break; ++ case DW_FORM_line_strp: ++ edit_strp (dso, true /* line_strp */, ptr, phase, handled_strp); + break; - case DW_FORM_block: - case DW_FORM_exprloc: - len = read_uleb128 (ptr); @@ -978,11 +976,10 @@ index 6bea88551..b0849efd8 100644 break; } } -@@ -1964,6 +2371,163 @@ line_rel_cmp (const void *a, const void *b) - return 0; +@@ -1965,6 +2372,163 @@ line_rel_cmp (const void *a, const void } -+static int + static int +edit_info (DSO *dso, int phase, struct debug_section *sec) +{ + unsigned char *ptr, *endcu, *endsec; @@ -1139,9 +1136,10 @@ index 6bea88551..b0849efd8 100644 + strings->str_buf = strdata->d_buf; +} + - static int ++static int edit_dwarf2 (DSO *dso) { + Elf_Data *data; @@ -1995,7 +2559,7 @@ edit_dwarf2 (DSO *dso) struct debug_section *debug_sec = &debug_sections[j]; if (debug_sections[j].data) @@ -1221,7 +1219,18 @@ index 6bea88551..b0849efd8 100644 } - if (debug_sections[DEBUG_INFO].data != NULL) -- { ++ if (debug_sections[DEBUG_INFO].data == NULL) ++ return 0; ++ ++ unsigned char *ptr, *endsec; ++ int phase; ++ bool info_rel_updated = false; ++ bool types_rel_updated = false; ++ bool macro_rel_updated = false; ++ bool line_rel_updated = false; ++ ++ for (phase = 0; phase < 2; phase++) + { - unsigned char *ptr, *endcu, *endsec; - uint32_t value; - htab_t abbrev; @@ -1229,8 +1238,13 @@ index 6bea88551..b0849efd8 100644 - int phase; - bool info_rel_updated = false; - bool macro_rel_updated = false; -+ if (debug_sections[DEBUG_INFO].data == NULL) -+ return 0; ++ /* If we don't need to update anyhing, skip phase 1. */ ++ if (phase == 1 ++ && !need_strp_update ++ && !need_line_strp_update ++ && !need_string_replacement ++ && !need_stmt_update) ++ break; - for (phase = 0; phase < 2; phase++) - { @@ -1240,12 +1254,9 @@ index 6bea88551..b0849efd8 100644 - && !need_string_replacement - && !need_stmt_update) - break; -+ unsigned char *ptr, *endsec; -+ int phase; -+ bool info_rel_updated = false; -+ bool types_rel_updated = false; -+ bool macro_rel_updated = false; -+ bool line_rel_updated = false; ++ rel_updated = false; ++ if (edit_info (dso, phase, &debug_sections[DEBUG_INFO])) ++ return 1; - ptr = debug_sections[DEBUG_INFO].data; - setup_relbuf(dso, &debug_sections[DEBUG_INFO], &reltype); @@ -1259,15 +1270,9 @@ index 6bea88551..b0849efd8 100644 - dso->filename); - return 1; - } -+ for (phase = 0; phase < 2; phase++) -+ { -+ /* If we don't need to update anyhing, skip phase 1. */ -+ if (phase == 1 -+ && !need_strp_update -+ && !need_line_strp_update -+ && !need_string_replacement -+ && !need_stmt_update) -+ break; ++ /* Remember whether any .debug_info relocations might need ++ to be updated. */ ++ info_rel_updated = rel_updated; - endcu = ptr + 4; - endcu += read_32 (ptr); @@ -1277,26 +1282,6 @@ index 6bea88551..b0849efd8 100644 - return 1; - } + rel_updated = false; -+ if (edit_info (dso, phase, &debug_sections[DEBUG_INFO])) -+ return 1; - -- if (endcu > endsec) -- { -- error (0, 0, "%s: .debug_info too small", dso->filename); -- return 1; -- } -+ /* Remember whether any .debug_info relocations might need -+ to be updated. */ -+ info_rel_updated = rel_updated; - -- cu_version = read_16 (ptr); -- if (cu_version != 2 && cu_version != 3 && cu_version != 4) -- { -- error (0, 0, "%s: DWARF version %d unhandled", dso->filename, -- cu_version); -- return 1; -- } -+ rel_updated = false; + struct debug_section *types_sec = &debug_sections[DEBUG_TYPES]; + while (types_sec != NULL) + { @@ -1305,20 +1290,22 @@ index 6bea88551..b0849efd8 100644 + types_sec = types_sec->next; + } -- value = read_32_relocated (ptr); -- if (value >= debug_sections[DEBUG_ABBREV].size) +- if (endcu > endsec) - { -- if (debug_sections[DEBUG_ABBREV].data == NULL) -- error (0, 0, "%s: .debug_abbrev not present", dso->filename); -- else -- error (0, 0, "%s: DWARF CU abbrev offset too large", -- dso->filename); +- error (0, 0, "%s: .debug_info too small", dso->filename); - return 1; - } + /* Remember whether any .debug_types relocations might need + to be updated. */ + types_rel_updated = rel_updated; -+ + +- cu_version = read_16 (ptr); +- if (cu_version != 2 && cu_version != 3 && cu_version != 4) +- { +- error (0, 0, "%s: DWARF version %d unhandled", dso->filename, +- cu_version); +- return 1; +- } + /* We might have to recalculate/rewrite the debug_line + section. We need to do that before going into phase one + so we have all new offsets. We do this separately from @@ -1329,7 +1316,16 @@ index 6bea88551..b0849efd8 100644 + { + edit_dwarf2_line (dso); -- if (ptr_size == 0) +- value = read_32_relocated (ptr); +- if (value >= debug_sections[DEBUG_ABBREV].size) +- { +- if (debug_sections[DEBUG_ABBREV].data == NULL) +- error (0, 0, "%s: .debug_abbrev not present", dso->filename); +- else +- error (0, 0, "%s: DWARF CU abbrev offset too large", +- dso->filename); +- return 1; +- } + /* The line table programs will be moved + forward/backwards a bit in the new data. Update the + debug_line relocations to the new offsets. */ @@ -1345,7 +1341,8 @@ index 6bea88551..b0849efd8 100644 + if (rbuf == NULL) + error (1, errno, "%s: Could not allocate line relocations", + dso->filename); -+ + +- if (ptr_size == 0) + /* Sort them by offset into section. */ + for (size_t i = 0; i < rels; i++) { @@ -1437,14 +1434,13 @@ index 6bea88551..b0849efd8 100644 - if (rbuf == NULL) - error (1, errno, "%s: Could not allocate line relocations", - dso->filename); -- -- /* Sort them by offset into section. */ -- for (size_t i = 0; i < rels; i++) + /* These relocations only happen in ET_REL files + and are section offsets. */ + GElf_Addr r_offset; + size_t ndx = rbuf[i].ndx; -+ + +- /* Sort them by offset into section. */ +- for (size_t i = 0; i < rels; i++) + GElf_Rel rel; + GElf_Rela rela; + if (rtype == SHT_RELA) @@ -1627,12 +1623,22 @@ index 6bea88551..b0849efd8 100644 - - offset_len = (macro_flags & 0x01) ? 8 : 4; - line_offset = (macro_flags & 0x02) ? 1 : 0; -- ++ macro_version = read_16 (ptr); ++ macro_flags = read_8 (ptr); ++ if (macro_version < 4 || macro_version > 5) ++ error (1, 0, "unhandled .debug_macro version: %d", ++ macro_version); ++ if ((macro_flags & ~2) != 0) ++ error (1, 0, "unhandled .debug_macro flags: 0x%x", ++ macro_flags); + - if (offset_len != 4) - error (0, 1, - "Cannot handle 8 byte macro offsets: %s", - dso->filename); -- ++ offset_len = (macro_flags & 0x01) ? 8 : 4; ++ line_offset = (macro_flags & 0x02) ? 1 : 0; + - /* Update the line_offset if it is there. */ - if (line_offset) - { @@ -1648,18 +1654,6 @@ index 6bea88551..b0849efd8 100644 - } - } - } -+ macro_version = read_16 (ptr); -+ macro_flags = read_8 (ptr); -+ if (macro_version < 4 || macro_version > 5) -+ error (1, 0, "unhandled .debug_macro version: %d", -+ macro_version); -+ if ((macro_flags & ~2) != 0) -+ error (1, 0, "unhandled .debug_macro flags: 0x%x", -+ macro_flags); -+ -+ offset_len = (macro_flags & 0x01) ? 8 : 4; -+ line_offset = (macro_flags & 0x02) ? 1 : 0; -+ + if (offset_len != 4) + error (0, 1, + "Cannot handle 8 byte macro offsets: %s", @@ -1772,24 +1766,44 @@ index 6bea88551..b0849efd8 100644 - Elf_Data *strdata = debug_sections[DEBUG_STR].elf_data; - int strndx = debug_sections[DEBUG_STR].sec; - Elf_Scn *strscn = dso->scn[strndx]; -- ++ if (rel_updated) ++ macro_rel_updated = true; ++ macro_sec = macro_sec->next; ++ } ++ } + - /* Out with the old. */ - strdata->d_size = 0; - /* In with the new. */ - strdata = elf_newdata (strscn); -- + - /* We really should check whether we had enough memory, - but the old ebl version will just abort on out of - memory... */ - strtab_finalize (strtab, strdata); - debug_sections[DEBUG_STR].size = strdata->d_size; - dso->strings.str_buf = strdata->d_buf; -+ if (rel_updated) -+ macro_rel_updated = true; -+ macro_sec = macro_sec->next; - } -- +- } ++ /* Now handle all the DWARF5 line tables, they contain strp ++ and/or line_strp entries that need to be registered/rewritten. */ ++ setup_relbuf(dso, &debug_sections[DEBUG_LINE], &reltype); ++ rel_updated = false; + ++ /* edit_dwarf2_line will have set this up, unless there are no ++ moved/resized (DWARF4) lines. In which case we can just use ++ the original section data. new_idx will have been setup ++ correctly, even if it is the same as old_idx. */ ++ unsigned char *line_buf = (unsigned char *)dso->lines.line_buf; ++ if (line_buf == NULL) ++ line_buf = debug_sections[DEBUG_LINE].data; ++ for (int ldx = 0; ldx < dso->lines.used; ldx++) ++ { ++ struct line_table *t = &dso->lines.table[ldx]; ++ if (t->version >= 5) ++ read_dwarf5_line (dso, line_buf + t->new_idx, t, phase); } ++ if (rel_updated) ++ line_rel_updated = true; - /* After phase 1 we might have rewritten the debug_info with - new strp, strings and/or linep offsets. */ @@ -1799,38 +1813,6 @@ index 6bea88551..b0849efd8 100644 - dirty_section (DEBUG_MACRO); - if (need_stmt_update) - dirty_section (DEBUG_LINE); - -- /* Update any relocations addends we might have touched. */ -- if (info_rel_updated) -- update_rela_data (dso, &debug_sections[DEBUG_INFO]); -+ /* Now handle all the DWARF5 line tables, they contain strp -+ and/or line_strp entries that need to be registered/rewritten. */ -+ setup_relbuf(dso, &debug_sections[DEBUG_LINE], &reltype); -+ rel_updated = false; - -- if (macro_rel_updated) -+ /* edit_dwarf2_line will have set this up, unless there are no -+ moved/resized (DWARF4) lines. In which case we can just use -+ the original section data. new_idx will have been setup -+ correctly, even if it is the same as old_idx. */ -+ unsigned char *line_buf = (unsigned char *)dso->lines.line_buf; -+ if (line_buf == NULL) -+ line_buf = debug_sections[DEBUG_LINE].data; -+ for (int ldx = 0; ldx < dso->lines.used; ldx++) - { -- struct debug_section *macro_sec = &debug_sections[DEBUG_MACRO]; -- while (macro_sec != NULL) -- { -- update_rela_data (dso, macro_sec); -- macro_sec = macro_sec->next; -- } -+ struct line_table *t = &dso->lines.table[ldx]; -+ if (t->version >= 5) -+ read_dwarf5_line (dso, line_buf + t->new_idx, t, phase); - } -+ if (rel_updated) -+ line_rel_updated = true; -+ + /* Same for the debug_str and debug_line_str sections. + Make sure everything is in place for phase 1 updating of debug_info + references. */ @@ -1840,8 +1822,11 @@ index 6bea88551..b0849efd8 100644 + if (phase == 0 && need_line_strp_update) + edit_dwarf2_any_str (dso, &dso->debug_line_str, + &debug_sections[DEBUG_LINE_STR]); - } ++ } +- /* Update any relocations addends we might have touched. */ +- if (info_rel_updated) +- update_rela_data (dso, &debug_sections[DEBUG_INFO]); + /* After phase 1 we might have rewritten the debug_info with + new strp, strings and/or linep offsets. */ + if (need_strp_update || need_line_strp_update @@ -1854,7 +1839,8 @@ index 6bea88551..b0849efd8 100644 + dirty_section (DEBUG_MACRO); + if (need_stmt_update || need_line_strp_update) + dirty_section (DEBUG_LINE); -+ + +- if (macro_rel_updated) + /* Update any relocations addends we might have touched. */ + if (info_rel_updated) + update_rela_data (dso, &debug_sections[DEBUG_INFO]); @@ -1862,12 +1848,18 @@ index 6bea88551..b0849efd8 100644 + { + struct debug_section *types_sec = &debug_sections[DEBUG_TYPES]; + while (types_sec != NULL) -+ { + { +- struct debug_section *macro_sec = &debug_sections[DEBUG_MACRO]; +- while (macro_sec != NULL) +- { +- update_rela_data (dso, macro_sec); +- macro_sec = macro_sec->next; +- } + update_rela_data (dso, types_sec); + types_sec = types_sec->next; -+ } -+ } -+ + } + } + + if (macro_rel_updated) + { + struct debug_section *macro_sec = &debug_sections[DEBUG_MACRO]; @@ -1904,7 +1896,7 @@ index 6bea88551..b0849efd8 100644 destroy_lines (&dso->lines); free (dso); } -@@ -2863,7 +3378,9 @@ main (int argc, char *argv[]) +@@ -2862,7 +3377,9 @@ main (int argc, char *argv[]) in elfutils before 0.169 we will have to update and write out all section data if any data has changed (when ELF_F_LAYOUT was set). https://sourceware.org/bugzilla/show_bug.cgi?id=21199 */ @@ -1915,7 +1907,7 @@ index 6bea88551..b0849efd8 100644 #if !_ELFUTILS_PREREQ (0, 169) /* string replacements or build_id updates don't change section size. */ -@@ -2935,10 +3452,12 @@ main (int argc, char *argv[]) +@@ -2934,10 +3451,12 @@ main (int argc, char *argv[]) GElf_Xword sec_size = shdr->sh_size; /* We might have changed the size (and content) of the @@ -1929,7 +1921,7 @@ index 6bea88551..b0849efd8 100644 if (secnum == debug_sections[DEBUG_LINE].sec) sec_size = debug_sections[DEBUG_LINE].size; -@@ -3008,7 +3527,8 @@ main (int argc, char *argv[]) +@@ -3007,7 +3526,8 @@ main (int argc, char *argv[]) chmod (file, stat_buf.st_mode); free ((char *) dso->filename); @@ -1939,7 +1931,7 @@ index 6bea88551..b0849efd8 100644 destroy_lines (&dso->lines); free (dso); -@@ -3023,6 +3543,17 @@ main (int argc, char *argv[]) +@@ -3022,6 +3542,17 @@ main (int argc, char *argv[]) macro_sec = next; } diff --git a/rpm.changes b/rpm.changes index 2a035bb..78fa496 100644 --- a/rpm.changes +++ b/rpm.changes @@ -3,6 +3,7 @@ Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de - require the exact version of librpmbuild in the rpm-build package [bnc#1180965] +- reformat dwarf5.diff ------------------------------------------------------------------- Mon Feb 22 12:57:44 UTC 2021 - Martin Liška diff --git a/rpm.spec b/rpm.spec index a7d26d5..6bcfc2f 100644 --- a/rpm.spec +++ b/rpm.spec @@ -256,8 +256,7 @@ cp build-aux/config.guess build-aux/config.sub db/dist/ %patch -P 93 -P 94 -P 99 %patch -P 100 -P 102 -P 103 %patch -P 109 -P 117 -%patch -P 122 -P 123 -P 127 -P 128 -P 129 -%patch130 -p1 +%patch -P 122 -P 123 -P 127 -P 128 -P 129 -P 130 %ifarch aarch64 ppc64le riscv64 %patch6464 From 04d587db2fdd39d9b59661440985f47e96efca6ef005472d6bdc30e109674594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 30 Mar 2021 09:39:11 +0000 Subject: [PATCH 3/9] - add dump_posttrans and --runposttrans options to make it possible for libzypp to implement file triggers OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=575 --- posttrans.diff | 367 +++++++++++++++++++++++++++++++++++++++++++++++++ rpm.changes | 2 + rpm.spec | 3 +- 3 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 posttrans.diff diff --git a/posttrans.diff b/posttrans.diff new file mode 100644 index 0000000..be9e3a4 --- /dev/null +++ b/posttrans.diff @@ -0,0 +1,367 @@ +--- ./lib/poptI.c.orig 2020-06-23 12:13:01.896628395 +0000 ++++ ./lib/poptI.c 2021-03-30 09:33:10.054524821 +0000 +@@ -265,6 +265,10 @@ struct poptOption rpmInstallPoptTable[] + &rpmIArgs.installInterfaceFlags, (INSTALL_REINSTALL|INSTALL_INSTALL), + N_("reinstall package(s)"), + N_("+") }, ++ { "runposttrans", '\0', POPT_BIT_SET, ++ &rpmIArgs.installInterfaceFlags, INSTALL_RUNPOSTTRANS, ++ N_("run posttrans scriptlet"), ++ N_("") }, + + POPT_TABLEEND + }; +--- ./lib/psm.c.orig 2021-03-30 09:33:05.862532224 +0000 ++++ ./lib/psm.c 2021-03-30 09:33:10.054524821 +0000 +@@ -810,7 +810,7 @@ static rpmRC rpmPackageErase(rpmts ts, r + } + if (rc) break; + +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { ++ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { + /* Prepare post transaction uninstall triggers */ + rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te); + } +--- ./lib/rpmcli.h.orig 2020-05-28 10:04:25.037136686 +0000 ++++ ./lib/rpmcli.h 2021-03-30 09:33:10.054524821 +0000 +@@ -304,6 +304,7 @@ enum rpmInstallFlags_e { + INSTALL_ERASE = (1 << 8), /*!< from --erase */ + INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */ + INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */ ++ INSTALL_RUNPOSTTRANS = (1 << 11), /*!< from --runposttrans */ + }; + + typedef rpmFlags rpmInstallFlags; +@@ -385,6 +386,15 @@ int rpmInstall(rpmts ts, struct rpmInsta + int rpmErase(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t argv); + + /** \ingroup rpmcli ++ * Run posttrans scriptlets ++ * @param ts transaction set ++ * @param ia control args/bits ++ * @param argv array of trigger manifest file names (NULL terminated) ++ * @return 0 on success ++ */ ++int rpmRunPostTrans(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t argv); ++ ++/** \ingroup rpmcli + */ + extern struct rpmInstallArguments_s rpmIArgs; + +--- ./lib/rpminstall.c.orig 2020-05-28 10:04:25.040136702 +0000 ++++ ./lib/rpminstall.c 2021-03-30 09:33:10.054524821 +0000 +@@ -4,6 +4,8 @@ + + #include "system.h" + ++#include ++ + #include + #include + #include /* rpmReadPackageFile, vercmp etc */ +@@ -772,3 +774,32 @@ int rpmInstallSource(rpmts ts, const cha + return rc; + } + ++int rpmRunPostTrans(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t fileArgv) ++{ ++ ARGV_t manifest = NULL; ++ FILE *f; ++ char line[BUFSIZ], *s, *p; ++ int rc = 1; ++ ++ if (fileArgv == NULL) return 0; ++ if (!fileArgv[0] || fileArgv[1] != NULL) { ++ rpmlog(RPMLOG_ERR, _("runposttrans needs exactly one manifest file\n")); ++ goto exit; ++ } ++ if (!(f = fopen(fileArgv[0], "r"))) { ++ rpmlog(RPMLOG_ERR, _("cannot open %s: %s\n"), fileArgv[0], strerror(errno)); ++ goto exit; ++ } ++ while ((s = fgets(line, sizeof(line) - 1, f)) != 0) { ++ if (p = strrchr(s, '\n')) ++ *p = 0; ++ argvAdd(&manifest, s); ++ } ++ fclose(f); ++ rpmlog(RPMLOG_DEBUG, "running posttrans scriptlets\n"); ++ rpmtsClean(ts); ++ rc = rpmtsRunPostTrans(ts, manifest); ++exit: ++ argvFree(manifest); ++ return rc; ++} +--- ./lib/rpmtriggers.c.orig 2020-05-28 10:04:25.043136719 +0000 ++++ ./lib/rpmtriggers.c 2021-03-30 09:33:10.054524821 +0000 +@@ -1,5 +1,6 @@ + #include "system.h" + ++#include + #include + #include + #include +@@ -34,7 +35,7 @@ rpmtriggers rpmtriggersFree(rpmtriggers + return NULL; + } + +-static void rpmtriggersAdd(rpmtriggers trigs, unsigned int hdrNum, ++void rpmtriggersAdd(rpmtriggers trigs, unsigned int hdrNum, + unsigned int tix, unsigned int priority) + { + if (trigs->count == trigs->alloced) { +@@ -177,6 +178,16 @@ int runPostUnTransFileTrigs(rpmts ts) + if (trigH == NULL) + continue; + ++ if (ts->dump_posttrans) { ++ char *trigNEVRA = headerGetAsString(trigH, RPMTAG_NEVRA); ++ rpmlog(RPMLOG_NOTICE, "dump_posttrans: transfiletriggerpostun %u %u %s\n", trigs->triggerInfo[i].tix, trigs->triggerInfo[i].hdrNum, trigNEVRA); ++ free(trigNEVRA); ++ if ((rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN)) != 0) { ++ headerFree(trigH); ++ continue; ++ } ++ } ++ + /* Prepare and run script */ + script = rpmScriptFromTriggerTag(trigH, + triggertag(RPMSENSE_TRIGGERPOSTUN), +@@ -583,6 +594,19 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm + rpmTagVal priorityTag; + rpmtriggers triggers; + ++ if (sense == RPMSENSE_TRIGGERIN && tm == RPMSCRIPT_TRANSFILETRIGGER && ts->dump_posttrans) { ++ unsigned int hdrNum = headerGetInstance(trigH); ++ if (hdrNum) { ++ char *trigNEVRA = headerGetAsString(trigH, RPMTAG_NEVRA); ++ rpmlog(RPMLOG_NOTICE, "dump_posttrans: install %u %s\n", hdrNum, trigNEVRA); ++ free(trigNEVRA); ++ } ++ if ((rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN)) != 0) { ++ ++ headerFree(trigH); ++ return RPMRC_OK; ++ } ++ } + if (tm == RPMSCRIPT_FILETRIGGER) { + priorityTag = RPMTAG_FILETRIGGERPRIORITIES; + } else { +--- ./lib/rpmtriggers.h.orig 2020-05-28 10:04:25.043136719 +0000 ++++ ./lib/rpmtriggers.h 2021-03-30 09:33:10.054524821 +0000 +@@ -27,6 +27,10 @@ rpmtriggers rpmtriggersCreate(unsigned i + RPM_GNUC_INTERNAL + rpmtriggers rpmtriggersFree(rpmtriggers triggers); + ++RPM_GNUC_INTERNAL ++void rpmtriggersAdd(rpmtriggers trigs, unsigned int hdrNum, ++ unsigned int tix, unsigned int priority); ++ + /* + * Prepare post trans uninstall file triggers. After transcation uninstalled + * files are not saved anywhere. So we need during uninstalation of every +--- ./lib/rpmts.h.orig 2021-03-30 09:33:05.886532181 +0000 ++++ ./lib/rpmts.h 2021-03-30 09:33:10.054524821 +0000 +@@ -229,6 +229,15 @@ int rpmtsOrder(rpmts ts); + int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); + + /** \ingroup rpmts ++ * Run all posttrans scriptlets described in the manifest data. ++ * ++ * @param ts transaction set ++ * @param manifest the manifest data ++ * @return 0 on success, -1 on error ++ */ ++int rpmtsRunPostTrans(rpmts ts, ARGV_const_t manifest); ++ ++/** \ingroup rpmts + * Reference a transaction set instance. + * @param ts transaction set + * @return new transaction set reference +--- ./lib/rpmts_internal.h.orig 2020-05-28 10:04:25.043136719 +0000 ++++ ./lib/rpmts_internal.h 2021-03-30 09:33:10.054524821 +0000 +@@ -87,6 +87,7 @@ struct rpmts_s { + rpmtriggers trigs2run; /*!< Transaction file triggers */ + + int min_writes; /*!< macro minimize_writes used */ ++ int dump_posttrans; /*!< macro dump_posttrans used */ + }; + + #ifdef __cplusplus +--- ./lib/transaction.c.orig 2021-03-30 09:33:05.866532216 +0000 ++++ ./lib/transaction.c 2021-03-30 09:33:10.054524821 +0000 +@@ -1468,6 +1468,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF + /* Get available space on mounted file systems. */ + (void) rpmtsInitDSI(ts); + ++ /* Initialize the dump_posttrans flag */ ++ ts->dump_posttrans = (rpmExpandNumeric("%{?_dump_posttrans}") > 0); + return 0; + } + +@@ -1856,12 +1858,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp + if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { + runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); + } +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { ++ if (ts->dump_posttrans) { ++ rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n"); ++ } ++ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { + runPostUnTransFileTrigs(ts); + } + + /* Run %transfiletriggerin scripts unless disabled */ +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { ++ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { + runTransScripts(ts, PKG_TRANSFILETRIGGERIN); + } + /* Final exit code */ +@@ -1884,3 +1889,110 @@ exit: + rpmsqSetAction(SIGPIPE, oact); + return rc; + } ++ ++static unsigned int runPostTransFindPkgNum(const char **lpp) ++{ ++ const char *lp = *lpp; ++ unsigned int num = strtoul(lp, 0, 10); ++ while (*lp >= '0' && *lp <= '9') ++ lp++; ++ while (*lp == ' ') ++ lp++; ++ *lpp = lp; ++ return num; ++} ++ ++static Header runPostTransFindPkg(rpmts ts, const char *lp) ++{ ++ rpmdbMatchIterator mi; ++ Header h = NULL; ++ unsigned int hdrnum = runPostTransFindPkgNum(&lp); ++ if (!*lp) ++ return NULL; ++ if (hdrnum) { ++ mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, &hdrnum, sizeof(hdrnum)); ++ h = headerLink(rpmdbNextIterator(mi)); ++ rpmdbFreeIterator(mi); ++ } ++ if (h) { ++ char *NEVRA = headerGetAsString(h, RPMTAG_NEVRA); ++ if (!NEVRA || strcmp(NEVRA, lp) != 0) ++ h = headerFree(h); ++ _free(NEVRA); ++ } ++ if (!h) { ++ mi = rpmtsInitIterator(ts, RPMDBI_LABEL, lp, strlen(lp)); ++ h = headerLink(rpmdbNextIterator(mi)); ++ rpmdbFreeIterator(mi); ++ } ++ if (!h) ++ rpmlog(RPMLOG_WARNING, "package %s is not installed\n", lp); ++ return h; ++} ++ ++int rpmtsRunPostTrans(rpmts ts, ARGV_const_t manifest) ++{ ++ int rc = -1; /* assume failure */ ++ /* setup */ ++ tsMembers tsmem = rpmtsMembers(ts); ++ rpmtxn txn = NULL; ++ /* Ignore SIGPIPE for the duration of transaction */ ++ rpmsqAction_t oact = rpmsqSetAction(SIGPIPE, RPMSQ_IGN); ++ /* Force default 022 umask during transaction for consistent results */ ++ mode_t oldmask = umask(022); ++ ++ if (tsmem->orderCount) ++ goto exit; ++ char *line; ++ while ((line = *manifest++) != 0) { ++ if (!strncmp(line, "dump_posttrans: install ", 24)) { ++ const char *lp = line + 24; ++ Header h = runPostTransFindPkg(ts, lp); ++ if (!h) ++ continue; ++ rpmte p = rpmteNew(ts, h, TR_ADDED, line + 45, NULL, RPMTE_INSTALL); ++ if (tsmem->orderCount >= tsmem->orderAlloced) { ++ tsmem->orderAlloced += (tsmem->orderCount - tsmem->orderAlloced) + tsmem->delta; ++ tsmem->order = xrealloc(tsmem->order, tsmem->orderAlloced * sizeof(*tsmem->order)); ++ } ++ tsmem->order[tsmem->orderCount++] = p; ++ ++ if (tsmem->addedPackages == NULL) ++ tsmem->addedPackages = rpmalCreate(ts, 5); ++ rpmalAdd(tsmem->addedPackages, p); ++ packageHashAddEntry(tsmem->installedPackages, headerGetInstance(h), p); ++ } else if (!strncmp(line, "dump_posttrans: transfiletriggerpostun ", 39)) { ++ const char *lp = line + 39; ++ unsigned int tix = runPostTransFindPkgNum(&lp); ++ Header h = runPostTransFindPkg(ts, lp); ++ struct rpmtd_s priorities; ++ if (!h) ++ continue; ++ headerGet(h, RPMTAG_TRANSFILETRIGGERPRIORITIES, &priorities, HEADERGET_MINMEM); ++ if (rpmtdSetIndex(&priorities, tix) >= 0) ++ rpmtriggersAdd(ts->trigs2run, headerGetInstance(h), tix, *rpmtdGetUint32(&priorities)); ++ headerFree(h); ++ } ++ } ++ ++ if (!(txn = rpmtxnBegin(ts, RPMTXN_WRITE))) ++ goto exit; ++ ++ /* run posttrans scripts */ ++ rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n"); ++ runTransScripts(ts, PKG_POSTTRANS); ++ /* run %transfiletriggerin scripts */ ++ runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); ++ /* run %transfiletriggerpostun scrips */ ++ runPostUnTransFileTrigs(ts); ++ /* Run immed %transfiletriggerin scripts */ ++ runTransScripts(ts, PKG_TRANSFILETRIGGERIN); ++ rc = 0; ++ ++exit: ++ (void) umask(oldmask); ++ rpmtxnEnd(txn); ++ rpmsqSetAction(SIGPIPE, oact); ++ rpmtsEmpty(ts); ++ return rc; ++} +--- ./rpm.c.orig 2020-05-28 10:04:25.070136867 +0000 ++++ ./rpm.c 2021-03-30 09:33:10.054524821 +0000 +@@ -19,6 +19,7 @@ enum modes { + MODE_INSTALL = (1 << 1), + MODE_ERASE = (1 << 2), + #define MODES_IE (MODE_INSTALL | MODE_ERASE) ++ MODE_RUNPOSTTRANS = (1 << 4), + + MODE_UNKNOWN = 0 + }; +@@ -114,6 +115,11 @@ int main(int argc, char *argv[]) + INSTALL_INSTALL|INSTALL_REINSTALL)); + int eflags = (ia->installInterfaceFlags & INSTALL_ERASE); + ++ if (ia->installInterfaceFlags & INSTALL_RUNPOSTTRANS) { ++ if (iflags || eflags) ++ argerror(_("only one major mode may be specified")); ++ bigMode = MODE_RUNPOSTTRANS; ++ } + if (iflags & eflags) + argerror(_("only one major mode may be specified")); + else if (iflags) +@@ -286,6 +292,14 @@ int main(int argc, char *argv[]) + ec = rpmcliVerify(ts, qva, (ARGV_const_t) poptGetArgs(optCon)); + } break; + ++ case MODE_RUNPOSTTRANS: ++ if (!poptPeekArg(optCon)) { ++ argerror(_("need posttrans manifest for --runposttrans")); ++ } else { ++ ec += rpmRunPostTrans(ts, ia, (ARGV_const_t) poptGetArgs(optCon)); ++ } ++ break; ++ + case MODE_UNKNOWN: + if (poptPeekArg(optCon) != NULL || argc <= 1) { + printUsage(optCon, stderr, 0); diff --git a/rpm.changes b/rpm.changes index 78fa496..3ab25bb 100644 --- a/rpm.changes +++ b/rpm.changes @@ -4,6 +4,8 @@ Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de - require the exact version of librpmbuild in the rpm-build package [bnc#1180965] - reformat dwarf5.diff +- add dump_posttrans and --runposttrans options to make it possible + for libzypp to implement file triggers ------------------------------------------------------------------- Mon Feb 22 12:57:44 UTC 2021 - Martin Liška diff --git a/rpm.spec b/rpm.spec index 6bcfc2f..3575e25 100644 --- a/rpm.spec +++ b/rpm.spec @@ -129,6 +129,7 @@ Patch127: finddebuginfo-check-res-file.patch Patch128: empty_dbbackend.diff Patch129: ndbglue.diff Patch130: dwarf5.diff +Patch131: posttrans.diff Patch6464: auto-config-update-aarch64-ppc64le.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # @@ -256,7 +257,7 @@ cp build-aux/config.guess build-aux/config.sub db/dist/ %patch -P 93 -P 94 -P 99 %patch -P 100 -P 102 -P 103 %patch -P 109 -P 117 -%patch -P 122 -P 123 -P 127 -P 128 -P 129 -P 130 +%patch -P 122 -P 123 -P 127 -P 128 -P 129 -P 130 -P 131 %ifarch aarch64 ppc64le riscv64 %patch6464 From 74653ba3b3af7e0b8db4b1bdc327e8d5eb60c71b9622aaebe92f7bcb9ed6c2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 30 Mar 2021 09:59:13 +0000 Subject: [PATCH 4/9] - update to rpm-4.16.1.3 * security fixes for CVE-2021-3421, CVE-2021-20271, CVE-2021-20266 * fix bdb_ro failing to open database with missing secondary indexes * dropped: finddebuginfo-check-res-file.patch * dropped: empty_dbbackend.diff OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=576 --- empty_dbbackend.diff | 20 -------------------- finddebuginfo-check-res-file.patch | 25 ------------------------- python-rpm.spec | 2 +- rpm-4.16.0.tar.bz2 | 3 --- rpm-4.16.1.3.tar.bz2 | 3 +++ rpm.changes | 5 +++++ rpm.spec | 6 ++---- 7 files changed, 11 insertions(+), 53 deletions(-) delete mode 100644 empty_dbbackend.diff delete mode 100644 finddebuginfo-check-res-file.patch delete mode 100644 rpm-4.16.0.tar.bz2 create mode 100644 rpm-4.16.1.3.tar.bz2 diff --git a/empty_dbbackend.diff b/empty_dbbackend.diff deleted file mode 100644 index 12e3175..0000000 --- a/empty_dbbackend.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- ./lib/backend/dbi.c.orig 2020-11-18 09:37:08.314743771 +0000 -+++ ./lib/backend/dbi.c 2020-11-18 09:42:34.025792074 +0000 -@@ -77,7 +77,7 @@ dbDetectBackend(rpmdb rdb) - } - } - -- if (!cfg) { -+ if (!cfg && (rdb->db_flags & RPMDB_FLAG_REBUILD) != 0) { - rpmlog(RPMLOG_WARNING, _("invalid %%_db_backend: %s\n"), db_backend); - goto exit; - } -@@ -97,7 +97,7 @@ dbDetectBackend(rpmdb rdb) - rpmlog(RPMLOG_WARNING, - _("Converting database from %s to %s backend\n"), - ondisk->name, cfg->name); -- } else { -+ } else if (*db_backend) { - rpmlog(RPMLOG_WARNING, - _("Found %s %s database while attempting %s backend: " - "using %s backend.\n"), diff --git a/finddebuginfo-check-res-file.patch b/finddebuginfo-check-res-file.patch deleted file mode 100644 index 0f8185f..0000000 --- a/finddebuginfo-check-res-file.patch +++ /dev/null @@ -1,25 +0,0 @@ -From a20edbb561f74ba608c0aa36be637e7245e596b5 Mon Sep 17 00:00:00 2001 -From: ggardet -Date: Fri, 9 Oct 2020 13:10:09 +0200 -Subject: [PATCH] Do not fail if there is no "$temp"/res.* file - -find-debuginfo is multi-threaded and rpm runs -scripts usually with "-e" to abort on error. -If the debug-splitting tool fails, that job will abort. -But if you have X files that are problematic in the tree, -and you have X or less jobs, find-debuginfo will abort -as no single res.$number has been written. -But if you have more than X jobs, the build will succeed, -which makes the whole process random. -This commit remove this randomness. - ---- scripts/find-debuginfo.sh.orig -+++ scripts/find-debuginfo.sh -@@ -498,6 +498,7 @@ else - wait - ) - for f in "$temp"/res.*; do -+ test -f "$f" || continue - res=$(< "$f") - if [ "$res" != "0" ]; then - exit 1 diff --git a/python-rpm.spec b/python-rpm.spec index 95709e4..ee0d0c9 100644 --- a/python-rpm.spec +++ b/python-rpm.spec @@ -21,7 +21,7 @@ %global with_python 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-rpm -Version: 4.16.0 +Version: 4.16.1.3 Release: 0 Summary: Python Bindings for Manipulating RPM Packages License: GPL-2.0-or-later diff --git a/rpm-4.16.0.tar.bz2 b/rpm-4.16.0.tar.bz2 deleted file mode 100644 index 5cf37b8..0000000 --- a/rpm-4.16.0.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca5974e9da2939afb422598818ef187385061889ba766166c4a3829c5ef8d411 -size 4341683 diff --git a/rpm-4.16.1.3.tar.bz2 b/rpm-4.16.1.3.tar.bz2 new file mode 100644 index 0000000..ea802e4 --- /dev/null +++ b/rpm-4.16.1.3.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:513dc7f972b6e7ccfc9fc7f9c01d5310cc56ee853892e4314fa2cad71478e21d +size 4354652 diff --git a/rpm.changes b/rpm.changes index 3ab25bb..b659a73 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,6 +1,11 @@ ------------------------------------------------------------------- Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de +- update to rpm-4.16.1.3 + * security fixes for CVE-2021-3421, CVE-2021-20271, CVE-2021-20266 + * fix bdb_ro failing to open database with missing secondary indexes + * dropped: finddebuginfo-check-res-file.patch + * dropped: empty_dbbackend.diff - require the exact version of librpmbuild in the rpm-build package [bnc#1180965] - reformat dwarf5.diff diff --git a/rpm.spec b/rpm.spec index 3575e25..5cd8540 100644 --- a/rpm.spec +++ b/rpm.spec @@ -59,7 +59,7 @@ Requires: /usr/bin/awk Summary: The RPM Package Manager License: GPL-2.0-or-later Group: System/Packages -Version: 4.16.0 +Version: 4.16.1.3 Release: 0 URL: https://rpm.org/ #Git-Clone: https://github.com/rpm-software-management/rpm @@ -125,8 +125,6 @@ Patch109: pythondistdeps.diff Patch117: findsupplements.diff Patch122: db_conversion.diff Patch123: nextiteratorheaderblob.diff -Patch127: finddebuginfo-check-res-file.patch -Patch128: empty_dbbackend.diff Patch129: ndbglue.diff Patch130: dwarf5.diff Patch131: posttrans.diff @@ -257,7 +255,7 @@ cp build-aux/config.guess build-aux/config.sub db/dist/ %patch -P 93 -P 94 -P 99 %patch -P 100 -P 102 -P 103 %patch -P 109 -P 117 -%patch -P 122 -P 123 -P 127 -P 128 -P 129 -P 130 -P 131 +%patch -P 122 -P 123 -P 129 -P 130 -P 131 %ifarch aarch64 ppc64le riscv64 %patch6464 From 51692535dbb214506f7c6c5e244ea7dc9d232f6f4fdf1dc3871722cea077b121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 30 Mar 2021 09:59:48 +0000 Subject: [PATCH 5/9] - update to rpm-4.16.1.3 OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=577 --- python-rpm.changes | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python-rpm.changes b/python-rpm.changes index 48999e5..4f0142f 100644 --- a/python-rpm.changes +++ b/python-rpm.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de + +- update to rpm-4.16.1.3 + ------------------------------------------------------------------- Wed Sep 30 14:17:40 CEST 2020 - mls@suse.de From 2d9eb812f4502d0e5ff8d15cee6588e9e50c841a23ae9b2e6a4f3726d2cbe5b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 6 Apr 2021 08:33:47 +0000 Subject: [PATCH 6/9] ... OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=578 --- rpm.changes | 1 + 1 file changed, 1 insertion(+) diff --git a/rpm.changes b/rpm.changes index b659a73..1c2a273 100644 --- a/rpm.changes +++ b/rpm.changes @@ -11,6 +11,7 @@ Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de - reformat dwarf5.diff - add dump_posttrans and --runposttrans options to make it possible for libzypp to implement file triggers + new patch: posttrans.diff ------------------------------------------------------------------- Mon Feb 22 12:57:44 UTC 2021 - Martin Liška From 74855f6c35725219b4198b3b2b990fb6858c5f6b39ebf1f6ae9e5c3a8bb164b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 6 Apr 2021 09:41:47 +0000 Subject: [PATCH 7/9] ... OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=579 --- rpm.changes | 1 + 1 file changed, 1 insertion(+) diff --git a/rpm.changes b/rpm.changes index 1c2a273..99c224e 100644 --- a/rpm.changes +++ b/rpm.changes @@ -26,6 +26,7 @@ Mon Feb 8 09:38:33 UTC 2021 - Andreas Schwab - auto-config-update-aarch64-ppc64le.diff: update grep regex ------------------------------------------------------------------- +Thu Jan 14 15:40:39 UTC 2021 - Matej Cepl - Add explicit requirement on python-rpm-macros to avoid widespread breakage by package mistakenly ignoring their requirement of From 7cf402eda6d7ed472547fd71c3fe19fb8a93536a30bfd3eb347d862a7c276665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Tue, 6 Apr 2021 11:22:58 +0000 Subject: [PATCH 8/9] Accepting request 883259 from home:Andreas_Schwab:Factory - auto-config-update-aarch64-ppc64le.diff: Use timestamp in file instead of searching for arch name, which cannot handle all cases OBS-URL: https://build.opensuse.org/request/show/883259 OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=580 --- auto-config-update-aarch64-ppc64le.diff | 20 +++++++++++++++----- rpm.changes | 6 ++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/auto-config-update-aarch64-ppc64le.diff b/auto-config-update-aarch64-ppc64le.diff index 9020e38..daa3779 100644 --- a/auto-config-update-aarch64-ppc64le.diff +++ b/auto-config-update-aarch64-ppc64le.diff @@ -1,6 +1,8 @@ ---- ./build/parseSpec.c.orig 2019-10-02 12:38:51.836127743 +0000 -+++ ./build/parseSpec.c 2019-10-02 12:52:33.818447657 +0000 -@@ -926,7 +926,22 @@ static rpmSpec parseSpec(const char *spe +Index: build/parseSpec.c +=================================================================== +--- build/parseSpec.c.orig ++++ build/parseSpec.c +@@ -942,7 +942,30 @@ static rpmSpec parseSpec(const char *spe &(spec->buildrequires)); break; case PART_BUILD: @@ -12,11 +14,19 @@ + } + spec->build = newStringBuf(); + appendLineStringBuf(spec->build, -+ "ref=/usr/lib/rpm; testarch=$(uname -m)\n" ++ "ref=/usr/lib/rpm\n" ++ "mints=0\n" ++ "case $(uname -m) in\n" ++ " aarch64) mints=20120610;;\n" ++ " ppc64le) mints=20130610;;\n" ++ " riscv64) mints=20160911;;\n" ++ "esac\n" + "for s in guess sub; do\n" + " for c in $(find -maxdepth 8 -name \"config.$s\"); do\n" + " grep -q config-patches@ $c || continue\n" -+ " grep -q \"$testarch[-: ]\" $c || install -m 755 $ref/config.$s $c\n" ++ " timestamp=$(sed -n \"/^timestamp=/{s///;s/[-'\\\"]//g;p;q;}\" $c)\n" ++ " test -n \"$timestamp\" || continue\n" ++ " test $timestamp -ge $mints || install -m 755 $ref/config.$s $c\n" + " done\n" + "done\n" + ); diff --git a/rpm.changes b/rpm.changes index 99c224e..fa03ebf 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Apr 6 08:42:29 UTC 2021 - Andreas Schwab + +- auto-config-update-aarch64-ppc64le.diff: Use timestamp in file instead + of searching for arch name, which cannot handle all cases + ------------------------------------------------------------------- Tue Mar 30 11:15:44 CEST 2021 - mls@suse.de From 8c896c25d501e415fe2503b06c6967a978d501b1387000668184e62b30c3ad74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Fri, 9 Apr 2021 11:37:24 +0000 Subject: [PATCH 9/9] change dump_posttrans mechanism to imply --noposttrans OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=581 --- posttrans.diff | 82 +++++++++++++++++++++++++++----------------------- rpm.changes | 7 +++++ 2 files changed, 52 insertions(+), 37 deletions(-) diff --git a/posttrans.diff b/posttrans.diff index be9e3a4..6241d4f 100644 --- a/posttrans.diff +++ b/posttrans.diff @@ -1,5 +1,5 @@ ---- ./lib/poptI.c.orig 2020-06-23 12:13:01.896628395 +0000 -+++ ./lib/poptI.c 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/poptI.c.orig 2021-04-09 11:28:12.359647290 +0000 ++++ ./lib/poptI.c 2021-04-09 11:28:15.523640983 +0000 @@ -265,6 +265,10 @@ struct poptOption rpmInstallPoptTable[] &rpmIArgs.installInterfaceFlags, (INSTALL_REINSTALL|INSTALL_INSTALL), N_("reinstall package(s)"), @@ -11,8 +11,8 @@ POPT_TABLEEND }; ---- ./lib/psm.c.orig 2021-03-30 09:33:05.862532224 +0000 -+++ ./lib/psm.c 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/psm.c.orig 2021-04-09 11:28:12.359647290 +0000 ++++ ./lib/psm.c 2021-04-09 11:28:15.527640975 +0000 @@ -810,7 +810,7 @@ static rpmRC rpmPackageErase(rpmts ts, r } if (rc) break; @@ -22,8 +22,8 @@ /* Prepare post transaction uninstall triggers */ rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te); } ---- ./lib/rpmcli.h.orig 2020-05-28 10:04:25.037136686 +0000 -+++ ./lib/rpmcli.h 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpmcli.h.orig 2021-04-09 11:28:12.359647290 +0000 ++++ ./lib/rpmcli.h 2021-04-09 11:28:15.527640975 +0000 @@ -304,6 +304,7 @@ enum rpmInstallFlags_e { INSTALL_ERASE = (1 << 8), /*!< from --erase */ INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */ @@ -48,8 +48,8 @@ */ extern struct rpmInstallArguments_s rpmIArgs; ---- ./lib/rpminstall.c.orig 2020-05-28 10:04:25.040136702 +0000 -+++ ./lib/rpminstall.c 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpminstall.c.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/rpminstall.c 2021-04-09 11:28:15.527640975 +0000 @@ -4,6 +4,8 @@ #include "system.h" @@ -92,8 +92,8 @@ + argvFree(manifest); + return rc; +} ---- ./lib/rpmtriggers.c.orig 2020-05-28 10:04:25.043136719 +0000 -+++ ./lib/rpmtriggers.c 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpmtriggers.c.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/rpmtriggers.c 2021-04-09 11:31:46.999219563 +0000 @@ -1,5 +1,6 @@ #include "system.h" @@ -110,7 +110,7 @@ unsigned int tix, unsigned int priority) { if (trigs->count == trigs->alloced) { -@@ -177,6 +178,16 @@ int runPostUnTransFileTrigs(rpmts ts) +@@ -177,6 +178,14 @@ int runPostUnTransFileTrigs(rpmts ts) if (trigH == NULL) continue; @@ -118,16 +118,14 @@ + char *trigNEVRA = headerGetAsString(trigH, RPMTAG_NEVRA); + rpmlog(RPMLOG_NOTICE, "dump_posttrans: transfiletriggerpostun %u %u %s\n", trigs->triggerInfo[i].tix, trigs->triggerInfo[i].hdrNum, trigNEVRA); + free(trigNEVRA); -+ if ((rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN)) != 0) { -+ headerFree(trigH); -+ continue; -+ } ++ headerFree(trigH); ++ continue; + } + /* Prepare and run script */ script = rpmScriptFromTriggerTag(trigH, triggertag(RPMSENSE_TRIGGERPOSTUN), -@@ -583,6 +594,19 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm +@@ -583,6 +592,16 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm rpmTagVal priorityTag; rpmtriggers triggers; @@ -138,17 +136,14 @@ + rpmlog(RPMLOG_NOTICE, "dump_posttrans: install %u %s\n", hdrNum, trigNEVRA); + free(trigNEVRA); + } -+ if ((rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN)) != 0) { -+ -+ headerFree(trigH); -+ return RPMRC_OK; -+ } ++ headerFree(trigH); ++ return RPMRC_OK; + } if (tm == RPMSCRIPT_FILETRIGGER) { priorityTag = RPMTAG_FILETRIGGERPRIORITIES; } else { ---- ./lib/rpmtriggers.h.orig 2020-05-28 10:04:25.043136719 +0000 -+++ ./lib/rpmtriggers.h 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpmtriggers.h.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/rpmtriggers.h 2021-04-09 11:28:15.527640975 +0000 @@ -27,6 +27,10 @@ rpmtriggers rpmtriggersCreate(unsigned i RPM_GNUC_INTERNAL rpmtriggers rpmtriggersFree(rpmtriggers triggers); @@ -160,8 +155,8 @@ /* * Prepare post trans uninstall file triggers. After transcation uninstalled * files are not saved anywhere. So we need during uninstalation of every ---- ./lib/rpmts.h.orig 2021-03-30 09:33:05.886532181 +0000 -+++ ./lib/rpmts.h 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpmts.h.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/rpmts.h 2021-04-09 11:28:15.527640975 +0000 @@ -229,6 +229,15 @@ int rpmtsOrder(rpmts ts); int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); @@ -178,8 +173,8 @@ * Reference a transaction set instance. * @param ts transaction set * @return new transaction set reference ---- ./lib/rpmts_internal.h.orig 2020-05-28 10:04:25.043136719 +0000 -+++ ./lib/rpmts_internal.h 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/rpmts_internal.h.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/rpmts_internal.h 2021-04-09 11:28:15.527640975 +0000 @@ -87,6 +87,7 @@ struct rpmts_s { rpmtriggers trigs2run; /*!< Transaction file triggers */ @@ -188,8 +183,8 @@ }; #ifdef __cplusplus ---- ./lib/transaction.c.orig 2021-03-30 09:33:05.866532216 +0000 -+++ ./lib/transaction.c 2021-03-30 09:33:10.054524821 +0000 +--- ./lib/transaction.c.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./lib/transaction.c 2021-04-09 11:33:22.247029757 +0000 @@ -1468,6 +1468,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF /* Get available space on mounted file systems. */ (void) rpmtsInitDSI(ts); @@ -199,14 +194,27 @@ return 0; } -@@ -1856,12 +1858,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp - if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { - runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); - } -- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { +@@ -1846,22 +1848,26 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp + /* Actually install and remove packages */ + nfailed = rpmtsProcess(ts); + + if (ts->dump_posttrans) { + rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n"); + } ++ + /* Run %posttrans scripts unless disabled */ +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) { ++ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n"); + runTransScripts(ts, PKG_POSTTRANS); + } + + /* Run %transfiletriggerpostun scripts unless disabled */ +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { ++ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) { + runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); + } +- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { + if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) { runPostUnTransFileTrigs(ts); } @@ -217,7 +225,7 @@ runTransScripts(ts, PKG_TRANSFILETRIGGERIN); } /* Final exit code */ -@@ -1884,3 +1889,110 @@ exit: +@@ -1884,3 +1890,110 @@ exit: rpmsqSetAction(SIGPIPE, oact); return rc; } @@ -328,8 +336,8 @@ + rpmtsEmpty(ts); + return rc; +} ---- ./rpm.c.orig 2020-05-28 10:04:25.070136867 +0000 -+++ ./rpm.c 2021-03-30 09:33:10.054524821 +0000 +--- ./rpm.c.orig 2021-04-09 11:28:12.363647282 +0000 ++++ ./rpm.c 2021-04-09 11:28:15.527640975 +0000 @@ -19,6 +19,7 @@ enum modes { MODE_INSTALL = (1 << 1), MODE_ERASE = (1 << 2), diff --git a/rpm.changes b/rpm.changes index fa03ebf..cf2a444 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Apr 9 13:34:24 CEST 2021 - mls@suse.de + +- change dump_posttrans mechanism to imply --noposttrans so that + libzypp can be compatible with older rpm versions + changed patch: posttrans.diff + ------------------------------------------------------------------- Tue Apr 6 08:42:29 UTC 2021 - Andreas Schwab