Sfoglia il codice sorgente

dpkg: Do not write to the available file when unpacking binary packages

This information is not useful as dpkg has never recorded the archive
path, so it has never been truly available for re-installation anyway.

Only write to it if recording the information from the binary package
to the available file via --record-avail.
Guillem Jover 12 anni fa
parent
commit
840d33bf1d
2 ha cambiato i file con 14 aggiunte e 5 eliminazioni
  1. 3 0
      debian/changelog
  2. 11 5
      src/archives.c

+ 3 - 0
debian/changelog

@@ -21,6 +21,9 @@ dpkg (1.17.11) UNRELEASED; urgency=low
   * When parsing the statoverride database from dpkg-statoverride do not
   * When parsing the statoverride database from dpkg-statoverride do not
     consider it an error and refuse to operate at all if the user or group
     consider it an error and refuse to operate at all if the user or group
     names are not known to the system, just preserve them. Closes: #563307
     names are not known to the system, just preserve them. Closes: #563307
+  * Do not write to the available file when unpacking binary packages. This
+    information is not useful as dpkg has never recorded the archive path,
+    so it has never been truly available for re-installation anyway.
 
 
   [ Updated programs translations ]
   [ Updated programs translations ]
   * Danish (Joe Dalton). Closes: #754127
   * Danish (Joe Dalton). Closes: #754127

+ 11 - 5
src/archives.c

@@ -1543,14 +1543,20 @@ archivefiles(const char *const *argv)
   const char *volatile thisarg;
   const char *volatile thisarg;
   const char *const *volatile argp;
   const char *const *volatile argp;
   jmp_buf ejbuf;
   jmp_buf ejbuf;
+  enum modstatdb_rw msdbflags;
 
 
   trigproc_install_hooks();
   trigproc_install_hooks();
 
 
-  modstatdb_open(f_noact ?                          msdbrw_readonly :
-                 (cipaction->arg_int == act_avail ? msdbrw_readonly :
-                  fc_nonroot ?                      msdbrw_write :
-                                                    msdbrw_needsuperuser) |
-                 msdbrw_available_write);
+  if (f_noact)
+    msdbflags = msdbrw_readonly;
+  else if (cipaction->arg_int == act_avail)
+    msdbflags = msdbrw_readonly | msdbrw_available_write;
+  else if (fc_nonroot)
+    msdbflags = msdbrw_write;
+  else
+    msdbflags = msdbrw_needsuperuser;
+
+  modstatdb_open(msdbflags);
 
 
   checkpath();
   checkpath();
   pkg_infodb_upgrade();
   pkg_infodb_upgrade();