Browse Source

storage/lvm: force default locale for lvm command cont.

Few more places where lvm commands are called.

Fixes QubesOS/qubes-issues#3753
Marek Marczykowski-Górecki 6 years ago
parent
commit
2c13ba9c48
2 changed files with 11 additions and 3 deletions
  1. 3 1
      qubes/storage/lvm.py
  2. 8 2
      qubes/tests/storage_lvm.py

+ 3 - 1
qubes/storage/lvm.py

@@ -170,8 +170,10 @@ def init_cache(log=logging.getLogger('qubes.storage.lvm')):
            '--units', 'b', '--separator', ';']
     if os.getuid() != 0:
         cmd.insert(0, 'sudo')
+    environ = os.environ.copy()
+    environ['LC_ALL'] = 'C.utf8'
     p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-        close_fds=True)
+        close_fds=True, env=environ)
     out, err = p.communicate()
     return_code = p.returncode
     if return_code == 0 and err:

+ 8 - 2
qubes/tests/storage_lvm.py

@@ -164,17 +164,23 @@ class TC_00_ThinPool(ThinPoolBase):
     def test_004_size(self):
         with self.assertNotRaises(NotImplementedError):
             size = self.pool.size
+        environ = os.environ.copy()
+        environ['LC_ALL'] = 'C.utf8'
         pool_size = subprocess.check_output(['sudo', 'lvs', '--noheadings',
             '-o', 'lv_size',
-            '--units', 'b', self.pool.volume_group + '/' + self.pool.thin_pool])
+            '--units', 'b', self.pool.volume_group + '/' + self.pool.thin_pool],
+            env=environ)
         self.assertEqual(size, int(pool_size.strip()[:-1]))
 
     def test_005_usage(self):
         with self.assertNotRaises(NotImplementedError):
             usage = self.pool.usage
+        environ = os.environ.copy()
+        environ['LC_ALL'] = 'C.utf8'
         pool_info = subprocess.check_output(['sudo', 'lvs', '--noheadings',
             '-o', 'lv_size,data_percent',
-            '--units', 'b', self.pool.volume_group + '/' + self.pool.thin_pool])
+            '--units', 'b', self.pool.volume_group + '/' + self.pool.thin_pool],
+            env=environ)
         pool_size, pool_usage = pool_info.strip().split()
         pool_size = int(pool_size[:-1])
         pool_usage = float(pool_usage)