Imported Upstream version 17.29.3 upstream/17.29.3
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 20 Sep 2022 06:40:51 +0000 (15:40 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 20 Sep 2022 06:40:51 +0000 (15:40 +0900)
VERSION.cmake
package/libzypp.changes
zypp-core/AutoDispose.h
zypp-media/auth/credentialmanager.cc

index 0928c1d..9794c2f 100644 (file)
@@ -61,8 +61,8 @@
 SET(LIBZYPP_MAJOR "17")
 SET(LIBZYPP_COMPATMINOR "22")
 SET(LIBZYPP_MINOR "29")
-SET(LIBZYPP_PATCH "2")
+SET(LIBZYPP_PATCH "3")
 #
-# LAST RELEASED: 17.29.2 (22)
+# LAST RELEASED: 17.29.3 (22)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
index 35e6fa9..897e3da 100644 (file)
@@ -1,4 +1,13 @@
 -------------------------------------------------------------------
+Tue Feb  1 18:49:00 CET 2022 - ma@suse.de
+
+- Public header files on older distros must use c++11
+  (bsc#1194597)
+- Fix exception handling when reading or writing credentials
+  (bsc#1194898)
+- version 17.29.3 (22)
+
+-------------------------------------------------------------------
 Thu Jan 20 17:29:52 CET 2022 - ma@suse.de
 
 - Fix Legacy include (bsc#1194597)
index 7107301..c682475 100644 (file)
@@ -98,7 +98,9 @@ namespace zypp
       typedef typename boost::call_traits<Tp>::const_reference  const_reference;
       typedef Tp                                                value_type;
       typedef typename boost::call_traits<Tp>::value_type       result_type;
-      using dispose_param_type = std::conditional_t< std::is_pointer_v<Tp> || std::is_integral_v<Tp>, Tp const, reference >;
+      // bsc#1194597: Header is exposed in the public API, so it must be c++11:
+      // using dispose_param_type = std::conditional_t< std::is_pointer_v<Tp> || std::is_integral_v<Tp>, Tp const, reference >;
+      using dispose_param_type = typename std::conditional< std::is_pointer<Tp>::value || std::is_integral<Tp>::value, Tp const, reference >::type;
 
     public:
       /** Dispose function signatue. */
index 0a845d2..56cd3e6 100644 (file)
@@ -243,13 +243,20 @@ namespace zypp
       // get from /etc/zypp/credentials.d, delete the leading path
       credfile = _options.customCredFileDir / file.basename();
 
-    // make sure only our thread accesses the file
-    bpci::file_lock lockFile ( credfile.c_str() );
-    bpci::scoped_lock lock( lockFile );
+    PathInfo pi { credfile };
+    if ( pi.userMayR() ) try {
+      // make sure only our thread accesses the file
+      bpci::file_lock lockFile ( credfile.c_str() );
+      bpci::scoped_lock lock( lockFile );
+
+      CredentialFileReader(credfile, bind(&Impl::processCredentials, this, _1));
+    }
+    catch ( ... ) {
+      WAR << pi << " failed to lock file for reading." << endl;
+    }
 
-    CredentialFileReader(credfile, bind(&Impl::processCredentials, this, _1));
     if (_credsTmp.empty())
-      WAR << file << " does not contain valid credentials or is not readable." << endl;
+      WAR << pi << " does not contain valid credentials or is not readable." << endl;
     else
     {
       result = *_credsTmp.begin();
@@ -265,26 +272,31 @@ namespace zypp
       const mode_t mode)
   {
     int ret = 0;
-    filesystem::assert_dir(file.dirname());
+    filesystem::assert_file_mode( file, mode );
 
-    std::ofstream fs(file.c_str());
-    if (!fs)
-      ret = 1;
+    PathInfo pi { file };
+    if ( pi.userMayRW() ) try {
+      // make sure only our thread accesses the file
+      bpci::file_lock lockFile ( file.c_str() );
+      bpci::scoped_lock lock( lockFile );
 
-    // make sure only our thread accesses the file
-    bpci::file_lock lockFile ( file.c_str() );
-    bpci::scoped_lock lock( lockFile );
-
-
-    for_(it, creds.begin(), creds.end())
-    {
-      (*it)->dumpAsIniOn(fs);
-      (*it)->setLastDatabaseUpdate( time( nullptr ) );
-      fs << endl;
+      std::ofstream fs(file.c_str());
+      for_(it, creds.begin(), creds.end())
+      {
+        (*it)->dumpAsIniOn(fs);
+        (*it)->setLastDatabaseUpdate( time( nullptr ) );
+        fs << endl;
+      }
+      if ( !fs ) {
+        WAR << pi << " failed to write credentials to file." << endl;
+        ret = 1;
+      }
+      fs.close();
+    }
+    catch ( ... ) {
+      WAR << pi << " failed to lock file for writing." << endl;
+      ret = 1;
     }
-    fs.close();
-
-    filesystem::chmod(file, mode);
 
     return ret;
   }